Вставить два и более блока через insertBefore
С помощью метода insertBefore вставляю созданный блок div в нужное место, т.е. в родителя parentDiv ставлю newblock перед elem.
parentDiv.insertBefore(newblock, elem); Тут всё ясно, а вот как вставить рядом такой же newblock? Т.е. как-то можно выполнить такой же insertBefore ещё раз? |
Всё, понял, надо создать ещё один блок
|
А я не понял.)
Возможно тебе нужен document.createDocumentFragment(), чтоб одним insretBefore вставить несколько элементов, а может быть тебе нужен Element.cloneNode(true), чтобы склонировать один элемент несколько раз... |
Тогда я тоже не понял.
Хочу сделать вот что - нужно создать блок, и вставить его в определённое место несколько раз, количество раз рассчитывается отдельно. Собственно, придумал делать это в цикле. n - рассчитывается ранее
for (var i=1; i<=n; i++) {
var newblock[i] = document.createElement('div');
newblock[i].className = "class";
newblock[i].innerHTML = "Текст блока [i]";
parentDiv.insertBefore(newblock[i], elem);
}
|
Всё в принципе верно(кроме "var newblock[i]", но думаю тут просто опечатка, ибо оно просто не стало бы работать).
А так, с помощью фрагмента возможна микрооптимизация:
var fragment = document.createDocumentFragment();
for (var i=0; i<n; i++) {
var newblock = document.createElement('div');
newblock.className = "class";
newblock.innerHTML = "Текст блока [i]";
fragment.appendChild(newblock);
}
parentDiv.insertBefore(fragment, elem);
Если же элементы вообще одинаковые, то тут пригодится клон:
var newblock = document.createElement('div');
newblock.className = "class";
newblock.innerHTML = "Текст блока";
var fragment = document.createDocumentFragment();
while(n--) fragment.appendChild(newblock.cloneNode(true));
parentDiv.insertBefore(fragment, elem);
|
Я бы сгенерил html-текст и вштырил бы его единовременно куда сказано via innerHTML=
Живые элементы интересно создавать в рамках задачи управления ими, а если никаких рамок, зачем они нужны. |
warren buffet, тогда уж через insertAdjacentHTML.)
|
Да, этим методом, могучая вещь. ТС, посмотри его в мануале, там 4 опции - до, первым, последним и после.
|
Спаисбо, с этим разобрался.
А что, если мне нужны разные блоки?
var n=2;
for (var i=0; i<n; i++) {
var newblock = document.createElement('div');
newblock.className = "class";
newblock.innerHTML = "Текст блока";
parentDiv.insertBefore(newblock, elem);
}
newblock1 и newblock2 |
Я еще тогда подумал откуда контент-то брать. Ну и откуда?
|
| Часовой пояс GMT +3, время: 23:59. |