我正在我的网站上工作,当我遇到一些奇怪的东西时,我通过ajax从数据库中获取数据,然后我使用一些循环来更新表中的数据。这是我第一次尝试循环
for(var id in data){
for(var key in data[id])
for(var e in document.getElementsByName(key+id))
e.innerHTML = data[id][key] !== null ? data[id][key] : "";
我希望这可以毫无问题地工作,但事实并非如此。表中的所有字段都没有更新,我不知道为什么。然后我决定用更传统的东西进行测试,结果就是这个。
for(var id in data){
for(var key in data[id]){
var temp = document.getElementsByName(key+id);
for(var i=0; i<temp.length; i++)
temp[i].innerHTML = data[id][key] !== null ? data[id][key] : "";
}
这是完美的,但我不明白为什么,因为从我所看到的,循环应该做同样的事情。所以我想知道,为什么它们不同,我该如何解决它。我喜欢我的代码中的一致性,并且不想使用for(var i=0; i<temp.length; i++)
,因为我之前使用过其他类型的循环。
答案 0 :(得分:8)
document.getElementsByName(key+id)
返回一个数组。语法for(var x in y)
迭代对象/数组中的名称。对象中的名称是键,数组中的名称是索引。
因此,你最后一个循环中的e
将是0,1,2,3,长度,....
答案 1 :(得分:0)
在第一个例子中,你犯了两个错误。
for .. in
运行arrays
。因为您不会迭代索引而是遍历属性。e
不是元素而是索引。不知道为什么它不起作用答案 2 :(得分:0)
在您第一次尝试时,var e
是document.getElementsByName(key+id)
尝试
for(var id in data){
for(var key in data[id]){
var elements = document.getElementsByName(key+id);
for(var e in elements)
var elem = elements[e];
elem.innerHTML = data[id][key] !== null ? data[id][key] : "";
}