【问题标题】:How do I change the select id's name after adding table rows?添加表行后如何更改选择 ID 的名称?
【发布时间】:2016-05-31 07:49:57
【问题描述】:

在表中我有两个选择,都从数据库中获取值。 当按下添加按钮添加新行时,我想将选择 ID 的名称更改为 facility2, currency2 facility3, currency3 等等。但我不知道如何更改它们。

这是我创建的表:

<table id="tableInformation">
  <tr>
    <td><label>No</label></td>
    <td><label>Facility</label></td>
    <td><label>Currency</label></td>
    <td></td>
  </tr>
  <tbody>
  <tr>
    <td><label>1</label></td>
    <td><div id="facility">
        <select id="facility1" name="facility">
          <option value=""></option>
          <option value="AL">AL</option>
          <option value="BL">BL</option>
          <option value="CL">CL</option>
        </select>
     </td>
     <td><div id="currency">
        <select id="currency1" name="currency">
          <option value=""></option>
          <option value="idr">IDR</option>
          <option value="usd">USD</option>
          <option value="aud">AUD</option>
          <option value="jpy">JPY</option>
        </select>
     </td>
     <td><input type="button" id="btnAddRows" value=" + "
          onclick=\'addRows()\' />
  </tr>
  </tbody>
 </table>

这是javascript:

function addRows() {
    var table = document.getElementById('tableInformation');
    var rowCount = table.rows.length;
    var iteration = rowCount -1;
    var numbers = iteration +1;
    var row = table.insertRow(rowCount);
    var colCount = table.rows[0].cells.length;

    // Cell for number
    var cell = row.insertCell(0);
    var label = document.createElement('label');
    label.textContent = numbers;
    cell.appendChild(label);

    for(var i=1; i<colCount; i++) {

        var newcell = row.insertCell(i);
        newcell.innerHTML = table.rows[1].cells[i].innerHTML;
        //alert(table.rows[1].cells[i].innerHTML);
        //alert(newcell.childNodes);

    }

}

提前致谢。

【问题讨论】:

    标签: javascript html insert cells


    【解决方案1】:

    有很多方法可以做到这一点。这是对您已有的内容的一个小补充。

    添加:

    .replace(/id="(.+)1"/, 'id="$1' + rowCount + '"')
    

    ...到:

    table.rows[1].cells[i].innerHTML
    

    解释:您将 HTML 从第一行的每个单元格复制到新行中。单元格对象上的innerHTML 属性是一个字符串。因此,使用字符串replace 函数来修改该字符串,然后再将其应用于新单元格。

    此处应用的replace 函数使用变量rowCountid 属性值中的数字1 替换为新行号。

    replace 函数模式(第一个参数) 查找正则表达式模式:/id="(.+)1"/,

    • id="开头的字符串,
    • 然后捕获一个或多个任意类型的字符(.+)
    • 数字 1 后跟引用 1"

    ...例如id="currency1"

    替换(第二个参数)中的$1 提供了在第一组括号中捕获的文本的值,在本例中为:(.+)

    (此处未使用,但$2 将捕获第二组,$3 将捕获第三组,依此类推。如果括号是嵌套的,则外括号会在内括号之前捕获。)

    这是生成的for 块:

    for(var i=1; i<colCount; i++) {
      var newcell = row.insertCell(i);
      newcell.innerHTML = table.rows[1].cells[i].innerHTML.replace(/id="(.+)1"/, 'id="$1' + rowCount + '"');
    }
    

    JSFiddle example.

    【讨论】:

    • 哦,谢谢。我从没想过使用替换会这样工作。而且我知道我必须小心使用replace,因为如果我使用#1 而不是id,它会改变值。还有一个问题,它是否适用于使用替换删除行?
    • 您想知道如何删除一行吗?如果是这样,请阅读:Add/delete row from a table。如果我误解了,请详细说明,如果不是同一个主题,可能会提出一个新问题。
    • 在我在这里找到我的案例的答案之前,我已经完成了删除操作。删除功能正在工作,只是无法更改数字,例如:当您添加了三次行,然后您删除了第二行,最后一行 ID 的名称将是 #2 而不是 #3。我尝试了使用替换的技巧,但它没有改变。是的,我最好问一个新问题。谢谢。
    猜你喜欢
    • 2020-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-20
    • 2016-10-02
    • 2015-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多