用javascript克隆节点后替换所有标记的ID

用javascript克隆节点后替换所有标记的ID,javascript,html,jquery,Javascript,Html,Jquery,我需要在通过javascript或jquery克隆下面的节点后更改所有ID <table id="1"> <tr> <td id="RM_1"><button type="button" onclick="duplicateFunction(1)"></td> <td id="CL_1"><input id=&

我需要在通过javascript或jquery克隆下面的节点后更改所有ID

<table id="1">
 <tr>
  <td id="RM_1"><button type="button" onclick="duplicateFunction(1)"></td>
  <td id="CL_1"><input id="[1][999]"/></td>
 </tr>
</table>
因为当用户单击时,每个标签都有其他功能。 这是这次最好的方式


提前谢谢你

这是罗里·麦克罗森建议的尝试。我使用了缩短的类名,而不是表中元素的单个ID。这些表没有实际id,但具有
id
属性的
dataset
属性。这样,如果ID变为双ID,则不会造成严重问题

我的函数根据
#addingspace
div中已有的表的数量计算
newid
。这也不适合生产,但问题可能比原始方法小

const$trg=$(“#添加空间”);
$(文档).on('单击','.RM按钮',函数()){
让newid=$trg.find('table')。长度+2;
$trg.append(
$(this).clone('table').clone().data('id',newid)//设置数据id
.find('.CL span').text(newid).end()//设置span并返回克隆的元素
)
})

复制品
身份证号码:1

您真的需要ID吗?请向我们展示您的尝试。更糟糕的情况是,您应该已经开始更改表id,然后查找嵌套id并尝试一次替换一个。在弄清楚这仅仅是一个效率问题之后,逻辑是否合理,是否可以做得更好。这个例子就是为什么在要复制的内容上添加
id
属性不是一个好主意的主要原因。使用公共类将克隆结构中的元素相互关联。出于同样的原因,我还建议您使用不引人注目的委托事件处理程序,而不是内联事件处理程序
<table id="2">
 <tr>
  <td id="RM_2"><button type="button" onclick="duplicateFunction(2)"></td>
  <td id="CL_2"><input id="[2][999]"/></td>
 </tr>
</table>
  function duplicateFunction(table_id){
    var myTable = document.getElementById(table_id);
    myClone = myTable.cloneNode(true);
    var newTableID = Date.now();
    myClone.id = newTableID;
    document.getElementById("AddingSpace").appendChild(myClone);
  }