在jquery中动态更改元素名称

时间:2017-02-14 13:29:07

标签: javascript jquery

以下是我的元素id,我想动态更新它。

invoice[46][ap_details][4][ap_header_id]  

我想只更新第二个号码,即[4],如下所示:

invoice[46][ap_details][5][ap_header_id]

我正在使用下面的代码来更新这两个值。

var strNewName = $(this).attr('name').replace(/\[\d+\]/g, function(strName) {
    strName = strName.replace(/[\[\]']+/g, '');
    var intNumber = parseInt(strName) + 1;
    return '[' + intNumber + ']';
});

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:1)

使用此正则表达式 ./manage.py dbshell ,您可以构造字符串并更改整数。

/((\w)+)(\[\d+\])(\[(\w)+\])(\[\d+\])(\[(\w)+\])/gi

这是答案https://jsfiddle.net/gzfud9vc/

的小提琴

答案 1 :(得分:1)



var strName = "invoice[46][ap_details][4][ap_header_id]";

var parts = strName.split('[');
parts[3] = parts[3].replace(/^\d+/, n => +n + 1);

var strNewName = parts.join('[');
console.log(strNewName);




如果您不想使用箭头功能,请替换此行:

parts[3] = parts[3].replace(/^\d+/, n => +n + 1);

用这个:

parts[3] = parts[3].replace(/^\d+/, function(n) { return +n + 1; });

<强>解释

split将返回如下数组:

[
  "invoice",
  "46]",             // parts[1] to change this
  "ap_details]",
  "4]",              // parts[3] to change this (and so on, you do the math)
  "ap_header_id]"
]

/^\d+/将匹配开头的任何数字(不需要g修饰符)。

替换为+n + 1而不是n + 1,因为n是一个字符串,您必须强制解释器将其用作数字,否则此"4" + 1将导致此"41"

然后,在更改所需内容后,使用join加入部件,使用与分割([)相同的字符。

答案 2 :(得分:1)

也许不要使用正则表达式来构建你的元素id。你也可以这样做:

var id = 5
var name = "invoice[46][ap_details][";
name += id;
name += "][ap_header_id]";

var toReplace = "invoice[46][ap_details][~~id~~][ap_header_id]"
var replaced = toReplace.replace(/~~id~~/g, id);

console.log(name);
console.log(replaced);