Au lieu d'utiliser regex, analyser et parcourir les éléments. Essayez:
var data = "<div id='1'></div><div id='asdf'><input type='text' id='2'/></div>",
numCompare = 23,
div = document.createElement("div"),
i, cur;
div.innerHTML = data;
function updateId(parent) {
var children = parent.children;
for (i = 0; i < children.length; i++) {
cur = children[i];
if (cur.nodeType === 1 && cur.id) {
cur.id = cur.id + "_" + numCompare;
}
updateId(cur);
}
}
updateId(div);
DEMO:http://jsfiddle.net/RbuaG/3/
Ce vérifie si le id
est défini en premier lieu, et alors seulement il le modifier.
En outre, il est sûr au cas où le code HTML contient un noeud de commentaire (où IE 6-8 inclut des noeuds de commentaire dans .children
).
En outre, il traverse tous les enfants de tous les éléments. Dans votre exemple, vous n'aviez qu'un niveau d'éléments (non imbriqué). Mais dans mon violon, je niche le <input />
et il est encore modifié.
Pour obtenir le code HTML mis à jour, utilisez div.innerHTML
.
Avec jQuery, vous pouvez essayer:
var data = "<div id='1'></div><div id='asdf'><input type='text' id='2'/></div>",
numCompare = 23,
div = $("<div>"),
i, cur;
div.append(data);
div.find("[id]").each(function() {
$(this).attr("id", function (index, attr) {
return attr + "_" + numCompare;
});
});
DEMO:http://jsfiddle.net/tXFwh/5/
Bien qu'il soit valable de faire id
commencer et/ou un numéro, vous devez modifier le id
du éléments pour être un identifiant normal.
Références:
Avez-vous une source jquery? Pourrait rendre ce super facile et sans essayer d'utiliser regex sur dom, que vous devriez éviter. – smerny
Oui, j'utilise actuellement jquery –
Veuillez noter que les ID commençant par un nombre ne sont pas valides HTML – Dancrumb