为什么没有document.createHTMLNode()?

时间:2011-09-25 11:40:19

标签: javascript dom createtextnode

我想在当前范围(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元素?

5 个答案:

答案 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