2014-10-06 38 views
1

我只想使用JavaScript,而不是jQuery。將類更改應用於所有getElementsByTagName - Pure JavaScript

我有兩個問題,首先,我想正確應用/一UL

理想的情況下,當一個元素有一類集,剩下的做內刪除類屬性每個元素沒有類屬性集(刪除如果設置) - 但是從我的測試,當我需要從元素中刪除/刪除類我只能設置類如class =「」,它的工作原理,但不是理想。

我已經能夠超過似乎給了我很多過度的垃圾得到UL的刮子元素的ID與的getElementsByTagName

<ul id="u"> 
    <li id='car' class="t">1</li> 
    <li id='blue'>2</li> 
    <li id='eight'>3</li> 
    <li id='nasa'>4</li> 
</ul> 

var u = document.getElementById('u'); 
var li = u.getElementsByTagName('li'); 

我的第二個問題是循環。

for (var i in li) { 
    alert(li[i]["id"]); 
} 
//returns 
car 
blue 
eight 
nasa 
undefined 
undefined 
undefined 

這樣做的最好方法是什麼?

回答

4

因爲這是你如何遍歷一個對象,而不是一個數組。

for循環的標準將只返回你所期望的結果:

for (var i = 0; i < li.length; i++) { 
    alert(li[i]["id"]); 
} 

從他們刪除所有類,用這個循環中:

li[i].className = ""; 

只刪除特定類別:

li[i].classList.remove("classNameHere"); 

如果你想刪除整個元素屬性(不只是重置等級),使用:

li[i].removeAttribute("class"); 

見行動這裏所有的三個例子:http://jsfiddle.net/vr9mm2vk/1/

+0

'getElementsByTagName'不返回數組,它返回一個NodeList。 – Quentin 2014-10-06 12:08:40

+1

@Quentin是的,它的確如此。好吧,一個節點列表,其行爲完全像一個數組。 – Shomz 2014-10-06 12:10:04

+0

@Shomz謝謝,這是有效的,但你會如何建議我刪除所有類的屬性,是將類設置爲空的唯一方法? – gummage 2014-10-06 12:11:51

1

使用標準for循環(而不是for in循環),所以你只能打數字屬性。

for (var i = 0; i < li.length; i++) 

當前您正在查看所有屬性,例如,li['length']

+0

謝謝,這是有效的,但你會如何建議我刪除所有的類屬性,是將類設置爲空的唯一方法? – gummage 2014-10-06 12:12:20

+0

@gummage - 這是最簡單的方法。 – Quentin 2014-10-06 12:12:32