2015-11-26 1 views
0

У меня есть список, в котором элементы списка имеют несколько классов CSS, такие как:Как вернуть несколько классов CSS с помощью метода .attr()?

<li class="nav-all active"><a href="#">All</a></li> 

Я пытаюсь использовать JQuery, чтобы вытащить эту информацию в строку по щелчку:

var navButtons = $(".nav li"); 
navButtons.click(function() { 
var category = $(this).attr('class'); 
//Do more stuff here 
}); 

Однако , Я получаю только первый класс, а не полную строку, которая в этом примере будет "nav-all active". Является ли это предполагаемой функциональностью? Я не вижу ничего такого поведения в API. Кроме того, есть ли способ изменить вызов .attr, чтобы получить полный результат или this.className здесь единственный вариант?

Редактировать: Спасибо за помощь, всем. Я основал образец кода в этом вопросе на более крупном скрипте, который динамически применял второй класс, и оказалось, что я вызывал .attr в тот момент, когда li имел только один класс, поэтому я получил правильный результат. Увидев скрипку, которую поделил @Barmar, мне помогли установить соединение, поэтому я предполагаю, что вынос - это тестирование небольших бит в изоляции.

+2

Возможный дубликат [Jquery - прочитать все классы из DIV] (http://stackoverflow.com/questions/3802508/jquery-read-all-classes-from-a-div) –

+0

Когда я пытаюсь, я получаю оба класса. http://jsfiddle.net/barmar/ds3nhv7q/ – Barmar

+1

@SimonMerrick Проблема в этом вопросе оказывается опечаткой в ​​скрипке. Его код работает, когда это исправлено. – Barmar

ответ

3

Вы можете просто получить его, используя this.classList, который вернет вам массив, такой как список.

var navButtons = $(".nav li"); 
navButtons.click(function() { 
var category = this.classList; 
category[0];// => "nav-all" 
//Do more stuff here 
}); 

Более подробную информацию о tokenList https://developer.mozilla.org/en/docs/Web/API/DOMTokenList

0

Я просто раздвоение класс вроде этого:

var category = $(this).attr('class').split(' ')[0]; 

Fiddle

Смежные вопросы