Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   jQuery и innerHTML() (https://javascript.ru/forum/jquery/12600-jquery-i-innerhtml.html)

hrundel 25.10.2010 17:07

jQuery и innerHTML()
 
Я пока не знаю достаточно хорошо фреймворк jQuery, но при знакомстве с ним появился такой вопрос.
Есть такой метод html(), который позволяет добавить на страницу новые теги. Вот пример:
Код:

$("h1#firstHeading").html('<p>hello </p>');
А это не является ли примитивной реализацией метода javascript innerHTML(), который является мягко говоря устаревающим и его использование не рекомендуется? Также при изучении мануалов нашёл функцию append(), позволяющую вставить произвольный текст в конец тега. Есть ли другие методы для корректного вставления тега (и текста) в страницу с использованием jQuery?
Если jQuery так отстойно делает вставку тегов, может его вообще не стоит применять в своих проектах?

exec 25.10.2010 17:44

Не знаю, где Вы начитались всего этого бреда, но:

1. jQuery — библиотека, а не фреймворк.
2. innerHTML — свойство, а не метод.
3. innerHTML — вполне нормальный способ добавлять элементы, зачастую более быстрый, чем DOM-методы. И конечный результат тот же самый.

B@rmaley.e><e 25.10.2010 19:40

Цитата:

Сообщение от hrundel
А это не является ли примитивной реализацией метода javascript innerHTML(), который является мягко говоря устаревающим и его использование не рекомендуется?

О_о
innerHTML это, вообще говоря, не стандарт. Но есть во всех браузерах, и активно используется.

FreeStyler 12.01.2011 19:07

Нормальный innerHTML
Попутно вопрос как сделать на jQuery так
elem.innerHTML += '<p>test!</p>'

demon_666_902 21.03.2013 13:04

Цитата:

Сообщение от FreeStyler (Сообщение 87726)
Нормальный innerHTML
Попутно вопрос как сделать на jQuery так
elem.innerHTML += '<p>test!</p>'

var oldHtml = $(elem).html();
$(elem).html(oldHtml + addValue);

danik.js 21.03.2013 14:06

Цитата:

Сообщение от demon_666_902
var oldHtml = $(elem).html();
$(elem).html(oldHtml + addValue);

Самый неоптимальный и потенциально опасный вариант.

Полагаю в jQuery используется что-то вроде этого:
$(elem)[0].insertAdjacentHTML('beforeend', html);

Keeper 21.03.2013 14:16

А про .after( content [, content ] ) или .insertAfter() все забыли?

http://api.jquery.com/after/

danik.js 21.03.2013 14:38

Так ведь after вставляет контент после элемента, а не в конце него. Тогда уж .append.
Цитата:

Сообщение от danik.js
Полагаю в jQuery используется что-то вроде этого:

Тут я имел ввиду внутренности jQuery. Ща глянул - там не используется этот метод вообще. Так что если нужна производительность - .append не годится.

Keeper 21.03.2013 14:48

Простите за невнимательность, да, append (appendTo)...

KudenkovR 25.04.2013 14:35

Вопрос - если использовать innerHTML() вместо html(), получится ли повысить производительность или это лишние заморочки?
Я заметил, что при добавлении таблицы через html() в DOM добавляются элементы, которые я не прописывал в код - <tbody> и <colgroup>. Это значит, что метод html() просматривает добавляемую строку на валидность. Происходит ли то же самое при добавлении содержимого через innerHTML()?

tropiko 25.04.2013 16:33

Цитата:

Сообщение от KudenkovR (Сообщение 248028)
Вопрос - если использовать innerHTML() вместо html(), получится ли повысить производительность или это лишние заморочки?

В jQ (смотрел в 1.9.0) в ф-ции .html() проверяется возможность вставки через innerHTML, если прием невозможен, то через DOM, appendChild'ом с одновременной очисткой содержимого.

Цитата:

Сообщение от KudenkovR (Сообщение 248028)
при добавлении таблицы через html() в DOM добавляются элементы, которые я не прописывал в код - <tbody> и <colgroup>

Не проверяется.
Подозреваю, что браузер сам добавит то, что должно быть по стандарту.

[OFFTOP]
Кстати, по поводу TBODY, существуют проблемы в IE, при вставке через innerHTML таблиц. Неоднократно упоминалось на этом форуме.
[/OFFTOP]

KudenkovR 26.04.2013 01:37

спасибо =) значит можно спокойно работать и дальше с jQuery. Кстати с tbody в ie у меня проблем не было замечено, думаю стоит углубиться в этот вопрос. Мне до сих пор не верится, что это хром так добавляет содержимое на страницу, а не jQuery старается

danik.js 26.04.2013 11:12

При парсинге html (первичная загрузка, изменение innerHTML) DOM-струтура дополняется автоматически. Это наблюдается и с другими элементами (автосоздание тегов <html>, <body>, <head> и тд.)
У старых IE с этим проблемы. Например <tbody> он не создаст и получится битая таблица.

puch 29.04.2013 08:59

На jquery это делается так
 
Цитата:

Сообщение от FreeStyler (Сообщение 87726)
Нормальный innerHTML
Попутно вопрос как сделать на jQuery так
elem.innerHTML += '<p>test!</p>'

elem.append('<p>test!</p>');

danik.js 29.04.2013 11:19

puch, #8


Часовой пояс GMT +3, время: 01:11.