Преобразование HTML-строки в элементы DOM? [дубликат]
этот вопрос уже есть ответ здесь:
создание нового элемента DOM из строки HTML с помощью встроенных методов DOM или прототипа
21 ответов
есть ли способ конвертировать HTML, как:
<div>
<a href="#"></a>
<span></span>
</div>
или любая другая строка HTML в элемент DOM? (Чтобы я мог использовать appendChild ()). Я знаю, что могу сделать .innerHTML и .innerText, но это не то, что я хочу-я буквально хочу иметь возможность конвертировать динамическую строку HTML в элемент DOM, чтобы я мог передать ее в a .appendChild ().
обновление: там, кажется, путаница. У меня есть содержимое HTML в строке, как значение переменной в JavaScript. В документе отсутствует содержимое HTML.
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