1

我正在尝试重命名克隆函数中的某些字段,但我不确定如何重命名(增加)字段名称。

var tr = $copy.clone();
tr('input').each(function() {
  console.log(this.name); 
  this.name = something;
});

字段名称示例:

field[subform][0][subsubform][2][name]

在这种情况下,我需要[2]增加到[3]. 该名称可以有或多或少的括号,但它始终是我需要增加的倒数第二个。

我该怎么做呢?

4

4 回答 4

0

如果它总是倒数第二个,你可以这样做

var name = 'field[subform][0][subsubform][2][name]';
var firstStr = name.split('][').slice(0,-2);
var secStr = name.split('][').slice(-2);
secStr[0] = +secStr[0] +1; 
console.log(firstStr.concat(secStr).join(']['));

http://jsfiddle.net/3TuHg/

或者像这样

var name = 'field[subform][0][subsubform][2][name]';
var str = name.split('][');
str[str.length - 2] = +str[str.length - 2] + 1;
str = str.join('][');
console.log(str);

http://jsfiddle.net/NsGvv/

于 2012-12-12T18:51:03.920 回答
0

假设它总是在[...]字符串末尾的 a 之前:

name.replace(/\[(\d+)\](\[[^\[]+\])$/, function (pattern, value, tail) {
    return "[" + (parseInt(value, 10) + 1) + "]" + tail;
});​
于 2012-12-12T18:44:38.533 回答
0

使用indexOfsubstr

以下代码获取数字之前的字符串的第一部分、数字和数字之后的字符串。然后将数字加 1 并连接所有内容。

var string = "field[subform][0][subsubform][2][name]",
    beg = string.indexOf("subsubform][") + 12,
    end = string.indexOf("]", beg);
string = string.substr(0, beg) + (parseInt(string.substr(beg, end)) + 1) + string.substr(end);

演示

于 2012-12-12T18:59:21.727 回答
0

正则表达式很有趣。匹配模式 [number][string]end 的行,读取数字,加一,加入匹配的其他部分,并设置新名称。

$(tr).find("input").prop("name", function() {
    return this.name.replace(
        /\[(\d+)(\]\[[^[]+]$)/,
        function (a,b,c) { 
            return "[" + (parseInt(b,10)+1) + "]" +  c;
        }
    )
});
于 2012-12-12T19:09:36.973 回答