Как правильнее создавать\добавлять элементы в структуре 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);
|
Yes,
1 - вариант правильней |
Yes,
1-й Поскольку при втором, могут пропадать события , уже установленные внутри элемента |
Большое спасибо, за ответ и пояснение)
|
На мой взгляд, оба хороши (третий ошибочный), использование зависит от ситуации.
Помнить только, что при добавлении к innerHTML (+=) идёт перезапись и обработчики внутренних элементов (если они не в атрибутах) теряются и то, что не все теги позволяют делать перезапись innerHTML (например, table и tr в IE этого не позволяют). Там, где не нужны обработчики или они записаны в атрибутах и нет внутреннего содержимого с обработчиками, я бы использовал перезапись innerHTML. |
Цитата:
var img = document.getElementById("pictures").appendChild( document.createElement("img") );
img.id = "new_img";
img.src = "pic.jpg";
и от добавления классов\ИДшников отрисовка\перерасчёт будут сделаны столько же раз, сколько и при приведённом в первом посте примере, ибо в браузерах сейчас всё такое ленивое :) |
var fragment = document.createDocumentFragment(); fragment.appendChild( child1 ); // никаких перерисовок не будет fragment.appendChild( child2 ); // никаких перерисовок не будет fragment.appendChild( child3 ); // никаких перерисовок не будет fragment.appendChild( child4 ); // никаких перерисовок не будет //..................... some code document.body.appendChild( fragment ); // перерисовка будет лишь раз. |
| Часовой пояс GMT +3, время: 06:03. |