正規表現を使用する代わりに、それを解析して要素をループします。試す:
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
)。
また、すべての要素のすべての子をウォークスルーします。あなたの例では、要素のレベルは 1 つしかありませんでした (ネストされていません)。しかし、私のフィドルでは、をネストし<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
、要素の を通常の識別子に変更する必要があります。
参考文献: