Javascript IE不';t正确循环HtmlCollection

Javascript IE不';t正确循环HtmlCollection,javascript,internet-explorer,internet-explorer-11,htmlcollection,Javascript,Internet Explorer,Internet Explorer 11,Htmlcollection,我在一个变量上做了一个console.log,然后在IE中返回 <HtmlCollection length="8"> <input name="Date_Visit" class="Visitor wmp-calendar hasDatepicker" id="rn_Date_Visit_Visitor_23" required="" type="text"></input> <input name="Time_Arrival"

我在一个变量上做了一个console.log,然后在IE中返回

<HtmlCollection length="8">
      <input name="Date_Visit" class="Visitor wmp-calendar hasDatepicker" id="rn_Date_Visit_Visitor_23" required="" type="text"></input>
      <input name="Time_Arrival" class="Visitor" id="rn_Time_Arrival_Visitor_23" required="" type="text" maxlength="50"></input>
      <textarea name="Visitor_Names" class="Visitor" id="rn_Visitor_Names_Visitor_23" rows="5"></textarea>
      <input name="Visitor_Organisation" class="Visitor" id="rn_Visitor_Organisation_Visitor_23" required="" type="text"></input>
      <input name="Host_Name" class="Visitor" id="rn_Host_Name_Visitor_23" required="" type="text" maxlength="50"></input>
      <input name="Host_Collar" class="Visitor" id="rn_Host_Collar_Visitor_23" required="" type="text" maxlength="50"></input>
      <input name="Host_Contact" class="Visitor" id="rn_Host_Contact_Visitor_23" required="" type="text" maxlength="50"></input>
      <input name="Floor_Meeting" class="Visitor" id="rn_Floor_Meeting_Visitor_23" type="text" maxlength="50"></input>
      </HtmlCollection>
</HtmlCollection>
类似于镀铬(但有更多细节)

下面这段代码在Chrome中有效,但在IE中失败。在IE中,它只显示名称,以及第二个console.log上的一些随机信息,如“length”、“item”和“namedItem”IE11不显示所有属性名,只显示第一个属性名。

for (var k in elements) {
    console.log("validateForm 5");
    console.log(" > k: " + k);
    console.log(" > k.search(rn): " + k.search("rn_"));
    if (k.search("rn_") > -1){
        console.log("validateForm 6");
        var temp = k.split("_");
        var key = temp[1]+"_"+temp[2];
        var value = elements[k].value;
        VisitorData[x] = key+"|"+elements[k].value;//.getAttribute("value");
        x++;        
    }
}

有什么建议吗?例如,在Chrom中工作良好,它可以返回所有内容(包括HERE、WE和GO),但IE11不能

,因为in
不是用于循环遍历集合中的元素,而是用于循环遍历对象中的属性名称

要在集合中循环,请对使用简单的

for (var k = 0; k < elements.length; ++k) {
    var element = elements[k];
    // ...
}
…或其他几种循环技术中的任何一种。答案中列出了几种处理方法,不仅处理数组(问题的主题),还处理“类似数组”的结构,如DOM集合

如果您想访问元素并使用它们的
id
和/或
name
,您可以使用上面这样的循环,并在找到
id
name
时对其进行操作。因此,使用JSFIDLE的HTML,但使用
input
而不是
div
name
不是
div
s的有效属性):

var elements=document.getElementsByClassName(“访问者”);
Array.prototype.forEach.call(元素、函数(元素、索引){
console.log(“index=“+index”);
if(element.id){
console.log(“id=“+element.id”);
}
if(element.name){
console.log(“name=“+element.name”);
}
});


什么是
元素
?对不起-应该说。这是我的HTMLcollection-编辑了几个问题的答案,以解决如何正确地循环通过类似这样的数组结构。重复?我不会这么说-我的问题是IE11只访问第一个项目/属性,而不是所有项目/属性,而Chrome doesHow在Chrome中,它通过每个属性?IE似乎只是挑了第一个,然后又挑了一些随机的ones@pee2pee:因为您进入了未指定的行为,不同的引擎可以实现不同的行为。@pee2pee:答案是指导:正确循环。:-)在IE11中不起作用,但在Chrome中起作用example@pee2pee“我正在尝试循环遍历每个元素”-实现这一点的方法是这个答案中所描述的,而不是代码中所描述的方法
for (var k = 0; k < elements.length; ++k) {
    var element = elements[k];
    // ...
}
Array.prototype.forEach.call(elements, function(element) {
    // ...
});