Подтвердить что ты не робот

Как добавить несколько идентичных элементов в div с помощью jQuery

Мне нужно добавить несколько пустых div в элемент контейнера, используя jQuery.

В настоящий момент я создаю строку, содержащую пустой html, используя цикл

divstr = '<div></div><div></div>...<div></div>';

а затем введя его в мой контейнер:

$('#container').html(divstr);

Есть ли более элегантный способ вставки нескольких одинаковых элементов?

Я надеюсь найти что-то, что не сломает цепочку, но не заставит браузер встать на колени. Цепочный плагин .repeat()?

4b9b3361

Ответ 1

Если вы хотите, чтобы IE был быстрым - или, как правило, считал скорость, вам нужно сначала создать фрагмент DOM, прежде чем вставлять его.

Джон Ресиг объясняет эту технику и включает в себя тест производительности:

http://ejohn.org/blog/dom-documentfragments/

var i = 10, 
    fragment = document.createDocumentFragment(), 
    div = document.createElement('div');

while (i--) {
    fragment.appendChild(div.cloneNode(true));
}

$('#container').append(fragment);

Я понимаю, что это не очень полезно использовать jQuery для создания фрагмента, но я провел несколько тестов, и я не могу сделать $(фрагмент).append() - но я прочитал В выпуске John jQuery 1.3 предполагается включить изменения, основанные на результатах исследований, связанных выше.

Ответ 2

Самый быстрый способ сделать это - сначала создать контент со строками. МНОГО быстрее работать со строками, чтобы создать фрагмент документа, прежде чем работать с DOM или jquery вообще. К сожалению, IE делает очень плохую работу по конкатенации строк, поэтому лучший способ сделать это - использовать массив.

var cont = []; //Initialize an array to build the content
for (var i = 0;i<10;i++) cont.push('<div>bunch of text</div>');
$('#container').html(cont.join(''));

Я использую эту технику в моем коде. Вы можете создавать очень большие html-фрагменты, используя этот метод, и он очень эффективен во всех браузерах.

Ответ 3

Вы можете обернуть собственный массив JavaScript в jQuery и использовать map(), чтобы преобразовать его в jQuery (список узлов DOM). Это официально поддерживается.

$(['plop', 'onk', 'gloubi'])
.map(function(i, text)
{
    return $('<div/>').text(text).get(0);
})
.appendTo('#container');

Это создаст

<div id="container">
<div>plop</div>
<div>onk</div>
<div>gloubi</div>
</div>

Я часто использую эту технику, чтобы избежать повторения (DRY).

Ответ 4

Вы можете использовать регулярный цикл с помощью функции JQuery append.

for(i=0;i<10; i++){
    $('#container').append("<div></div>");
}