如何更改与其父div索引号相关的输入名称

时间:2013-05-30 01:52:11

标签: javascript jquery

我有多个表单输入,他们在名称中使用数组。表单可以由用户复制。当表单重复时,输入字段的名称会相应更改。基本上这就是我的形式

<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,依此类推。谢谢!

3 个答案:

答案 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-stationshttp://jsfiddle.net/GQbCV/2/

内将索引重新启动为0
$(".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);
});

FIDDLE

答案 2 :(得分:0)

第1 jsFiddle

代码开始简单,小函数增长了大声笑 我没有承认问题编辑直到但是检查小提琴。我相信这是你的方向。