jQuery更改所有子节点的id属性

我需要一些帮助来弄清楚如何编写一些jQuery代码。

我需要动态克隆一个表onclick。 但后来我需要每次更改表及其子元素的ID。 因为桌子可以有很多孩子,所以很难手动完成。 我需要一种方法来改变所有子(所有后代)元素的id。 我将永远只是将计数器添加到id。 (我知道孩子们只能访问直接的孩子,但我只是想尝试一下,如果有效的话)。 如果你们知道如何在jQuery或Javascript中完成,请告诉我。

hi
$("button").click(function () { var table = $("#table").clone(true,true) table.attr( 'id', function() { return this.id +"1"; }) alert($("#table1").children()) $("#table1").find(*).attr('id', function() { return this.id +"1"; }) table.appendTo("#table") alert(document.getElementById("tr1")) alert(document.getElementById("span1").value) });

如果elem是克隆结构的父级,而cntr是你说你维护的计数器,你可以修复克隆结构中的所有id,如下所示:

 function fixIds(elem, cntr) { $(elem).find("[id]").add(elem).each(function() { this.id = this.id + cntr; }) } 

如果id最后可能已经克隆了数字并且您想要替换该数字,则可以这样执行:

 function fixIds(elem, cntr) { $(elem).find("[id]").add(elem).each(function() { this.id = this.id.replace(/\d+$/, "") + cntr; }) } 

因此,根据您现在添加到问题中的代码,您可以执行以下操作:

  

工作示例: http : //jsfiddle.net/jfriend00/wFu9K/

注意:我还将DOM插入代码更改为insertAfter() ,因为您无法按照自己的方式将一个表附加到另一个表(表将在现有表之后或在上一个表中的单元格内)。


如果您只是想添加一行,那么您需要克隆该行,而不是整个表。

您可以使用以下代码将克隆的行添加到现有表:

 function fixIds(elem, cntr) { $(elem).find("[id]").add(elem).each(function() { this.id = this.id.replace(/\d+$/, "") + cntr; }) } var cloneCntr = 1; $("button").click(function () { var row = $("#table tr").first().clone(true,true); fixIds(row, cloneCntr++); row.appendTo("#table") }); ​ 
 $("#table1").find(*) 

应该

 table.find("*") 

$("#table1")不会返回该行代码上的任何内容,因为您还没有将表添加到DOM中。 *是一个选择器,应该是一个字符串。

你可以做

 $Element.children().each(function () { this.id = new_id; });