2013-10-28 100 views
1

我在頁面的源代碼,這段代碼:JavaScript腳本不工作document.getElementsByClassName

<a data-toggle="dropdown" class="user" href="#">Tom</a> 

我試着用這個代碼解析字符串「湯姆」:

var username = document.getElementsByClassName("user").innerHTML; 
alert(username); 

但用戶名變量未定義,代碼有什麼問題? 我不想使用jQuery。

+0

+1,我會再次聯繫,因爲不希望將jQ用於這樣的事情......這表明你願意把努力學習自己使用JS和(笨拙的)DOM API,而不是依賴經常被濫用的工具 –

回答

1

document.getElementById不同,document.getElementsByClassName方法返回具有指定類的元素數組。在這種情況下,您可能需要選擇其中的第一個。

var username = document.getElementsByClassName("user")[0].innerHTML; 
alert(username); 

您錯過了[0]

1

您剛剛錯過了[0]以獲取第一個元素。

var username = document.getElementsByClassName("user")[0].innerHTML; 
4

看那DOM方法的名稱:getElement * S * ByClassName。這是一個複數,所以可能並且很可能會返回多於一個的元素。
這些元素將存儲在一個數組中,如對象(NodeList的實例)。

var usernames = document.getElementsByClassName('user'); 
var first = usernames[0]; 

但實際上,getElementsByClassName不能很好的支持,這將是最好使用querySelectorAll(比較the querySelector support支持與的the getElementsByClassName,尤其是IE)

var usernames = document.querySelectorAll('.user'); 
var first = usernames[0]; 

此外,利用這些選擇,您可以繞過必須查詢整個DOM:

var username = document.querySelector('.user');//gets just one 

注意:
0在the NodeList class on MDN here
詳情請注意,火狐的一些版本將返回不叫NodeList對象,但Mozilla的自己的DOM API的超集,它擴展了NodeList構造。我不記得那個對象叫做ATM,但是一旦我記得