我们正在开发一个基于 javascript 的 GIS 应用程序,一切都很顺利,直到有人决定启动 IE9 并在那里试一试。正如您可能已经猜到的那样,该应用程序崩溃了。
原来,由于某些莫名其妙的原因for..in
循环无法迭代childNodes
:
var xmldoc = new ActiveXObject("Msxml2.DOMDocument.6.0");
xmldoc.loadXML("<i18n><item>one</item><item>two</item></i18n>");
var currentItem = xmldoc.getElementsByTagName("i18n")[0].firstChild;
while (currentItem) {
if (currentItem.nodeType == 1) {
for (var i in currentItem.childNodes) {
console.log(currentItem.childNodes[i]);
}
}
currentItem = currentItem.nextSibling;
}
但是,当上面代码中的内部for
循环被替换为
for (var j = 0; j < currentItem.childNodes.length; j++) {
console.log(currentItem.childNodes[j]);
}
一切都按预期工作-它遍历子节点没有任何问题。
尽管我发现了一种解决方法,但这个问题仍然让我很恼火,因为尚不清楚它为什么会发生。XMLDocument和for..in的 MSDN 文档均未提及任何内容。
这是一个错误还是另一个 IE 著名的记录不充分的奇怪案例?