Uzyskaj nazwę klasy za pomocą jQuery


603

Chcę uzyskać nazwę klasy za pomocą jQuery

A jeśli ma identyfikator

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

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.


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

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('.')}`);

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];


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");

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.


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”


5

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

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

LUB

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

5
<div id="elem" class="className"></div>

Z Javascriptem

document.getElementById('elem').className;

Z jQuery

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

LUB

$('#elem').get(0).className;

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'));

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');
}

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>

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


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



-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];

-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
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.