2014-06-19 42 views
2

如果我有一個div,其中有多個類分配給class屬性,是否可以使用jQuery中的each()函數遍歷它們?遍歷同一元素上的類

<div class="class1 differentclassname anotherclassname"><div> 
+3

像'$的DOMTokenList轉換成Array ('div')。prop('className')。split('').forEach(fn)'? – undefined

+0

@undefined我更新了我的問題,因爲我忘記說我不知道​​將使用的類名稱,因爲他們被放在dynmacially –

+0

@CurtisCrewe - 這應該不會影響什麼undefined說(你分割className屬性,然後通過列表進行forEaching。應該可以正常工作(即使您之前不知道類名稱) – Jack

回答

8

在JavaScript中,得到的類列表,你可以使用

  • .className.split(' '),返回Array
  • (HTML5).classList,返回DOMTokenList

在jQuery中,你可以使用.prop()可獲得classNameclassList屬性。

要迭代它們,你可以使用:

  • 一個for循環,例如for(var i=0; i<classes.length; ++i)
  • (ES6)A for...of loop,例如, for(var cl of classes)
  • (ES5)forEach,僅適用於陣列,例如, classes.forEach(fn)
  • (jQuery)$.each,例如, $.each(classes, fn)

如果使用classList但想用forEach迭代,你可以使用

  • [].slice.call(classes)
  • (ES6)Array.from(classes)
+0

這樣有幫助的詳細瞭解!謝謝 –

+0

請記住,JavaScript中的forEach是IE9 +,我總是被捕獲使用它,並且我很難理解爲什麼我的代碼在舊版瀏覽器中被破壞。 +1的詳細答案:) – Prusprus

+0

那麼哪個prop()是正確的? '.prop('class')'或'.prop('className')'或'.prop('classList')' –

2

首先,你需要獲得一個包含有類的字符串:

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

,並用空格分開它來獲取一個數組:

$('div).attr('class').split(' '); 

,然後使用數組作爲$ .each函數的第一個參數,其中索引和值可以幫助您獨立處理它

$.each($('div').attr('class').split(' '), function(index, value) { 
    console.log('Class name ' + value); 
}); 
+0

更好:' $( 'DIV).attr(' 類)。split('\ s +');'如果class屬性有多個連續空格或其他空格字符。 –