不要使用正则表达式,而是解析它并循环遍历元素。尝试:
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);
演示:http: //jsfiddle.net/RbuaG/3/
这会检查是否id
首先设置了,然后才会修改它。
此外,如果 HTML 包含注释节点(其中 IE 6-8 确实在 中包含注释节点.children
),它也是安全的。
此外,它遍历所有元素的所有子元素。在您的示例中,您只有一层元素(没有嵌套)。但是在我的小提琴中,我嵌套了<input />
它,它仍然被修改了。
要获取更新的 HTML,请使用div.innerHTML
.
使用 jQuery,您可以尝试:
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;
});
});
演示:http: //jsfiddle.net/tXFwh/5/
虽然以id
数字开头和/或以数字开头是有效的,但您应该id
将元素的 更改为普通标识符。
参考: