javascript - 用javascript克隆节点后替换所有标签的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 = "1" 的节点时,我需要将 1 更改为 2,如下面的所有 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>
备注:表 id 是唯一的 id。我用简单的数字来解释代码。
更新
当用户单击重复按钮时。将调用 duplicateFunction。现在,我可以更改表ID,但不能更改内部。
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);
}
因为当用户点击时,每个标签都有另一个功能要做。这是这个时候最好的办法。
先感谢您
解决方案
这是按照 Rory McCrossan 建议的路线进行的尝试。我使用了缩短的类名,而不是表中元素的各个 id。这些表没有实际的 ID,而是dataset
具有属性的id
属性。这样,如果 id 变成双倍,就不会造成严重的问题......
我的函数根据divnewid
中已有表的数量计算 a。#addingspace
这也不是生产就绪的,但可能比你原来的方法问题少。
const $trg=$('#addingspace');
$(document).on('click','.RM button',function(){
let newid=$trg.find('table').length+2;
$trg.append(
$(this).closest('table').clone().data('id',newid) // set data-id
.find('.CL span').text(newid).end() // set span and return cloned element
)
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table data-id="1">
<tr>
<td class="RM"><button type="button">duplicate</button></td>
<td class="CL"><input /> id: <span>1</span></td>
</tr>
</table>
<div id="addingspace"></div>
推荐阅读
- c# - 无法运行“已发布”ClickOnce-Application:有缺陷的清单
- javascript - 如何为具有相同名称的 div 显示相同的功能?
- html - 无法滚动到每个标题的顶部
- c - Python C 扩展
- reactjs - 更新对象的多个按钮
- python - next(iterable) 有效,但“for”循环只会创建一个无限循环
- javascript - 无法将用户反序列化出会话
- php - Laravel 资源 toArray() 无法正常工作
- cloudkit - 如何在系统设置页面更改 CloudKit displayName?
- c++ - 特化具有多个值和相同特化的非类型模板函数