我建议,虽然您已经有了答案,但以下内容:
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 小提琴演示。
参考: