-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 = "lbld_1"など)にもIDを書き込んでもらいたいと思います。これがコードです。

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を取得すると、行が返され、その子の1つが取得され、セルのレベルに戻ります(運が良ければ!-一部のブラウザーには含まれます空白、またはノードリスト内のコメント)。
その上、IDが必要な場合は、それだけでanElem.id十分getAttribute()です。

したがって、これはあなたがやろうとしていることです:

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

しかし、それは同じ ID を持つ複数の要素を作成することであり、これは不可能です。実生活では、他の誰かが私の ID を持っていたら、問題が発生します。DOM の ID にも同じロジックが適用されます。ID は一意です。だから試してください:

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

最後に、要素を追加していないようですので、 も追加してtable.rows[0].appendChild(newCell);ください

于 2012-08-13T12:55:05.643 に答える