-1

我正在尝试向表中添加新行,如下所示:

    <table class="table table-striped">
        <tbody id="dconTable">
            <th><input type="text" class="span12" id="lbld"></th>
            <th><input type="text" class="span12" id="edizmd"></th>
            <th><input type="text" class="span12" id="idd"></th>
            <th><input type="text" class="span12" id="ad"></th>
            <th><input type="text" class="span12" id="bd"></th>
            <th><input type="text" class="span12" id="en_spard"></th>
            <th><input type="text" class="span12" id="spard"></th>
            <th><input type="text" class="span12" id="en_periodd"></th>
            <th><input type="text" class="span12" id="periodd"></th>
        </tbody> 
    </table>

我使用在互联网上找到的脚本。而且我希望他也在新单元格中写 id(如 id="lbld_1" 等)。这是代码。

function addRow(tableID) {
    var table = document.getElementById(tableID);
    var rowCount = table.rows.length;
    var row = table.insertRow(rowCount);
    var colCount = table.rows[0].cells.length;
    for(var i=0; i<colCount; i++) {
        colName = table.rows[0].cells[i].parentNode.children[1].getAttribute('id') +"_"+ i;
        var newcell = row.insertCell(i);
        newcell.innerHTML = table.rows[0].cells[i].innerHTML;
        newcell.childNodes[0].value = "";
        newcell.parentNode.children[1].setAttribute('id',colName);
        colName = "";
    }
};

控制台说:

Uncaught TypeError: Cannot call method 'setAttribute' of undefined

请告诉我我的错误。谢谢。

4

1 回答 1

2

您的代码对我没有任何意义:

table.rows[0].cells[i].parentNode.children[1];
//===
table.rows[0].cells[1];

单元格是行的子级,因此获取一行的 parentNode,它将返回一行,获取其中一个子级,然后您就回到了单元格的级别(如果幸运的话!-某些浏览器将包括空格或节点列表中的注释)。
此外,如果您需要一个 id,就anElem.id可以了,getAttribute()有点多。

所以这就是你想要做的:

colName = table.rows[0].cells[i].id;
newcell.id = colName;

但这会创建具有相同 ID 的多个元素,这是不可能的。在现实生活中,如果其他人有我的 ID,我会遇到问题。同样的逻辑也适用于 DOM 中的 ID:它们是独一无二的!所以试试:

colName = table.rows[0].cells[i].id.split('_')[0];
newcell.id = colName+'_'+i;

最后,你似乎没有附加你的元素,所以 add table.rows[0].appendChild(newCell);,太

于 2012-08-13T12:55:05.643 回答