2017-02-14 5 views
2

Das folgende ist mein Element id und ich möchte es dynamisch aktualisieren.Dynamisch Elementname in Jquery ändern

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

möchte ich nur die zweite Zahl zu aktualisieren, das heißt [4], wie folgt aus:

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

ich unten Code verwende, die sowohl die Werte aktualisiert.

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

Jede Hilfe wäre willkommen.

+1

Können Sie uns sagen, warum? Dies kann an anderer Stelle optimiert werden! –

+0

vielleicht addClass/removeClass ist ein besserer Weg zu gehen .. – Celebrian

Antwort

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

Wenn Sie nicht wollen, Pfeil Funktionen ersetzen Sie diese Zeile verwenden:

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

mit diesem:

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

Erläuterung:

split ein Array wie folgt zurück:

[ 
    "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]" 
] 

Die /^\d+/ beliebig viele am Anfang übereinstimmen (keine Notwendigkeit für die g Modifikator).

Ersetzen mit +n + 1 nicht n + 1 weil n ein String ist, müssen Sie die interpretter zwingen ihn als Zahl zu verwenden oder auf andere Weise diese "4" + 1 zu diesem "41" führen.

Dann, nachdem Sie ändern, was Sie wollen, verbinden Sie die Teile mit join mit dem gleichen Zeichen, das Sie zum Aufteilen verwendet haben ([).

1

Mit dieser Regex /((\w)+)(\[\d+\])(\[(\w)+\])(\[\d+\])(\[(\w)+\])/gi können Sie die Zeichenfolge zurück und ändern Sie Ihre Ganzzahl.

var match = /((\w)+)(\[\d+\])(\[(\w)+\])(\[\d+\])(\[(\w)+\])/gi.exec(youString); 
//group 6 is your digit. 
var newId = parseInt(match[6].replace("\[\]", "")) + 1; 
var newString = match[1] + match[3] + match[4] + "[" + newId + "]" + match[7]; 

Hier ist eine Geige mit der Antwort https://jsfiddle.net/gzfud9vc/

1

Vielleicht nicht Regex verwenden, um Ihre Element-ID zu erstellen. Sie können ihre tun wie folgt auch:

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