1

このマークアップを考えると:

<ul id="navtabs">
  <li><a onClick="someFunction();" href="#">Link</a></li>
  <li><a onClick="someFunction();" href="#">Link</a></li>
</ul>

そしてこの機能:

function someFunction(){
  navList=document.getElementById('navtabs').childNodes;
  for(i=0;i<navList.length;i++){
    navList[i].childNodes[0].className='fgf';
  }
}

私の期待は、各アンカーのクラスが変更されることですが、関数を実行すると次のようになります。

Error: navList[i].childNodes[0] is undefined

私が使用する場合:

navList[i].className='fgf';

上記のコードの代わりに、リスト項目のクラス名が期待どおりに変更されます。

上記の関数に見られるように、ループを介して childNode の childNode にアクセスするにはどうすればよいですか?

ありがとうございました。

4

2 に答える 2

2

childNodesテキストノードとdom要素を提供する可能性が高いため、そのエラーが発生します。あなたのループでnavList[i]は、時にはそれ自身の子を持たないテキストノードnavList[i].childNodes[0]です。undefined

使用する代わりに、次のchildNodesことができます

navList=document.getElementById('navtabs').children;

子要素を取得するだけです。しかし、私はさらに具体的にすることをお勧めしますgetElementsByTagName

function someFunction() {
    navList = document.getElementById('navtabs').getElementsByTagName("li");
    for(i = 0; i < navList.length; i++){
        navList[i].getElementsByTagName("a")[0].className='fgf';
    }
}
于 2012-02-24T18:35:45.717 に答える
1

<a>要素の子を探しています-

function someFunction(){
  var navList=document.getElementById('navtabs').getElementsByTagName('a');
  for(i=0;i<navList.length;i++){
    navList[i]className='fgf';
  }
}
于 2012-02-24T18:39:20.037 に答える