Ruft den Klassennamen mit jQuery ab


603

Ich möchte den Klassennamen mit jQuery erhalten

Und wenn es eine ID hat

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

2
@Amarghosh: Richtig, richtig, aber Sie könnten tatsächlich in diese Situation geraten, wenn Sie einige Traversal-Methoden wie verwenden parents().
Boldewyn

8
fyi this.classNamearbeitet ohne jquery (würde "myclass"im obigen Beispiel zurückkehren)
Peter Berg

Antworten:


1062

Nachdem Sie das Element über andere Mittel als seine Klasse als jQuery-Objekt erhalten haben, dann

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

sollte den Trick machen. Für die ID verwenden .attr('id').

Wenn Sie sich in einem Ereignishandler oder einer anderen jQuery-Methode befinden, bei der das Element der reine DOM-Knoten ohne Wrapper ist, können Sie Folgendes verwenden:

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

Beide sind Standard-DOM-Methoden und werden in allen Browsern gut unterstützt.


7
und wenn es eine ID ist var IDName = $ ('# id'). attr ('id');
X10nD

18
Wie Sandino in seiner Antwort betont, besteht immer die Möglichkeit, dass mehr als ein Klassenname festgelegt wird. (Zum Beispiel fügt JQuery-UI überall Hilfsklassen hinzu). Sie können dies immer überprüfen mit if(className.indexOf(' ') !== -1){throw new Error('Uh-oh! More than one class name!');}
Potherca

17
Wenn Sie es nutzen .attr('class')und damit kombinieren, können if(className.indexOf('Class_I_am_Looking_For') > = 0)Sie leicht überprüfen, ob eine bestimmte Klasse vorhanden ist, und trotzdem mehrere Klassen verarbeiten.
RonnBlack

18
RonnBlack: if(className.indexOf('Class_I_am_Looking_For') > = 0)wird auch passen"This_Is_Not_the_Class_I_am_Looking_For"
Leif Neland

1
@BenRacicot Verwenden Sie in diesem Fall einfach Standard-DOM-Methoden .
Boldewyn

227

Es ist besser zu verwenden, .hasClass()wenn Sie überprüfen möchten, ob ein Element ein bestimmtes hat class. Dies liegt daran class, dass die Überprüfung eines Elements nicht trivial ist.

Beispiel:

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

Wo:

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

Mit können .hasClass()wir testen, ob der divdie Klasse hat divhover.

$('#test').hasClass('divhover'); // returns true
$('#test').hasClass('main');     // returns true

13
Aber was ist, wenn Sie den Klassennamen nicht kennen? ;-)
Potherca

10
das ist richtig ... das ist nur nützlich, wenn Sie den Klassennamen kennen, den Sie überprüfen ... aber mein Kommentar war, Sie darauf aufmerksam zu machen, dass Sie nicht .attr ('class') == 'CLASSNAME_YOU_ARE_SEARCHING' verwenden, um zu überprüfen, ob ein dom-Element einen hat Klasse stattdessen ist es besser, .hasClass
Sandino

4
Ein anderer Weg ist zu verwenden.is('.divhover')
orad

Ist es möglich, Klassen eines Elements zu durchlaufen?
Fractaliste

3
Ja, es ist nur do $ (Element) .attr ("Klasse"). Split (''); und Sie erhalten eine Liste, dann verwenden Sie einfach eine
for-

38

Seien Sie vorsichtig, vielleicht haben Sie eine Klasse und eine Unterklasse.

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

Wenn Sie frühere Lösungen verwenden, haben Sie:

myclass mysubclass

Wenn Sie also die Klassenauswahl haben möchten , gehen Sie wie folgt vor:

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

und du wirst haben

.myclass.mysubclass

Wenn Sie nun alle Elemente auswählen möchten, die dieselbe Klasse haben, wie z. B. div oben:

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

das bedeutet

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

Update 2018

OR kann mit Vanille-Javascript in 2 Zeilen implementiert werden:

  const { classList } = document.querySelector('#id');
  document.querySelectorAll(`.${Array.from(classList).join('.')}`);

6
Zwischen den Klassen kann mehr als ein Leerzeichen stehen. Richtigere Variante var className = '.' + $ ('# Id'). Attr ('class'). Replace (/ + (? =) / G, ''). Split ('') .join ('. ')
Suhan

3
Ein noch korrekterer Ausdruck ist '.'+$('#id').attr('class').split(/[ \n\r\t\f]+/).join('.'), dass Leerzeichen, Tabulator, LF, CR und FF Klassen trennen dürfen. ( .split()Akzeptiert auch RegExps.)
Boldewyn

'.'+$('#id').attr('class').split(/\s+/).join('.')wäre prägnanter, nicht wahr? Oder würde das zu etwas passen, an das ich nicht denke?
LostHisMind

1
Um sicher zu gehen und keinen nachgestellten Punkt zu erhalten, fügen Sie mit einer dieser Lösungen eine Trimmung wie diese hinzu.attr('class').trim().split(...)
Christian Lavallee

28

Dies dient dazu, die zweite Klasse mithilfe eines Elements in mehrere Klassen zu unterteilen

var class_name = $('#videobuttonChange').attr('class').split(' ')[1];


11

Wenn Sie <div>eine haben id:

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

...Du kannst es versuchen:

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

Wenn Sie <div>nur eine haben class, können Sie versuchen:

var yourClass = $(".my-custom-class").prop("class");

6

Wenn Sie die Split-Funktion verwenden, um die Klassennamen zu extrahieren, müssen Sie mögliche Formatierungsschwankungen ausgleichen, die zu unerwarteten Ergebnissen führen können. Zum Beispiel:

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

produziert

".myclass1..myclass2."

Ich denke, Sie sind besser dran, einen regulären Ausdruck zu verwenden, um eine Reihe zulässiger Zeichen für Klassennamen abzugleichen. Zum Beispiel:

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

produziert

["myclass1", "myclass2"]

Der reguläre Ausdruck ist wahrscheinlich nicht vollständig, aber hoffentlich verstehen Sie meinen Standpunkt. Dieser Ansatz verringert die Möglichkeit einer schlechten Formatierung.


6

Um die Whitestock-Antwort zu vervollständigen (die beste, die ich gefunden habe), habe ich Folgendes getan:

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

Für "myclass1 myclass2" lautet das Ergebnis ".myclass1 .myclass2".


5

Sie können den Klassennamen auf zwei Arten erhalten:

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

ODER

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

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

Mit Javascript

document.getElementById('elem').className;

Mit jQuery

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

ODER

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

2

Wenn Sie den Klassennamen nicht kennen, aber die ID kennen, können Sie dies versuchen:

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

Dann nenne es mit:

alert($('#currentST').attr('class'));

2

Wenn Sie Klassen von div erhalten möchten und dann überprüfen möchten, ob eine Klasse vorhanden ist, verwenden Sie diese einfach.

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

z.B;

if ( $('body').hasClass( 'home' ) ) {
    $('#menu-item-4').addClass('active');
}

2

Versuch es

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

Wenn wir ein einzelnes divElement haben oder das erste Element möchten , können wir es verwenden

$('div')[0].classNamesonst brauchen wir eines idvon diesem Element


0

Wenn wir einen Code haben:

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

Um den Klassennamen mit jQuery zu übernehmen, können wir eine einfache Plugin-Methode definieren und verwenden:

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

oder

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

Die Verwendung der Methode wird sein:

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

Wir müssen beachten, dass im Gegensatz zur nativen Methode element.className eine Liste von Klassen zurückgegeben wird, die nur die erste Klasse der angehängten Klassen zurückgibt. Da dem Element häufig mehr als eine Klasse zugeordnet ist, empfehle ich, nicht diese native Methode, sondern element.classlist oder die oben beschriebene Methode zu verwenden.

Die erste Variante gibt eine Liste von Klassen als Array zurück, die zweite als Zeichenfolge - Klassennamen, die durch Leerzeichen getrennt sind:

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

Ein weiterer wichtiger Hinweis ist, dass sowohl die Methode als auch die jQuery-Methode

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

Gibt nur die Klassenliste des ersten Elements zurück, das vom jQuery-Objekt erfasst wurde, wenn wir einen allgemeineren Selektor verwenden, der auf viele andere Elemente verweist. In einem solchen Fall müssen wir das Element markieren, wir möchten seine Klassen erhalten, indem wir einen Index verwenden, z

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

Es hängt auch davon ab, was Sie mit diesen Klassen tun müssen. Wenn Sie nur nach einer Klasse in der Klassenliste des Elements mit dieser ID suchen möchten, sollten Sie einfach die Methode "hasClass" verwenden:

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

wie in den Kommentaren oben erwähnt. Wenn Sie jedoch möglicherweise alle Klassen als Selektor verwenden müssen, verwenden Sie diesen Code:

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

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

Das Ergebnis wird sein:

// .myClass.myClass2

und Sie könnten es zum Beispiel dazu bringen, dynamisch eine bestimmte CSS-Regel zum Umschreiben zu erstellen.

Grüße



-1

Der beste Weg, um Klassennamen in Javascript oder JQuery zu erhalten

attr() Die Attributfunktion wird verwendet, um Attribute abzurufen und festzulegen.


Holen Sie sich Klasse

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

Überprüfen Sie, ob eine Klasse vorhanden ist oder nicht

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
    }

Klasse einstellen

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

Klasse mit Klick auf die Schaltfläche mit jQuery abrufen

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

Klasse hinzufügen, wenn der Selektor mit jQuery keine Klasse hat

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

Holen Sie sich die zweite Klasse in mehrere Klassen mit einem Element

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

var mysecondclass = $('#mydiv').attr('class').split(' ')[1];

-3

Verwendung wie folgt: -

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

Wenn Sie diese Klasse mehrmals verwendet haben, verwenden Sie jeden Operator

$(".myclass").each(function (index, value) {
//do you code
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.