Wie erhalte ich die Klasse des angeklickten Elements?


228

Ich kann nicht herausfinden, wie ich den classWert des angeklickten Elements erhalte .

Wenn ich den folgenden Code verwende, erhalte ich jedes Mal "node-205" .

jQuery:

.find('> ul')
.tabs(
{
    selectedClass: 'active',
    select: function (event, ui) {
        //shows only the first element of list
        $(this).children('li').attr('class');
    },
    cookie: { expires: 0 },
    fx: fx
})

HTML:

<ul class="tabs">
  <li class="node-205"></li>
  <li class="node-150"></li>
  <li class="node-160"></li>
</ul>

Ihre Frage ist ziemlich unklar ... verwenden Sie ein JQuery-Plugin?
Jrharshath

Wenn es sich um ein angeklicktes Element handelt, sollten Sie nicht die Funktion click () verwenden, um das Ereignis zu binden und die Klasse abzurufen? Vielleicht habe ich die Frage nicht ganz verstanden ...
e-satis

Antworten:


396

Hier ist ein kurzes jQuery-Beispiel, das jedem "li" -Tag ein Klickereignis hinzufügt und dann das Klassenattribut für das angeklickte Element abruft. Ich hoffe es hilft.

$("li").click(function() {
   var myClass = $(this).attr("class");
   alert(myClass);
});

Ebenso müssen Sie das Objekt nicht in jQuery einschließen:

$("li").click(function() {
   var myClass = this.className;
   alert(myClass);
});

In neueren Browsern erhalten Sie die vollständige Liste der Klassennamen :

$("li").click(function() {
   var myClasses = this.classList;
   alert(myClasses.length + " " + myClasses[0]);
});

Sie können classListin älteren Browsern mit emulierenmyClass.split(/\s+/);


1
"Klasse" ist kein gültiger Variablenname.
Fred Bergman

1
Eine dieser lustigen Situationen, in denen jQuery der lange Weg ist. this.className gibt Ihnen das gleiche wie $ (this) .attr ("class")
David Gilbertson

Was ist, wenn das Element mehr als einen Klassennamen hat?
Dharman

1
Ich weiß nicht warum, aber das zweite Beispiel kann den Klassennamen für mich nicht abrufen. Das erste Beispiel funktioniert jedoch hervorragend! Vielen Dank! Hat mir eine Menge geholfen. :)
Chiefwarpaint

38
$("li").click(function(){
    alert($(this).attr("class"));
});

28

Ich habe diese Frage gesehen und dachte, ich könnte sie etwas weiter ausbauen. Dies ist eine Erweiterung der Idee, die @SteveFenton hatte. Anstatt ein clickEreignis an jedes liElement zu binden , wäre es effizienter, die Ereignisse von ulunten zu delegieren .

Für jQuery 1.7 und höher

$("ul.tabs").on('click', 'li', function(e) {
   alert($(this).attr("class"));
});

Dokumentation: .on()

Für jQuery 1.4.2 - 1.7

$("ul.tabs").delegate('li', 'click', function(e) {
   alert($(this).attr("class"));
});

Dokumentation: .delegate()

Als letzter Ausweg für jQuery 1.3 - 1.4

$("ul.tabs").children('li').live('click', function(e) {
   alert($(this).attr("class"));
});

oder

$("ul.tabs > li").live('click', function(e) {
   alert($(this).attr("class"));
});

Dokumentation: .live()



11

Alle angebotenen Lösungen zwingen Sie dazu , das Element zu kennen, auf das Sie vorher klicken werden . Wenn Sie die Klasse von einem angeklickten Element erhalten möchten, können Sie Folgendes verwenden:

$(document).on('click', function(e) {
    clicked_id = e.target.id;
    clicked_class = $('#' + e.target.id).attr('class');
    // do stuff with ids and classes 
    })

2
Es sollte beachtet werden, dass, wenn das Abrufen einer ID unzuverlässig ist, immer $(e.target)anstelle von verwendet werden kann $('#' + e.target.id)und jQuery diesen Fall weiterhin angemessen behandelt.
BobChao87

9
$("div").click(function() {
  var txtClass = $(this).attr("class");
  console.log("Class Name : "+txtClass);
});
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.