2012-12-12 111 views
1

我想重命名克隆功能中的某些字段,但我不知道如何重命名(增加)字段名稱。字段名的jQuery搜索替換字符串

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

例子:

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

在這種情況下,我需要增加[2][3]。名字可以有更多或更少的括號,但它總是我需要增加的倒數第二。

我該如何去做這件事?

+0

請說明更多。 – user197508

+0

將該數字存儲在'data-'屬性中。 – Blender

+0

不幸的是,由於我使用的是複雜的表單框架,因此無法將其設置爲數據屬性。這本來是一個好的和簡單的解決方案。 – charliexx

回答

0

正則表達式的樂趣。匹配模式[數字] [字符串]結束行,讀取數字,加一個,加入匹配的其他部分,並設置新名稱。

$(tr).find("input").prop("name", function() { 
    return this.name.replace(
     /\[(\d+)(\]\[[^[]+]$)/, 
     function (a,b,c) { 
      return "[" + (parseInt(b,10)+1) + "]" + c; 
     } 
    ) 
}); 
0

假設它總是會在字符串的結尾先於[...]

name.replace(/\[(\d+)\](\[[^\[]+\])$/, function (pattern, value, tail) { 
    return "[" + (parseInt(value, 10) + 1) + "]" + tail; 
});​ 
+0

如果突然出現更多的括號,這不會起作用嗎? – charliexx

+0

@charliexx如果您的模式將發生變化,那麼需要更靈活的解決方案。我更新了我的答案,以包含正則表達式。 – Sampson

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/

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); 

demo