Как правильнее создавать\добавлять элементы в структуре 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, время: 22:47. |