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