为什么这些循环不同?

时间:2014-10-30 13:13:26

标签: javascript

我正在我的网站上工作,当我遇到一些奇怪的东西时,我通过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++),因为我之前使用过其他类型的循环。

3 个答案:

答案 0 :(得分:8)

document.getElementsByName(key+id)返回一个数组。语法for(var x in y)迭代对象/数组中的名称。对象中的名称是键,数组中的名称是索引。

因此,你最后一个循环中的e将是0,1,2,3,长度,....

答案 1 :(得分:0)

在第一个例子中,你犯了两个错误。

  1. 不要为for .. in运行arrays。因为您不会迭代索引而是遍历属性。
  2. 在您的情况下,e不是元素而是索引。不知道为什么它不起作用

答案 2 :(得分:0)

在您第一次尝试时,var edocument.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] : "";
        }