Uzyskaj nazwę klasy za pomocą jQuery

603

Chcę uzyskać nazwę klasy za pomocą jQuery

A jeśli ma identyfikator

<div class="myclass"></div>
X10nD
źródło
2
@Amarghosh: Prawda, prawda, ale możesz rzeczywiście dostać się do tej sytuacji, jeśli użyjesz takich metod przejścia parents().
Boldewyn,
8
fyi this.classNamedziała bez jquery (powróciłby "myclass"w powyższym przykładzie)
Peter Berg

Odpowiedzi:

1062

Po uzyskaniu elementu jako obiektu jQuery za pomocą innych środków niż jego klasa

var className = $('#sidebar div:eq(14)').attr('class');

powinien załatwić sprawę. Do użycia identyfikatora .attr('id').

Jeśli znajdujesz się w module obsługi zdarzeń lub innej metodzie jQuery, w której elementem jest czysty węzeł DOM bez opakowania, możesz użyć:

this.className // for classes, and
this.id // for IDs

Obie są standardowymi metodami DOM i są dobrze obsługiwane we wszystkich przeglądarkach.

Boldewyn
źródło
7
a jeśli jest to identyfikator var IDName = $ ('# id'). attr ('id');
X10nD,
18
Jak wskazuje sandino w swojej odpowiedzi, zawsze istnieje szansa na ustawienie więcej niż jednej nazwy klasy. (na przykład JQuery-UI dodaje klasy pomocnicze w każdym miejscu). Zawsze możesz to sprawdzić za pomocą if(className.indexOf(' ') !== -1){throw new Error('Uh-oh! More than one class name!');}
Potherca
17
Jeśli użyjesz dźwigni .attr('class')i połączysz ją if(className.indexOf('Class_I_am_Looking_For') > = 0), możesz łatwo sprawdzić, czy istnieje konkretna klasa i nadal obsługiwać wiele klas.
RonnBlack,
18
RonnBlack: if(className.indexOf('Class_I_am_Looking_For') > = 0)również będzie pasował"This_Is_Not_the_Class_I_am_Looking_For"
Leif Neland
1
@BenRacicot w takim przypadku wystarczy użyć standardowych metod DOM .
Boldewyn
227

Lepiej jest użyć, .hasClass()jeśli chcesz sprawdzić, czy element ma konkretny element class. Wynika to z faktu, że gdy element ma wiele class, sprawdzenie nie jest trywialne.

Przykład:

<div id='test' class='main divhover'></div>

Gdzie:

$('#test').attr('class');        // returns `main divhover`.

Dzięki .hasClass()możemy sprawdzić, czy divma klasę divhover.

$('#test').hasClass('divhover'); // returns true
$('#test').hasClass('main');     // returns true
sandino
źródło
13
Ale co, jeśli nie znasz nazwy klasy? ;-)
Potherca
10
to prawda ... jest to przydatne tylko, jeśli znasz nazwę klasy, którą sprawdzasz ... ale mój komentarz ostrzegł cię, abyś nie używał .attr ('class') == 'CLASSNAME_YOU_ARE_SEARCHING', aby sprawdzić, czy element dom ma jakieś zamiast klasy lepiej jest użyć .hasClass
sandino
4
Innym sposobem jest użycie.is('.divhover')
orad
Czy jest możliwe zapętlenie klas elementu?
Fractaliste,
3
Tak, po prostu wykonaj $ (element) .attr („klasa”). Split (''); a otrzymasz listę, a następnie użyj pętli for lub foreach
sandino
38

Bądź ostrożny. Być może masz klasę i podklasę.

  <div id='id' class='myclass mysubclass' >dfdfdfsdfds</div>

Jeśli skorzystasz z poprzednich rozwiązań, będziesz mieć:

myclass mysubclass

Więc jeśli chcesz mieć selektor klasy , wykonaj następujące czynności:

var className = '.'+$('#id').attr('class').split(' ').join('.')

i będziesz miał

.myclass.mysubclass

Teraz, jeśli chcesz wybrać wszystkie elementy, które mają tę samą klasę, takie jak div powyżej:

   var brothers=$('.'+$('#id').attr('class').split(' ').join('.'))

to znaczy

var brothers=$('.myclass.mysubclass')

Aktualizacja 2018

