Почему нет документа.createHTMLNode ()?

Я хочу вставить html в текущий диапазон (диапазон W3C).

Я думаю, я должен использовать метод insertNode. И отлично работает с текстом.

пример:

var node = document.createTextNode("some text");
range.insertNode(node);

проблема в том, что я хочу вставить html (может быть что-то вроде "

test

some more text"). И нет createHTMLNode ().

Я попытался использовать createElement ('div'), дать ему идентификатор и html как innerHTML, а затем попытаться заменить его на nodeValue после вставки, но это дает мне ошибки DOM.

есть ли способ сделать это без получения дополнительного html-элемента вокруг html, который я хочу вставить?

4 ответов


, потому что "<h1>test</h1>some more text" состоит из HTML-элемента и двух фрагментов текста. Это не a узел.

Если вы хотите вставить HTML, используйте innerHTML.

есть ли способ сделать это без получения дополнительного html-элемента вокруг html, который я хочу вставить?

создайте элемент (не добавляйте его в документ). Установите свой innerHTML. Затем переместите все его дочерние узлы, зацикливаясь на foo.childNodes.


в некоторых браузерах (особенно не в любой версии IE), Range объекты имеют изначально нестандартное createContextualFragment() что может помочь. Вполне вероятно, что будущие версии браузеров, таких как IE, будут реализовывать это сейчас, что он был стандартизирован.

вот пример:

var frag = range.createContextualFragment("<h1>test</h1>some more text");
range.insertNode(frag);

вместо innerHTML просто используйте appendChild (element);этой может помочь вам. Если вы хотите прокомментировать здесь, и я приведу вам пример.


попробовать

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