Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как правильнее создавать\добавлять элементы в структуре DOM ? (https://javascript.ru/forum/events/30166-kak-pravilnee-sozdavat%5Cdobavlyat-ehlementy-v-strukture-dom.html)

Yes 26.07.2012 15:28

Как правильнее создавать\добавлять элементы в структуре DOM ?
 
Как правильнее создавать\добавлять элементы в структуре DOM ?

var img = document.createElement("img");
  img.id = "new_img";
  img.src = "pic.jpg";
document.getElementById("pictures").appendChild(img);

Или вот так:
document.getElementById("pictures").innerHTML="<img id='new_img' src='pic.jpg' />";

а мож быть так
var img="<img id='new_img' src='pic.jpg' />";
document.getElementById("pictures").appendChild(img);

Dim@ 26.07.2012 15:37

Yes,
1 - вариант правильней

Deff 26.07.2012 15:38

Yes,
1-й
Поскольку при втором, могут пропадать события , уже установленные внутри элемента

Yes 26.07.2012 15:46

Большое спасибо, за ответ и пояснение)

bes 26.07.2012 16:37

На мой взгляд, оба хороши (третий ошибочный), использование зависит от ситуации.
Помнить только, что при добавлении к innerHTML (+=) идёт перезапись и обработчики внутренних элементов (если они не в атрибутах) теряются и то, что не все теги позволяют делать перезапись innerHTML (например, table и tr в IE этого не позволяют).
Там, где не нужны обработчики или они записаны в атрибутах и нет внутреннего содержимого с обработчиками, я бы использовал перезапись innerHTML.

melky 26.07.2012 22:18

Цитата:

Сообщение от Yes
Как правильнее создавать\добавлять элементы в структуре DOM ?

можно даже так - ибо appendChild возвратит добавленный элемент
var img = document.getElementById("pictures").appendChild(  document.createElement("img")  );
img.id = "new_img";
img.src = "pic.jpg";

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

devote 26.07.2012 22:54

var fragment = document.createDocumentFragment();

fragment.appendChild( child1 ); // никаких перерисовок не будет
fragment.appendChild( child2 ); // никаких перерисовок не будет
fragment.appendChild( child3 ); // никаких перерисовок не будет
fragment.appendChild( child4 ); // никаких перерисовок не будет

//..................... some code

document.body.appendChild( fragment ); // перерисовка будет лишь раз.


Часовой пояс GMT +3, время: 22:47.