2

私はグーグルとスタックオーバーフローの両方でかなり検索しましたが、質問をする方法についての知識が不足しているため(または正しい質問をしている場合でも)、適切な情報を見つけるのが難しくなっています。

私は自分自身に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は未定義として返されます。これは問題の一部である可能性があると思いますが、私はこれに慣れていないため、正直なところわかりません。

4

3 に答える 3

4

このgetElementsByTagNameメソッドは、オブジェクトの配列を返します。したがって、個々の要素とその属性を取得するには、この配列をループする必要があります。

var navLinks = nav.getElementsByTagName('a');
for (var i = 0; i < navLinks.length; i++) {
    var link = navLinks[i];
    var title = link.title;
}
于 2011-07-17T21:24:38.370 に答える
1

呼び出すnav.getElementsByTagName('a')と、オブジェクトのリストが返されます。そして、そのリストにはgetAttribute()メソッドがありません。1つのオブジェクトで呼び出す必要があります。

あなたがするとき:

navLinks[0].getAttribute('title')

その後、機能するはずです。最初に一致した要素のタイトルが表示されます。

于 2011-07-17T21:27:06.043 に答える
1
var navLinks = nav.getElementsByTagName('a');

getElementsByTagNameElements同じタグ名を持つ1つのページに複数の要素が存在する可能性があるため、複数の要素を返します(したがって)。A NodeList(によって返されるノードのコレクションgetElementsByTagName)にはメソッドがありませんgetAttribute

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

var title = navLinks[0].getAttribute('title');
于 2011-07-17T21:27:46.670 に答える