0

これら 2 つの例はどちらもノード リストですが、最初の例だけが機能します。

期待どおりに動作します:

var apple = document.getElementById('apple');
var nodeList = document.getElementsByTagName('li'); // Line of concern

var array = [];

for(var i = 0; i < nodeList.length; i++) {
  array[i] = nodeList[i];
}

for(var i = 0; i < array.length; i++) {
  array[i].style.display = 'none';
}

動作しません (エラー: "Uncaught TypeError: プロパティ 'display' を未定義に設定できません"):

var apple = document.getElementById('apple');
var nodeList = apple.parentNode.childNodes; // Line of concern

var array = [];

for(var i = 0; i < nodeList.length; i++) {
  array[i] = nodeList[i];
}

for(var i = 0; i < array.length; i++) {
  array[i].style.display = 'none';
}

したがって、両方の変数「nodeList」が実際のノード リストである場合、後者の例でプロパティを設定できないのはなぜですか。

また、後者の問題をどのように解決できますか?

この質問には jQuery を使用しないでください。

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

4

1 に答える 1

0

2 つの異なるタイプの NodeListはありません。

apple.parentNode.childNodes

NodeList を返しますが、HTML の要素間の改行文字とスペース文字を含むすべてのノードが含まれています。必要なプロパティを適用できなかったのは、一部のノードが非要素だったためです。

その場合の答えは、要素のみの選択方法を使用することです。この場合: parentElement & children :

apple.parentElement.children

ノードに関するMozilla の開発者ページと、その他のノード メソッドについては左側の列を参照してください。

于 2014-01-11T01:16:52.343 に答える