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>
sshow
quelle
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+/);

Fenton
quelle
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"));
});
Harpal
quelle
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()

War10ck
quelle
17

Dies sollte den Trick tun:

...
select: function(event, ui){ 
   ui.tab.attr('class');
} ,
...

Weitere Informationen zur Datei ui.tab finden Sie unter http://jqueryui.com/demos/tabs/#Events

jeroen.verhoest
quelle
Was bedeutet das? Könnten Sie das mehr erklären?
Es ist ui.tab anstelle von ui.item, das Sie verwenden müssen. Ich dachte es wäre ui.item.
jeroen.verhoest
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 
    })
Kybernetisch
quelle
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);
});
Pushkraj
quelle