jQuery .html () по сравнению с .append ()

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

244
задан Argiropoulos Stavros 21 February 2018 в 21:17
поделиться

6 ответов

Когда вы передаете строку HTML любому из методов jQuery, происходит следующее:

Создается временный элемент, назовем его x. x innerHTML установлен на строку HTML, которую вы передали. Затем jQuery перенесет каждый из созданных узлов (то есть x childNodes ) во вновь созданный фрагмент документа, который затем будет кэшироваться в следующий раз. Затем он вернет фрагменты childNodes как новую коллекцию DOM.

Обратите внимание, что на самом деле это намного сложнее, поскольку jQuery выполняет множество кроссбраузерных проверок и различных других оптимизаций. Например. если вы передадите просто

в jQuery () , jQuery примет ярлык и просто выполнит document.createElement ('div') .

РЕДАКТИРОВАТЬ : Чтобы увидеть огромное количество проверок, которые выполняет jQuery, посмотрите здесь , здесь и здесь .


innerHTML обычно более быстрый подход, хотя не позволяйте ему определять то, что вы делаете все время. Подход jQuery не так прост, как element.innerHTML = ... - как я уже упоминал, происходит множество проверок и оптимизаций.


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

jQuery(Array(101).join('<div></div>'));

Также необходимо учитывать проблемы удобочитаемости и обслуживания.

Это:

$('<div id="' + someID + '" class="foobar">' + content + '</div>');

... намного труднее поддерживать, чем это:

$('<div/>', {
    id: someID,
    className: 'foobar',
    html: content
});
310
ответ дан 23 November 2019 в 03:09
поделиться

HTML заменит все.

Append просто добавит в конце.

0
ответ дан 23 November 2019 в 03:09
поделиться

если под .add вы имеете в виду .append , то результат будет таким же, если #myDiv пуст.

Производительность такая же? не знаю.

.html (x) в конечном итоге выполняет то же самое, что и .empty (). Append (x)

18
ответ дан 23 November 2019 в 03:09
поделиться

Это не одно и то же. Первый заменяет HTML без предварительного создания другого объекта jQuery. Второй создает дополнительную обертку jQuery для второго div, а затем добавляет ее к первому.

Одна jQuery-обертка (по примеру):

$("#myDiv").html('<div id="mySecondDiv"></div>');

$("#myDiv").append('<div id="mySecondDiv"></div>');

Две jQuery-обертки (по примеру):

var mySecondDiv=$('<div id="mySecondDiv"></div>');
$('#myDiv').html(mySecondDiv);

var mySecondDiv=$('<div id="mySecondDiv"></div>');
$('#myDiv').append(mySecondDiv);

У вас есть несколько различных вариантов использования. Если вы хотите заменить содержимое, то .html - отличный вариант, поскольку он эквивалентен innerHTML = "...". Однако если вы хотите просто добавить содержимое, то дополнительный набор оберток $() не нужен.

Используйте две обертки только в том случае, если вам нужно в дальнейшем манипулировать добавленным div. Даже в этом случае, возможно, вам понадобится только одна:

var mySecondDiv = $("<div id='mySecondDiv'></div>").appendTo("#myDiv");
// other code here
mySecondDiv.hide();
64
ответ дан 23 November 2019 в 03:09
поделиться

Ну, .html () использует .innerHTML , что быстрее, чем создание DOM .

9
ответ дан 23 November 2019 в 03:09
поделиться

Для достижения того же эффекта можно воспользоваться вторым способом:

var mySecondDiv = $('<div></div>');
$(mySecondDiv).find('div').attr('id', 'mySecondDiv');
$('#myDiv').append(mySecondDiv);

Лука упомянул, что html() просто вставляет hte HTML, что приводит к более высокой производительности.

Однако в некоторых случаях лучше выбрать второй вариант, например:

// Clumsy string concat, error prone
$('#myDiv').html("<div style='width:'" + myWidth + "'px'>Lorem ipsum</div>");

// Isn't this a lot cleaner? (though longer)
var newDiv = $('<div></div>');
$(newDiv).find('div').css('width', myWidth);
$('#myDiv').append(newDiv);
7
ответ дан 23 November 2019 в 03:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: