1

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

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

4

3 回答 3

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 结构。这会将每个索引中的索引重新启动为 0 :http .machine-stations: //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+"]");
    });
});
于 2013-05-30T02:04:18.577 回答
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);
});

小提琴

于 2013-05-30T02:17:47.653 回答
0

第一个jsFiddle

代码开始很简单,小功能变大了哈哈,直到之后我才确认问题编辑,但检查了小提琴。我相信这是你前进的方向。

于 2013-05-30T02:58:37.560 回答