我有多个表单输入,他们在名称中使用数组。表单可以由用户复制。当表单重复时,输入字段的名称会相应更改。基本上这就是我的形式
<div class="machine-stations">
<div class="property-container">
<input name="machine[process][0][system][100][station][52][name]" />
<input name="machine[process][0][system][100][station][52][price]" />
<!-- more input fields -->
</div>
</div>
<div class="machine-stations">
<div class="property-container">
<input name="machine[process][1][system][100][station][60][name]" />
<input name="machine[process][1][system][100][station][52][price]" />
<!-- more input fields -->
</div>
</div>
<div class="machine-stations">
<div class="property-container">
<input name="machine[process][2][system][100][station][40][name]" />
<input name="machine[process][2][system][100][station][52][price]" />
<!-- more input fields -->
</div>
</div>
我想要完成的是我必须根据[process]
索引号更改.machine-stations
之后的数字。用户可以复制.machine-stations
。如果输入字段包含在.machine-stations
索引0中,则[process]
之后的数字应为0,依此类推。谢谢!
答案 0 :(得分:2)
我相信这就是您所寻找的:http://jsfiddle.net/GQbCV/1/
var $inputs = $(".machine-stations").find("input");
$inputs.each( function(i) {
this.name = this.name.replace(/\[process\]\[\d+\]/,"[process]["+i+"]");
});
在小提琴中我更改了html中的数字,以便它们可以更改回0,1,2。
既然你说上面的内容不是你想要的并且没有澄清,我会再次猜测...使用你更新的html结构。这将在每个.machine-stations
:http://jsfiddle.net/GQbCV/2/
$(".machine-stations").each( function() {
$(this).find("input").each( function(i) {
this.name = this.name.replace(/\[process\]\[\d+\]/,"[process]["+i+"]");
});
});
和第三个猜测......在这种情况下,第一个.machine-stations
中的所有内容都将为0,第二个内的所有内容都将为1,等等。http://jsfiddle.net/GQbCV/3/
$(".machine-stations").each( function(i) {
$(this).find("input").each( function() {
this.name = this.name.replace(/\[process\]\[\d+\]/,"[process]["+i+"]");
});
});
答案 1 :(得分:0)
您只需使用attr('attributeName',function(index,oldvalue)方法
即可$('.machine-stations input').attr('name',function(i,v){
return v.replace(/process\]\[\d+/,'process]['+i);
// or return v.replace(/(process\]\[)\d+/,'$1'+i);
});
答案 2 :(得分:0)
第1 jsFiddle
代码开始简单,小函数增长了大声笑 我没有承认问题编辑直到但是检查小提琴。我相信这是你的方向。