如果它不喜欢你可能超出getElementsByClassName
回报的范围,我不会感到惊讶(但话又说回来,我还没有测试/检查会发生什么)。尝试先存储结果,然后循环它们。
var p12s = document.getElementsByClassName('p12');
for (var i = 0; i < p12s.length; i++) {
p12s[i].style.display = "none";
}
var p34s = document.getElementsByClassName('p34');
for (var i = 0; i < p34s.length; i++) {
p34s[i].style.display = "none";
}
100
这样,它循环遍历每个getElementsByClassName
返回的确切数量的元素(您没有硬代码)。
主要问题是当你硬编码100
时,它总是从 0 循环到 99。如果getElementsByClassName
返回少于 100 个元素,尝试访问该索引将返回 undefined 并在你尝试执行类似.style.display = "none";
. 或者如果返回 160 个元素怎么办?只有前 100 个会被修改。在循环之前进行调用并将返回的元素存储在变量中,然后遍历该长度,是安全/正确的方法。就像你以前的方式一样,它getElementsByClassName
在每次循环迭代时都会调用 - 非常低效 - 你只需要做一次!......当然,硬编码100
不是循环遍历元素的最佳方式。这是一个正确的想法,只是顺序不对。我的意思是,从技术上讲,你可以这样做:
for (i=0; i<100; i++) {
var el = document.getElementsByClassName('p12')[i];
if (el) {
el.style.display = 'none';
}
}
但是就像我说的那样,调用getElementsByClassName
每个循环迭代并不是很有效。