Преобразование текста в html(на уровне объектов)
Всем доброго времени суток!
Возникла надобность преобразовать результат ajax-запроса строку с кодом html, так сказать, в живой html, но не выводить его на страницу а сохранить в переменную. var text = '<div>тест</div>'; как сделать чтобы тип переменной text с текстового сменился на объект dom. И вообще возможно такое без размещения кода на странице? eval не срабатывает. |
var text = '<div>тест</div>'; var div = document.createElement('div'); div.innerHTML = text; var result = div.firstChild; alert(result); |
примерно такой алгоритм я сейчас и реализовал, но в нем необходимо создать контейнер для размещения в него текста, а можно ли обойтись без него, вот в чем вопрос:)
|
Цитата:
Встраивай в любой другой элемент (уже существующий) на странице. |
Цитата:
|
Цитата:
хотя бы потому что это лишний, не нужный никому, контейнер, который потом мешает. Прямая вставка в дом это ресурсоемкая операция, гораздо быстрее, провести объединение нужных элементов в памяти и потом за одно действие впихнуть в дом, особенно если объединяются большие объемы информации |
Что значит ненужный? Он нужен для того, чтобы преобразовать строку в DOM-объект. Потом GC его удалит, не надо за него переживать. Вставки в DOM тут не происходит, т.к. контейнер не в DOM-е, так что это всё быстро.
Непонятно, что вы объединяете и зачем вам строку в DOM-объект преобразовывать. Если у вас есть строки, так объедините их в виде строк, а потом в DOM через innerHTML пачкой вставьте. Если у вас есть много DOM-элементов, которые надо вставить на страницу, то для ускорения этого есть DocumentFragment. |
да, все, со всем разобрался, благодарю :)
|
var text = '<div><p>текст параграфа</p><span>текст спана</span><a href="">текст ссылки</a></div>'; var div = document.createElement('div'); div.innerHTML = text; alert(div.getElementsByTagName('p')[0].innerHTML); alert(div.getElementsByTagName('span')[0].innerHTML); alert(div.getElementsByTagName('a')[0].innerHTML); |
Не хотите создавать каждый раз, так создайте один раз
var createElementsByHTML = (function(){ var div = document.createElement("div"); return function ( html ) { var res = []; div.innerHTML = html; while ( div.firstChild ) { res[ res.length ] = div.removeChild( div.firstChild ); } return res; }; })(); |
Часовой пояс GMT +3, время: 10:01. |