为什么图片不会出现在我的页面上?未捕获的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]
答案 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,只需重新排序索引键。即使这是不必要的,只需将行推出即可。