あなたはすでに答えを持っていますが、次のことをお勧めします。
var newContent = '<div class = "element3"> some other text</div>',
temp = document.createElement('div'),
div1 = document.getElementsByClassName('element1')[0];
temp.innerHTML = newContent;
div1.parentNode.replaceChild(temp.firstChild, div1);
JS フィドルのデモ。
基本的に、「新しいコンテンツ」がDOMノードではないという問題があったことを考えると、最も賢明な解決策は、単にDOMノードにすることです。もちろん、これにはクロスブラウザの使用に関する注意事項がありdocument.getElementsByClassName()
ます。
以下は、サポートしていないブラウザーにフォールバックを提供するクロスブラウザー バージョンですdocument.getElementsByClassName()
(IE 7 で動作しますが、他のバージョンは利用できません。これらのブラウザーのうち、条件付き評価を処理する可能性があります):
function findByClassName(classname, el) {
if (!classname) {
return false;
}
else {
el = !el ? document.getElementsByTagName('body')[0] : el;
var children = el.getElementsByTagName('*'),
withClass = [];
for (var i = 0, len = children.length; i < len; i++) {
if (children[i].nodeType == 1) {
var classes = children[i].className.split(/\s+/);
for (var c = 0, leng = classes.length; c < leng; c++) {
if (classes[c] == classname) {
withClass.push(children[i]);
}
}
}
}
return withClass;
}
}
var newContent = '<div class = "element3"> some other text</div>',
temp = document.createElement('div'),
div1 = document.getElementsByClassName ? document.getElementsByClassName('element1')[0] : findByClassName('element1')[0];
temp.innerHTML = newContent;
div1.parentNode.replaceChild(temp.firstChild, div1);
JS フィドルのデモ。
参考文献: