это манипуляция домом? - PullRequest
       3

это манипуляция домом?

2 голосов
/ 08 февраля 2011

Мне известно, что большое количество манипуляций с DOM плохо из-за того, что это вызывает перерисовку и т. Д.

, но как насчет того, чтобы сделать что-то вроде

var container = $('<div />');
{repeat:20}
container.append(<div>content</div>);
{endrepeat}
$('#actualElement').html(container.html());

, даже если это не манипуляция DOMэто плохо?

Ответы [ 4 ]

2 голосов
/ 08 февраля 2011

Нет, это нормально, поскольку container не подключен к DOM. Это предпочтительный способ добавить множество элементов в DOM.
Но с помощью html() вы потеряете все обработчики событий или data добавите к элементам. Если вы хотите сохранить их, подумайте об этом:

$('#actualElement').empty().append(container.children());

Вы также можете использовать DocumentFragement , но, поскольку вы используете jQuery, я бы придерживался jQuery.

Обновление: Чтобы ответить на актуальный вопрос: Да, это манипулирование DOM, но вы добавляете в DOM только один раз, что является лучшим, что вы можете получить (кроме того, чтобы вообще не вставлять;)).

0 голосов
/ 08 февраля 2011

Да, это манипулирование DOM. Но это, вероятно, быстрее, чем вставка компонентов один за другим.

Но в большинстве браузеров это нужно перекрашивать / перекомпоновывать только один раз (при вставке встроенной структуры).

Вы должны сравнить его и сравнить с другими параметрами (например, вставить HTML в виде строки).

0 голосов
/ 08 февраля 2011

Нет, это не плохо.

Или, это не хуже (или лучше), чем манипулирование DOM в отношении перекраски.На самом деле, вы манипулируете DOM.

Предполагая, что вы не просто манипулируете DOM, у вас, вероятно, будет цель сделать это.Если есть другие решения, которые не требуют от вас манипулирования DOM, они могут быть лучше, но если их нет (или вы не можете их найти), как это решение может быть неправильным, если оно делает именно то, что вам нужно?

0 голосов
/ 08 февраля 2011

Ну, конечно, вы управляете DOM , вставляя и создавая новые узлы.Скорее всего, это вызовет reflow , который довольно медленный, но, вероятно, не «плохой».

Если вы хотите создать / изменить разметку, вам нужно принять этот компромисс.

Как я уже упоминал в своем комментарии, вероятно, неправильно думать об этом в терминах "хорошо" или "плохо".Если вы хотите что-то изменить на лету с помощью Javascript в DOM, то в какой-то момент не будет никакого способа перевыпуска.Единственное, что вы можете сделать, это избежать ненужных перекомпоновок / перерисовок, выполнив только один доступ к DOM и выполнив остальную часть вашей работы в памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...