2011-07-17 14 views
2

私はGoogleとstackoverflowの両方でかなりの部分を検索しましたが、質問をする方法に関する知識が不足しています(または正しい質問をしているとしても)関連情報を見つける。getAttributeで初心者のJavascriptエラー

私は自分で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」の要素のリンクからtitle属性を取得したいと考えています。

私は、デバッガを見たびに、それはObject #<NodeList> has no method 'getAttribute'

は私が間違っているつもりです見当がつかないことを私に伝えます。

navLinksのnodetypeとnodevalueは未定義に戻ってきますが、これは問題の一部である可能性がありますが、私は正直に分かりません。

+0

標準のHTML属性に* getAttribute *を使用しないでください。関連する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()メソッドがありません。 ONEオブジェクトで呼び出す必要があります。

あなたが行うと:

navLinks[0].getAttribute('title') 

は、それが動作するはずです - あなたは、最初に一致した要素のタイトルを取得します。

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

getElementsByTagName同じタグ名を持つ1ページに複数の要素が存在することができるので、複数の要素(したがってElements)を返します。 NodeListgetElementsByTagNameによって返されるノードの集合)にはgetAttributeメソッドがありません。

実際に必要な要素のプロパティにアクセスする必要があります。私の推測では、これが最初に見つかる要素です。

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