Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.10.2016, 14:40
Интересующийся
Отправить личное сообщение для makc_mb Посмотреть профиль Найти все сообщения от makc_mb
 
Регистрация: 18.01.2015
Сообщений: 10

Вставить два и более блока через insertBefore
С помощью метода insertBefore вставляю созданный блок div в нужное место, т.е. в родителя parentDiv ставлю newblock перед elem.

parentDiv.insertBefore(newblock, elem);


Тут всё ясно, а вот как вставить рядом такой же newblock? Т.е. как-то можно выполнить такой же insertBefore ещё раз?
Ответить с цитированием
  #2 (permalink)  
Старый 09.10.2016, 14:46
Интересующийся
Отправить личное сообщение для makc_mb Посмотреть профиль Найти все сообщения от makc_mb
 
Регистрация: 18.01.2015
Сообщений: 10

Всё, понял, надо создать ещё один блок
Ответить с цитированием
  #3 (permalink)  
Старый 09.10.2016, 17:43
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,590

А я не понял.)
Возможно тебе нужен document.createDocumentFragment(), чтоб одним insretBefore вставить несколько элементов, а может быть тебе нужен Element.cloneNode(true), чтобы склонировать один элемент несколько раз...
__________________
29375, 35
Ответить с цитированием
  #4 (permalink)  
Старый 10.10.2016, 20:07
Интересующийся
Отправить личное сообщение для makc_mb Посмотреть профиль Найти все сообщения от makc_mb
 
Регистрация: 18.01.2015
Сообщений: 10

Тогда я тоже не понял.
Хочу сделать вот что - нужно создать блок, и вставить его в определённое место несколько раз, количество раз рассчитывается отдельно. Собственно, придумал делать это в цикле.

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);

}
Ответить с цитированием
  #5 (permalink)  
Старый 10.10.2016, 23:28
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,590

Всё в принципе верно(кроме "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);
__________________
29375, 35

Последний раз редактировалось Aetae, 10.10.2016 в 23:32.
Ответить с цитированием
  #6 (permalink)  
Старый 11.10.2016, 06:24
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Я бы сгенерил html-текст и вштырил бы его единовременно куда сказано via innerHTML=

Живые элементы интересно создавать в рамках задачи управления ими, а если никаких рамок, зачем они нужны.
Ответить с цитированием
  #7 (permalink)  
Старый 11.10.2016, 13:39
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,590

warren buffet, тогда уж через insertAdjacentHTML.)
__________________
29375, 35
Ответить с цитированием
  #8 (permalink)  
Старый 11.10.2016, 20:47
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Да, этим методом, могучая вещь. ТС, посмотри его в мануале, там 4 опции - до, первым, последним и после.
Ответить с цитированием
  #9 (permalink)  
Старый 12.10.2016, 01:43
Интересующийся
Отправить личное сообщение для makc_mb Посмотреть профиль Найти все сообщения от makc_mb
 
Регистрация: 18.01.2015
Сообщений: 10

Спаисбо, с этим разобрался.

А что, если мне нужны разные блоки?

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

Последний раз редактировалось makc_mb, 12.10.2016 в 01:46.
Ответить с цитированием
  #10 (permalink)  
Старый 13.10.2016, 11:57
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Я еще тогда подумал откуда контент-то брать. Ну и откуда?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Связать два и более <select> Meattale (X)HTML/CSS 18 08.07.2016 17:29
Два и более текстовых узлов подряд zhurchik Events/DOM/Window 5 13.05.2015 23:27
ктивация одного блока через другой zerofx Элементы интерфейса 6 14.01.2014 00:28
После скрытия блока через заданное время zoOmer Общие вопросы Javascript 8 13.01.2014 18:51
Как вставить полученый через аякс html код в DOM? iKillMaxmaxmaximus Общие вопросы Javascript 7 03.07.2013 19:38