Преобразование HTML-строки в элементы DOM? [дубликат]



этот вопрос уже есть ответ здесь:



есть ли способ конвертировать HTML, как:



<div>
<a href="#"></a>
<span></span>
</div>


или любая другая строка HTML в элемент DOM? (Чтобы я мог использовать appendChild ()). Я знаю, что могу сделать .innerHTML и .innerText, но это не то, что я хочу-я буквально хочу иметь возможность конвертировать динамическую строку HTML в элемент DOM, чтобы я мог передать ее в a .appendChild ().



обновление: там, кажется, путаница. У меня есть содержимое HTML в строке, как значение переменной в JavaScript. В документе отсутствует содержимое HTML.

808   9  

9 ответов:

можно использовать DOMParser, например:

var xmlString = "<div id='foo'><a href='#'>Link</a><span></span></div>"
  , parser = new DOMParser()
  , doc = parser.parseFromString(xmlString, "text/xml");
doc.firstChild // => <div id="foo">...
doc.firstChild.firstChild // => <a href="#">...

обычно создается временный родительский элемент, в который можно записать innerHTML, затем извлеките его содержимое:

var wrapper= document.createElement('div');
wrapper.innerHTML= '<div><a href="#"></a><span></span></div>';
var div= wrapper.firstChild;

если элемент, внешний HTML которого у вас есть, является простым <div> Так вот, это легко. Если это может быть что-то еще, что не может пойти куда угодно, у вас может быть больше проблем. Например, если бы это было <li>, вы должны иметь родительскую обертку быть <ul>.

но IE не может писать innerHTML на элементы, такие как <tr> так что если вы имел <td> вам придется обернуть всю строку HTML в <table><tbody><tr>...</tr></tbody></table> пишите это до innerHTML и вывести фактический <td> вы хотели от нескольких уровней вниз.

почему бы не использовать insertAdjacentHTML

например:

// <div id="one">one</div> 
var d1 = document.getElementById('one'); 
d1.insertAdjacentHTML('afterend', '<div id="two">two</div>');

// At this point, the new structure is:
// <div id="one">one</div><div id="two">two</div>here

Проверьте Джон в отставку чистый JavaScript HTML parser.

EDIT: если вы хотите, чтобы браузер анализировал HTML для вас,innerHTML это именно то, что вы хотите. От это так вопрос:

var tempDiv = document.createElement('div');
tempDiv.innerHTML = htmlString;

хорошо, я понял ответ сам, после того, как мне пришлось думать об ответах других людей. : P

var htmlContent = ... // a response via AJAX containing HTML
var e = document.createElement('div');
e.setAttribute('style', 'display: none;');
e.innerHTML = htmlContent;
document.body.appendChild(e);
var htmlConvertedIntoDom = e.lastChild.childNodes; // the HTML converted into a DOM element :), now let's remove the
document.body.removeChild(e);

вот немного кода, который полезен.

var uiHelper = function () {

var htmls = {};

var getHTML = function (url) {
                /// <summary>Returns HTML in a string format</summary>
                /// <param name="url" type="string">The url to the file with the HTML</param>

    if (!htmls[url])
    {
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.open("GET", url, false);
    xmlhttp.send();
    htmls[url] = xmlhttp.responseText;
     };
     return htmls[url];
    };

        return {
            getHTML: getHTML
        };
}();

--преобразуйте строку HTML в элемент DOM

String.prototype.toDomElement = function () {

        var wrapper = document.createElement('div');
        wrapper.innerHTML = this;
        var df= document.createDocumentFragment();
        return df.addChilds(wrapper.children);
};

--prototype helper

HTMLElement.prototype.addChilds = function (newChilds) {
        /// <summary>Add an array of child elements</summary>
        /// <param name="newChilds" type="Array">Array of HTMLElements to add to this HTMLElement</param>
        /// <returns type="this" />
        for (var i = 0; i < newChilds.length; i += 1) { this.appendChild(newChilds[i]); };
        return this;
};

-- Usage

 thatHTML = uiHelper.getHTML('/Scripts/elevation/ui/add/html/add.txt').toDomElement();

вы можете сделать это так:

String.prototype.toDOM=function(){
  var d=document
     ,i
     ,a=d.createElement("div")
     ,b=d.createDocumentFragment();
  a.innerHTML=this;
  while(i=a.firstChild)b.appendChild(i);
  return b;
};

var foo="<img src='//placekitten.com/100/100'>foo<i>bar</i>".toDOM();
document.body.appendChild(foo);

только id к элементу и обрабатывать его нормально, например:

<div id="dv">
<a href="#"></a>
<span></span>
</div>

теперь вы можете сделать, как:

var div = document.getElementById('dv');
div.appendChild(......);

или с помощью jQuery:

$('#dv').get(0).appendChild(........);

во время серфинга я нашел несколько отличных онлайн-инструментов для преобразования HTML в DOM в чистом javascript.

предпочитаю этой. Просто измените некоторые имена переменных и имя функции по своему усмотрению, и ваш DOM готов. Повеселись....

Comments

    Ничего не найдено.