IE 中 Table 底部的动态添加行
Dynamic row addition at the bottom of Table in IE
基于按钮单击事件,我想在现有 table 的底部动态添加行。
我使用下面给出的 Javascript 做了同样的事情。它在 Chrome 浏览器中工作正常,而在 IE 中,行被添加到顶部而不是底部。
如果我多次单击该按钮,则可以看到在 IE 中所有行都被逐行添加到顶部。
function addRow(tableID) {
var table = document.getElementById(tableID);
var tbody = table.getElementsByTagName('tbody')[0];
var rowCount = table.querySelectorAll("tbody tr").length;
var row = tbody.insertRow(-1);
var cell1 = row.insertCell(0);
cell1.classList.add("PadLeft10");
cell1.classList.add("PadBottom5");
cell1.classList.add("textcenter");
cell1.width = "2%";
var element1 = document.createElement("input");
element1.type = "checkbox";
element1.name = "element1[" + index + "].selected";
element1.id = "element1[" + index + "].selected";
cell1.appendChild(element1);
[...]
}
我在文档中看到 tbody.insertRow(-1) 应该在 IE 和 Chrome 的最后添加行,但对我来说,在 IE 中它被添加在顶部。我尝试了很多方法,但总的来说它在 Chrome 中工作正常,但在 IE 中却不行。
有什么帮助吗?
如果 insertRow
部分有问题,您可以这样做以可靠地添加到末尾:
var row = document.createElement("tr");
tbody.appendChild(row);
同理,var cell1 = row.insertCell(0);
(如果也是问题的话)可以是:
var cell1 = document.createElement("tr");
row.insertBefore(cell1, row.firstChild);
最后,MDN 说 IE 长期以来一直支持 insertAdjacentHTML
(一直支持到 IE4),因此如果您愿意,可以将整个方法替换为以下内容:
function addRow(tableID) {
var table = document.getElementById(tableID);
var tbody = table.querySelector("tbody");
var rowCount = table.querySelectorAll("tr").length; // Or: `= table.rows.length;`
// ***Where does `index` come from? Did you mean `rowCount`?
var name = "element1[" + index + "].selected";
var html =
'<tr>' +
'<td class="PadLeft10 PadBottom5 textcenter" width="2%">' +
'<input type="checkbox" name="' + name + '" id="' + name + '">' +
'</td>' +
'</tr>';
tbody.insertAdjacentHTML("beforeend", html);
// ...
}
基于按钮单击事件,我想在现有 table 的底部动态添加行。
我使用下面给出的 Javascript 做了同样的事情。它在 Chrome 浏览器中工作正常,而在 IE 中,行被添加到顶部而不是底部。
如果我多次单击该按钮,则可以看到在 IE 中所有行都被逐行添加到顶部。
function addRow(tableID) {
var table = document.getElementById(tableID);
var tbody = table.getElementsByTagName('tbody')[0];
var rowCount = table.querySelectorAll("tbody tr").length;
var row = tbody.insertRow(-1);
var cell1 = row.insertCell(0);
cell1.classList.add("PadLeft10");
cell1.classList.add("PadBottom5");
cell1.classList.add("textcenter");
cell1.width = "2%";
var element1 = document.createElement("input");
element1.type = "checkbox";
element1.name = "element1[" + index + "].selected";
element1.id = "element1[" + index + "].selected";
cell1.appendChild(element1);
[...]
}
我在文档中看到 tbody.insertRow(-1) 应该在 IE 和 Chrome 的最后添加行,但对我来说,在 IE 中它被添加在顶部。我尝试了很多方法,但总的来说它在 Chrome 中工作正常,但在 IE 中却不行。
有什么帮助吗?
如果 insertRow
部分有问题,您可以这样做以可靠地添加到末尾:
var row = document.createElement("tr");
tbody.appendChild(row);
同理,var cell1 = row.insertCell(0);
(如果也是问题的话)可以是:
var cell1 = document.createElement("tr");
row.insertBefore(cell1, row.firstChild);
最后,MDN 说 IE 长期以来一直支持 insertAdjacentHTML
(一直支持到 IE4),因此如果您愿意,可以将整个方法替换为以下内容:
function addRow(tableID) {
var table = document.getElementById(tableID);
var tbody = table.querySelector("tbody");
var rowCount = table.querySelectorAll("tr").length; // Or: `= table.rows.length;`
// ***Where does `index` come from? Did you mean `rowCount`?
var name = "element1[" + index + "].selected";
var html =
'<tr>' +
'<td class="PadLeft10 PadBottom5 textcenter" width="2%">' +
'<input type="checkbox" name="' + name + '" id="' + name + '">' +
'</td>' +
'</tr>';
tbody.insertAdjacentHTML("beforeend", html);
// ...
}