0

少し前に、テーブルに行を動的に追加できる次の JavaScript 関数を見つけました。

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++) {

            var newcell = row.insertCell(i);

            newcell.innerHTML = table.rows[0].cells[i].innerHTML;
            //alert(newcell.childNodes);
            switch(newcell.childNodes[0].type) {
                case "text":
                        newcell.childNodes[0].value = "";
                        break;
                case "checkbox":
                        newcell.childNodes[0].checked = false;
                        break;
                case "select-one":
                        newcell.childNodes[0].selectedIndex = 0;
                        break;
            }
        }
    }

<th>タグをスキップする修正を実際に書くことができるJavaScriptの経験がある人はいますか(私はほとんど経験がありません) 。

影響を受けたくないテーブルの部分は次のとおりです。

<table id="scheduler">
  <tr>
    <th scope="col">Engineer</th>
    <th scope="col">Monday</th>
    <th scope="col">Tuesday</th>
    <th scope="col">Wednesday</th>
    <th scope="col">Thursday</th>
    <th scope="col">Friday</th>
    <th scope="col">Saturday</th>
    <th scope="col">Sunday</th>
  </tr>

私の問題は、<th>タグが含まれていると、ヘッダー行が、タグが含まれている行ではなく、「複製」された行になってしまう<td>ことです。

4

2 に答える 2

1

関数を変更するだけで、複製する行を指定できます(ゼロベースのインデックスが指定された場合)。

addRow( "scheduler", 1 ); // to base it on the 2nd row
  // give row number------v
function addRow(tableID, num) {
    var table = document.getElementById(tableID);

    var rowCount = table.rows.length;
    var row = table.insertRow(rowCount);

   // -------------------------v
   var colCount = table.rows[ num ].cells.length;
   for(var i=0; i<colCount; i++) {

        var newcell = row.insertCell(i);

        //-------------------------------v
        newcell.innerHTML = table.rows[ num ].cells[i].innerHTML;
        switch(newcell.childNodes[0].type) {
            case "text":
                    newcell.childNodes[0].value = "";
                    break;
            case "checkbox":
                    newcell.childNodes[0].checked = false;
                    break;
            case "select-one":
                    newcell.childNodes[0].selectedIndex = 0;
                    break;
        }
    }
}
于 2011-02-22T21:59:35.123 に答える
0

これを試して:

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++)
{
    var newcell = row.insertCell(i);  

    if(table.rows[0].cells[i].tagName != "th")
    {
        newcell.innerHTML = table.rows[0].cells[i].innerHTML;             //alert(newcell.childNodes); 

        switch(newcell.childNodes[0].type)
        {                 
            case "text":                         
                newcell.childNodes[0].value = "";                         
                break;                 
            case "checkbox":                         
                newcell.childNodes[0].checked = false;                         
                break;                 
            case "select-one":                         
                newcell.childNodes[0].selectedIndex = 0;                         
                break;             
        }  
    }
    else if(table.rows.length > 1 && table.rows[1].cells[i].tagName != "th")
    {
        newcell.innerHTML = table.rows[1].cells[i].innerHTML; 

        switch(newcell.childNodes[0].type)
        {                 
            case "text":                         
                newcell.childNodes[0].value = "";                         
                break;                 
            case "checkbox":                         
                newcell.childNodes[0].checked = false;                         
                break;                 
            case "select-one":                         
                newcell.childNodes[0].selectedIndex = 0;                         
                break;             
        }  
    }
}}
于 2011-02-22T22:07:18.007 に答える