1

クローン関数の一部のフィールドの名前を変更しようとしていますが、フィールド名の名前を変更(増やす)する方法がわかりません。

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

フィールド名の例:

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

この場合、に増やす必要があり[2]ます[3]。名前には多かれ少なかれ括弧を含めることができますが、私が増やす必要があるのは常に最後から2番目の名前です。

どうすればこれを行うことができますか?

4

4 に答える 4

0

[...]文字列の最後で常にaの前にあると仮定します。

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

常に最後から2番目の場合は、このように行うことができます

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

およびを使用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 Of行に一致し、番号を読み取り、1つ追加し、一致の他の部分を結合して、新しい名前を設定します。

$(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 に答える