Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Преобразование текста в html(на уровне объектов) (https://javascript.ru/forum/events/21531-preobrazovanie-teksta-v-html-na-urovne-obektov.html)

Slavenin 13.09.2011 21:37

Преобразование текста в html(на уровне объектов)
 
Всем доброго времени суток!
Возникла надобность преобразовать результат ajax-запроса строку с кодом html, так сказать, в живой html, но не выводить его на страницу а сохранить в переменную.
var text = '<div>тест</div>';

как сделать чтобы тип переменной text с текстового сменился на объект dom. И вообще возможно такое без размещения кода на странице?
eval не срабатывает.

Kolyaj 13.09.2011 21:54

var text = '<div>тест</div>';
var div = document.createElement('div');
div.innerHTML = text;
var result = div.firstChild;
alert(result);

Slavenin 13.09.2011 22:19

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

Триви 13.09.2011 22:28

Цитата:

Сообщение от Slavenin (Сообщение 126347)
примерно такой алгоритм я сейчас и реализовал, но в нем необходимо создать контейнер для размещения в него текста, а можно ли обойтись без него, вот в чем вопрос:)

Да это ж тебе дали для примера.
Встраивай в любой другой элемент (уже существующий) на странице.

Kolyaj 13.09.2011 22:35

Цитата:

Сообщение от Slavenin
а можно ли обойтись без него

А зачем?

Slavenin 13.09.2011 22:41

Цитата:

Сообщение от Kolyaj (Сообщение 126350)
А зачем?

очень хочется ответить "за шкафом"...

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

Kolyaj 13.09.2011 22:46

Что значит ненужный? Он нужен для того, чтобы преобразовать строку в DOM-объект. Потом GC его удалит, не надо за него переживать. Вставки в DOM тут не происходит, т.к. контейнер не в DOM-е, так что это всё быстро.

Непонятно, что вы объединяете и зачем вам строку в DOM-объект преобразовывать. Если у вас есть строки, так объедините их в виде строк, а потом в DOM через innerHTML пачкой вставьте. Если у вас есть много DOM-элементов, которые надо вставить на страницу, то для ускорения этого есть DocumentFragment.

Slavenin 13.09.2011 23:06

да, все, со всем разобрался, благодарю :)

Триви 13.09.2011 23:15

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);

nikita.mmf 14.09.2011 13:43

Не хотите создавать каждый раз, так создайте один раз
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, время: 21:04.