0

这两个示例都是节点列表,但只有第一个有效。

按预期工作:

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: Cannot set property 'display' of undefined”):

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

没有两种不同类型的 NodeList。

apple.parentNode.childNodes

返回一个 NodeList,但它包含所有节点——包括 HTML 上元素之间的换行符和空格符。所以我不能应用我想要的属性的原因是因为一些节点是非元素的。

取而代之的答案是使用仅元素选择方法;在这种情况下:parentElement & children

apple.parentElement.children

有关节点的更多信息,请参阅Mozilla 的开发人员页面,以及左侧列中的更多节点方法。

于 2014-01-11T01:16:52.343 回答