我想在当前范围(W3C范围)插入html。
我想我必须使用insertNode方法。它适用于文本。
示例:
var node = document.createTextNode("some text");
range.insertNode(node);
问题是我想插入html(可能类似于“< h1> test< / h1>更多文字”)。而且没有createHTMLNode()。
我尝试使用createElement('div'),给它一个id,并将html作为innerHTML,然后在插入后尝试用它的nodeValue替换它,但它给了我DOM错误。
有没有办法做到这一点,而不是在我要插入的html周围获得额外的html元素?
答案 0 :(得分:9)
因为"<h1>test</h1>some more text"
由HTML元素和两段文本组成。它不是 a 节点。
如果要插入HTML,请使用innerHTML
。
有没有一种方法可以在我想要插入的html周围获得额外的html元素?
创建元素(不要将其添加到文档中)。设置其innerHTML。然后通过循环foo.childNodes
来移动其所有子节点。
答案 1 :(得分:4)
在某些浏览器中(特别是不是任何版本的IE),Range
个对象最初具有非标准createContextualFragment()
可能有所帮助。未来版本的浏览器(如IE)可能会实现it has been standardized。
以下是一个例子:
var frag = range.createContextualFragment("<h1>test</h1>some more text");
range.insertNode(frag);
答案 2 :(得分:3)
而不是innerHTML只需使用appendChild(element); this可能会对您有所帮助。 如果你想在这里发表评论,我会给你一个例子。
答案 3 :(得分:2)
尝试
function createHTMLNode(htmlCode, tooltip) {
// create html node
var htmlNode = document.createElement('span');
htmlNode.innerHTML = htmlCode
htmlNode.className = 'treehtml';
htmlNode.setAttribute('title', tooltip);
return htmlNode;
}
来自:http://www.koders.com/javascript/fid21CDC3EB9772B0A50EA149866133F0269A1D37FA.aspx
答案 4 :(得分:0)
Range.insertNode()方法在Range的开头插入一个节点。
%d
资源
https://developer.mozilla.org/en-US/docs/Web/API/range/insertNode