Javascript IE不';t正确循环HtmlCollection
我在一个变量上做了一个console.log,然后在IE中返回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"
<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) {
// ...
});