我建议,虽然你已经有了一个答案,但以下是我的建议:
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 Fiddle演示。
鉴于您的问题基本上是“新内容”不是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 Fiddle演示。
参考资料:
replaceWith
。 - Amareswar