javascript代码在这里:
function hidepre() {
var pre = this.getElementsByTagName("pre")[0]
if (pre.style.display === "none") {
pre.style.display = "block";
} else {
pre.style.display = "none";
}
}
function hidepreall() {
var prewraps = document.getElementsByClassName("prewrap");
if(prewraps.length > 0) {
for (var i = 0; i < prewraps.length; i++) {
var prewrap = prewraps[i];
prewrap.onclick = hidepre;
}
}
}
window.onload = hidepreall;
这在我的firefox中运行正常,但如果我使用for(var i in obj)形式,就像这样
for (var prewrap in prewraps) {
prewrap.onclick = hidepre;
}
它停止工作。
http://jsfiddle.net/5DmuE/1/ http://jsfiddle.net/5DmuE/2/
这两个小提琴在两种情况下都不起作用。
答案 0 :(得分:2)
for-in
循环不是用于循环数组中的条目或类似数组的东西(从getElementsByClassName
返回的是一个类似于数组的对象,称为NodeList
)。它用于循环访问对象属性的可枚举名称。在主机提供的对象(如for-in
)上使用NodeList
并不能保证正常工作。
使用一个简单的简单for
循环,或将NodeList
转换为数组并在其上使用forEach
(您可以在剩下的几个浏览器上填充forEach
没有它。这是一个例子:
Array.prototype.slice.call(prewraps, 0).forEach(function(element) {
// ...use the element here
});
(slice
是一种从任何类似数组的对象创建数组的便捷方法。)
有关循环数组in this answer的更多信息。
我的博客上有关for-in
的更多信息:Myths and realities of for-in