Как получить класс нажатого элемента? - PullRequest
216 голосов
/ 08 июня 2009

Я не могу понять, как получить class значение элемента, по которому щелкнули.

Когда я использую код ниже, я получаю "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>

Ответы [ 6 ]

380 голосов
/ 08 июня 2009

Вот краткий пример jQuery, который добавляет событие click к каждому тегу "li", а затем извлекает атрибут класса для элемента clicked. Надеюсь, это поможет.

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

Точно так же вам не нужно оборачивать объект в jQuery:

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

А в новых браузерах вы можете получить полный список имен классов :

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

Вы можете эмулировать classList в старых браузерах, используя myClass.split(/\s+/);

38 голосов
/ 20 января 2011
$("li").click(function(){
    alert($(this).attr("class"));
});
22 голосов
/ 23 июля 2013

Я видел этот вопрос, поэтому я подумал, что мог бы расширить его немного больше. Это расширение идеи, которая была у @SteveFenton. Вместо привязки события click к каждому элементу li было бы более эффективно делегировать события от ul вниз.

Для jQuery 1.7 и выше

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

Документация: .on()

Для jQuery 1.4.2 - 1.7

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

Документация: .delegate()

В крайнем случае для jQuery 1.3 - 1.4

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

или

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

Документация: .live()

17 голосов
/ 08 июня 2009

Это должно сработать:

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

Подробнее о файле ui.tab см. http://jqueryui.com/demos/tabs/#Events

7 голосов
/ 23 июля 2013
$("div").click(function() {
  var txtClass = $(this).attr("class");
  console.log("Class Name : "+txtClass);
});
4 голосов
/ 17 июня 2018

Все предоставленные решения заставляют вас знать элемент, на который вы предварительно нажмете . Если вы хотите получить класс из , любой элемент нажал , вы можете использовать:

$(document).on('click', function(e) {
    clicked_id = e.target.id;
    clicked_class = $('#' + e.target.id).attr('class');
    // do stuff with ids and classes 
    })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...