LUB można zaimplementować za pomocą waniliowego javascript w 2 wierszach:

  const { classList } = document.querySelector('#id');
  document.querySelectorAll(`.${Array.from(classList).join('.')}`);
Abdennour TOUMI
źródło
6
Między klasami może znajdować się więcej niż jedna przestrzeń. Bardziej poprawny wariant var className = '.' + $ ('# Id'). Attr ('class'). Replace (/ + (? =) / G, ''). Split ('') .join ('. ')
Suhan
3
Jeszcze bardziej poprawnym wyrażeniem jest to '.'+$('#id').attr('class').split(/[ \n\r\t\f]+/).join('.'), że spacja, Tab, LF, CR i FF mogą rozdzielać klasy. ( .split()akceptuje również RegExps.)
Boldewyn
'.'+$('#id').attr('class').split(/\s+/).join('.')byłoby bardziej zwięzłe, prawda? A może pasowałoby to do czegoś, o czym nie myślę?
LostHisMind
1
Aby być bezpiecznym i nie dostawać żadnej kropki, przy każdym z tych rozwiązań dodaj takie wykończenie.attr('class').trim().split(...)
Christian Lavallee
28

Ma to na celu przekształcenie drugiej klasy w wiele klas za pomocą elementu

var class_name = $('#videobuttonChange').attr('class').split(' ')[1];
Sankar
źródło
17

możesz po prostu użyć,

var className = $('#id').attr('class');

Madura Harshana
źródło
11

Jeśli urządzenie <div>posiada id:

​<div id="test" class="my-custom-class"></div>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

...możesz spróbować:

var yourClass = $("#test").prop("class");

Jeśli masz <div>tylko jeden class, możesz spróbować:

var yourClass = $(".my-custom-class").prop("class");
mg1075
źródło
6

Jeśli zamierzasz użyć funkcji podziału do wyodrębnienia nazw klas, będziesz musiał zrekompensować potencjalne warianty formatowania, które mogą dać nieoczekiwane wyniki. Na przykład:

" myclass1  myclass2 ".split(' ').join(".")

produkuje

".myclass1..myclass2."

Myślę, że lepiej jest użyć wyrażenia regularnego, aby dopasować zestaw dopuszczalnych znaków dla nazw klas. Na przykład:

" myclass1  myclass2  ".match(/[\d\w-_]+/g);

produkuje

["myclass1", "myclass2"]

Wyrażenie regularne prawdopodobnie nie jest kompletne, ale mam nadzieję, że rozumiesz mój punkt widzenia. Takie podejście ogranicza możliwość złego formatowania.

Whitestock
źródło
6

Aby wypełnić odpowiedź Whitestock (która jest najlepsza, jaką znalazłem), zrobiłem:

className = $(this).attr('class').match(/[\d\w-_]+/g);
className = '.' + className.join(' .');

Tak więc dla „myclass1 myclass2” wynikiem będzie „.myclass1 .myclass2”

Paul Leclercq
źródło
5

Nazwę klasy można uzyskać na dwa sposoby:

var className = $('.myclass').attr('class');

LUB

var className = $('.myclass').prop('class');
Sadikhasan
źródło
5
<div id="elem" class="className"></div>

Z Javascriptem

document.getElementById('elem').className;

Z jQuery

$('#elem').attr('class');

LUB

$('#elem').get(0).className;
Bilal Iqbal
źródło
2

Jeśli nie znasz nazwy klasy, ALE znasz identyfikator, możesz spróbować:

<div id="currentST" class="myclass"></div>

Następnie zadzwoń, używając:

alert($('#currentST').attr('class'));
Leroy Gumede
źródło
2

Jeśli chcesz uzyskać klasy div, a następnie chcesz sprawdzić, czy istnieje jakaś klasa, skorzystaj z prostego użycia.

if ( $('#div-id' ).hasClass( 'classname' ) ) {
    // do something...
}

na przykład;

if ( $('body').hasClass( 'home' ) ) {
    $('#menu-item-4').addClass('active');
}
Aamer Shahzad
źródło
2

Spróbuj

HTML

<div class="class_area-1">
    area 1
</div>

<div class="class_area-2">
    area 2
</div>

<div class="class_area-3">
    area 3
</div>

jQuery

