Jquery 重命名<;中的名称属性;输入>;在不同的桌子上

Jquery 重命名<;中的名称属性;输入>;在不同的桌子上,jquery,Jquery,请点击此处: 在我的脚本中,我将加载相同的表。这个 以下是我的例子: <table class="table"> <tr><td>First Name</td><td><input name="firstname" type="text"></td></tr> <tr><td>Last Name</td><td><input name="lastn

请点击此处:

在我的脚本中,我将加载相同的表。这个 以下是我的例子:

<table class="table">
<tr><td>First Name</td><td><input name="firstname" type="text"></td></tr>
<tr><td>Last Name</td><td><input name="lastname" type="text"></td></tr>
</table>

 <table class="table">
 <tr><td>First Name</td><td><input name="firstname" type="text"></td></tr>
 <tr><td>Last Name</td><td><input name="lastname" type="text"></td></tr>    
</table>

这是因为对于每个迭代,您使用的是一个非上下文特定的
$(':input')
选择器,因此所有输入元素将只接收最终
元素的索引。改用
$(this)
和DOM横向方法

此外,还提供了一个基于零的索引
i
,因此实际上不必在函数中重新声明它:)但是,请注意,由于它是基于零的(即从零开始,而不是从一开始),因此必须向它添加1(例如,对于第一次出现的输入元素,您将使用
firstname1
而不是
firstname0

请参见此处的fiddle:



根据,您还可以使用接受函数的
.attr()
方法。我每天都会在这里学到一些新东西;)

只需维护一个计数器变量并将其递增即可

var i = 0;
$('.table').each(function(){
   i++; // increment
   $(this).find('[name=firstname]').attr("name", function(_, n){ return n + i; });
   $(this).find('[name=lastname]').attr("name", function(_, n){ return n + i; });
});

一种解决方案是将
添加到第二个参数(第二个参数提供了搜索第一个选择器匹配的元素的上下文):


使用以下方法查找每个表中的输入元素:

您还可以使用方法作为setter,而不是
每个
循环


另外,如果您更喜欢,find(“:input”)相当于
$(“:input”,this)

对于循环:
for(var i=1;i
这是一个相当有趣的解决方案!我完全忘记了
.attr()
也接受函数;)+1是的,许多jQuery getter/setter方法允许setter成为函数,这非常方便。
 $(".table").each(function(){ 
   //Get current index of the table 
   var i = $(this).index();

    $(":input").each(function(){ 
       var oldname = $(this).attr('name'); 
       $(this).attr('name',oldname+i);
    });

});
$(".table").each(function(i){ 
    $(this).find(":input").each(function(){ 
        var oldname = $(this).attr('name'); 
        $(this).attr('name',oldname+(i+1));
    });    
});
var i = 0;
$('.table').each(function(){
   i++; // increment
   $(this).find('[name=firstname]').attr("name", function(_, n){ return n + i; });
   $(this).find('[name=lastname]').attr("name", function(_, n){ return n + i; });
});
$(".rename").click(function () {
    $(".table").each(function () {
        var i = $(this).index();
        $(":input", this).each(function () { //add this
            var oldname = $(this).attr('name');
            $(this).attr('name', oldname + i);
        });
    });
});
$(".table").each(function () {
    var i = $(this).index();
    $(this).find(":input").attr('name', function (ind, oldname) {
        return oldname + i;
    });
});