2011-07-17 14 views
2

我已經在google和stackoverflow上搜索了很多,但缺乏關於如何提出問題的知識(或者即使我問的是正確的問題)也讓它很難找到相關信息。初學Javascript與getAttribute的錯誤

我有一個簡單的代碼塊,我正在嘗試教自己的JavaScript。

var studio = document.getElementById('studio'); 
var contact = document.getElementById('contact'); 
var nav = document.getElementById('nav'); 
var navLinks = nav.getElementsByTagName('a'); 

var title = navLinks.getAttribute('title'); 

我想從ID爲'nav'的元素中的鏈接抓取標題屬性。

每當我看着調試器,它告訴我,Object #<NodeList> has no method 'getAttribute'

我不知道我要去哪裏錯了。

navLinks的節點類型和節點值回到未定義狀態,我認爲這可能是問題的一部分,但我對此很新,所以我實在不知道。

+0

不要使用* getAttribute *標準的HTML屬性,使用相關的DOM屬性,所以'var title = navLinks [0] .title'。鍵入並移除* getAttribute *中的瀏覽器差異會更快,更少。 – RobG

回答

4

getElementsByTagName方法返回一個對象數組。所以,你通過這個陣列需要循環,以獲得各個元素和它們的屬性:

var navLinks = nav.getElementsByTagName('a'); 
for (var i = 0; i < navLinks.length; i++) { 
    var link = navLinks[i]; 
    var title = link.title; 
} 
+0

謝謝,就是這樣。非常感謝,因爲我在這裏坐了一段時間,然後我決定在這裏註冊並尋求一些答案。 – Squadrons

+0

getElementsByTagName返回一個NodeList,它是**不是**數組。請參閱http://www.sitepoint.com/a-collection-is-not-an-array/ – KooiInc

1

調用對象的nav.getElementsByTagName('a')返回列表。並且該列表沒有getAttribute()方法。您必須在一個對象上調用它。

當你這樣做:

navLinks[0].getAttribute('title') 

那麼它應該工作 - 你會得到第一個匹配元素的稱號。

1
var navLinks = nav.getElementsByTagName('a'); 

getElementsByTagName返回多個元件(因此Elements),因爲可以有一個頁面上的多個元素具有相同的標記名稱。 A NodeList(它是由getElementsByTagName返回的節點的集合)沒有getAttribute方法。

您需要訪問您實際需要的元素的屬性。我的猜測是,這將是你找到的第一個元素。

var title = navLinks[0].getAttribute('title');