未捕获的IndexSizeError:无法执行' insertCell' on' HTMLTableRowElement':提供的值(1)超出范围[-1,0]

时间:2014-09-27 09:42:16

标签: javascript html

为什么图片不会出现在我的页面上?未捕获的IndexSizeError:无法执行' insertCell' on' HTMLTableRowElement&#39 ;:提供的值(1)超出范围[-1,0] - 此错误调用此字符串。

[JS]var cell = row.insertCell(i);[/JS]




function createPreview() {
var f = document.createElement("table");
var row = f.insertRow();
var cell = row.insertCell(i);

for(var j = 0; j < count ; j++) {
var img = new Image();
img.src = "image/" + j + ".jpg";
img.id = "i" + j;
cell.appendChild(img);
}

document.body.appendChild(f);

}
</script>[/JS]

2 个答案:

答案 0 :(得分:3)

这是旧的,但是对于到达这里且遇到同样问题的任何人来说,你必须连续放置的第一个单元格是单元格0,然后,你可以将单元格1放在一起,例如: 你不能把单元格0,然后是单元格2,因为你需要一个单元格1。

这样做的方法是插入单元格0,1,2,3 ...

答案 1 :(得分:1)

只是为了补充Gaunts的答案,因为这个也出现了。

我正在创建一个新的tbody,在这个tbody中我通过遍历数组动态创建新行。

最初,我使用典型的for循环进行了代码循环,效果很好。

var tableBody = tableBody || document.createElement('tbody')

for (var i = 0, rowCtr = rowOrder.length; i < rowCtr; i++) {
    var newRow = tableBody.insertRow(i);
}

然后我继续并重构使用反向循环来减少声明的冗长和性能优势,而且无需额外的可读性和未来维护成本。

var tableBody = tableBody || document.createElement('tbody')

for (var i = rowOrder.length; i--;) {
    var newRow = tableBody.insertRow(i);
}

两个for循环都具有相同的预期结果,而反向循环更具可读性。因此,如果rowOrder是一个包含4个元素的数组,则使用reverse for循环将产生以下结果:

start loop
i = 3
i = 2
i = 1
i = 0
end loop

在此循环中,第一次运行将尝试var newRow = tableBody.insertRow(3),因此您将获得索引错误,因为之前未创建位置0,1,2的行。

我在谷歌Chrome 46.0.2490.80米上发生这种情况 - 不知道为什么他们想在tbody中创建稀疏行数组时抛出异常,他们可以重构他们的代码以允许稀疏数组然后更新DOM,只需重新排序索引键。即使这是不必要的,只需将行推出即可。