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