2012-04-17 12 views
0

共通のaddRow関数を再利用しましたが、基本的なjsスキルはコードを大幅に変更することを制限します。JavaScriptテーブルに別の行を追加する-addRow関数

このエレガントな機能は動作しますが、新しい行のすべての要素を前の行とは異なる名前にしたいと考えています。 フレンドは、 の使用を提案しました。var new_name = old_name.replace(rowCount、rowCount + 1);カウンタを使用して、

そう例の以下の要素「USERNAME_2」および「EMAIL_2」

感謝を持って新しく作成された行を持っています!

<INPUT TYPE="text" NAME="username_1"> : name <BR> 
<INPUT TYPE="text" NAME="email_1"> : email <BR> 




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; 
     } 
    } 
} 

答えて

1

新しく作成された行に「username_2」と「email_2」の要素を追加するには、既存の機能を以下のコードに置き換える必要があります。

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); 
     //alert(newcell.childNodes); 
     newcell.innerHTML = table.rows[0].cells[i].innerHTML; 
     if(newcell.childNodes[0]!=null && newcell.childNodes[0].name != null) 
     { 
      var oldName =newcell.childNodes[0].name; 
      var newName = getNewName(oldName,rowCount+1); 
      newcell.innerHTML = replaceAll(newcell.innerHTML,oldName, newName); 
     } 

     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; 
     } 
    } 
} 

function replaceAll(inputString, regExpr, newString) 
{ 
    var outputStr = ""; 
    var pivot; 
    while(inputString.indexOf(regExpr) != - 1) 
    { 
     inputString = inputString.replace(regExpr,newString); 
     pivot = inputString.indexOf(newString) + newString.length; 
     outputStr = outputStr + inputString.substring(0, pivot) ; 
     inputString = inputString.substring(pivot,inputString.length); 
    } 
    outputStr = outputStr + inputString; 
    return outputStr; 
} 

function getNewName(oldName,rowIndex) 
{ 
     var arr = oldName.split('_'); 
     arr[arr.length - 1] = rowIndex; 
     var str = ""; 
     for (arrIndex = 0; arrIndex < arr.length; arrIndex++) 
     { 
      str += arr[arrIndex]; 
      if (arrIndex != arr.length - 1) 
      { 
       str += "_"; 
      } 
     } 
     return str; 
} 
+0

@ Suhas Khot、Thanks!完璧に働いた! – Hightower

関連する問題