<script src="https://code.jquery.com/jquery-1.11.3.js"></script>
<script type="application/javascript">
    $('div').click(function(){
        alert($(this).attr('class'));
    });
</script>
Jay Zalavadiya
źródło
0

jeśli mamy pojedynczy lub chcemy pierwszego divelementu, którego możemy użyć

$('div')[0].classNamew przeciwnym razie potrzebujemy jednego idz tych elementów

arunkumar talla
źródło
0

Jeśli mamy kod:

<div id="myDiv" class="myClass myClass2"></div> 

aby przyjąć nazwę klasy za pomocą jQuery, możemy zdefiniować i użyć prostej metody wtyczki:

$.fn.class = function(){
  return Array.prototype.slice.call( $(this)[0].classList );
}

lub

 $.fn.class = function(){
   return $(this).prop('class');
 } 

Zastosowanie metody będzie następujące:

$('#myDiv').class();

Musimy zauważyć, że zwróci listę klas w przeciwieństwie do metody macierzystej element.className, która zwraca tylko pierwszą klasę dołączonych klas. Ponieważ często element ma więcej niż jedną klasę, zaleca się, aby nie używać tej metody natywnej, ale element.classlist lub metodę opisaną powyżej.

Pierwszy wariant zwróci listę klas jako tablicę, drugi jako ciąg - nazwy klas oddzielone spacjami:

// [myClass, myClass2]
// "myClass myClass2"

Inną ważną uwagą jest to, że zarówno metody, jak i metoda jQuery

$('div').prop('class');

zwraca tylko listę klas pierwszego elementu przechwyconego przez obiekt jQuery, jeśli użyjemy bardziej powszechnego selektora, który wskazuje wiele innych elementów. W takim przypadku musimy zaznaczyć element, chcemy uzyskać jego klasy, używając jakiegoś indeksu, np

$('div:eq(2)').prop('class');

To zależy również od tego, co musisz zrobić z tymi klasami. Jeśli chcesz po prostu sprawdzić klasę na liście klas elementu o tym identyfikatorze, powinieneś po prostu użyć metody „hasClass”:

if($('#myDiv').hasClass('myClass')){
   // do something
}

jak wspomniano w komentarzach powyżej. Ale jeśli będziesz musiał wziąć wszystkie klasy jako selektor, użyj tego kodu:

$.fn.classes = function(){
   var o = $(this);
   return o.prop('class')? [''].concat( o.prop('class').split(' ') ).join('.') : '';
 } 

 var mySelector = $('#myDiv').classes();

Wynik będzie:

// .myClass.myClass2

i możesz to zrobić, aby dynamicznie utworzyć na przykład konkretną regułę przepisywania css.

pozdrowienia

Christiyan
źródło
0

To też działa.

const $el = $(".myclass");
const className = $el[0].className;
Adrian Bartłomiej
źródło
-1

Najlepszy sposób na uzyskanie nazwy klasy w javascript lub jquery

attr() funkcja atrybutu służy do pobierania i ustawiania atrybutu.


Zdobądź klasę

jQuery('your selector').attr('class');  // Return class

Sprawdź, czy klasa istnieje, czy nie

The hasClass() method checks if any of the selected elements have a specified class name.

 if(jQuery('selector').hasClass('abc-class')){
        // Yes Exist
    }else{
        // NOt exists
    }

Ustaw klasę

jQuery('your selector').attr('class','myclass');  // It will add class to your selector

Uzyskaj klasę po kliknięciu przycisku za pomocą jQuery

jQuery(document).on('click','button',function(){
     var myclass = jQuery('#selector').attr('class');
});

Dodaj klasę, jeśli selektor nie ma żadnej klasy za pomocą jQuery

if ( $('#div-id' ).hasClass( 'classname' ) ) {
        // Add your code
    }

Podziel drugą klasę na wiele klas, używając elementu

Change array position in place of [1] to get particular class.

var mysecondclass = $('#mydiv').attr('class').split(' ')[1];
Mayank Dudakiya
źródło
-3

użyj w ten sposób:

$(".myclass").css("color","red");

jeśli używałeś tej klasy więcej niż jeden raz, użyj każdego operatora

$(".myclass").each(function (index, value) {
//do you code
}
Srujal Patel
źródło