Я всегда предпочитаю удобочитаемость, если только разница в производительности не является экстремальной. В единичном случае это, вероятно, будет незначительной разницей.
В единичном случае, подобном этому, установка свойства innerHTML
будет проще для чтения.
Но если вы много программно генерируете контент в JavaScript, вариант DOM чище и проще для чтения и понимания.
Пример:
Сравните этот код innerHTML
:
http://jsfiddle.net/P8m3K/1/
// Takes input of a value between 1 and 26, inclusive,
// and converts it to the appropriate character
function alphaToChar(alpha)
{
return String.fromCharCode('a'.charCodeAt() + alpha - 1);
}
var content = "<ul>";
for(i = 0; i < 10; ++i)
{
content += "<li>";
for(j = 1; j <= 26; ++j)
{
content += "<a href=\"" + alphaToChar(j) + ".html\">"
+ alphaToChar(j)
+ "</a>";
}
content += "</li>";
}
document.getElementById("foo").innerHTML = content;
К этому коду DOM:
http://jsfiddle.net/q6GB8/1/
// Takes input of a value between 1 and 26, inclusive,
// and converts it to the appropriate character
function alphaToChar(alpha)
{
return String.fromCharCode('a'.charCodeAt() + alpha - 1);
}
var list = document.createElement("ul");
for(i = 0; i < 10; ++i)
{
var item = document.createElement("li");
for(j = 1; j <= 26; ++j)
{
var link = document.createElement("a");
link.setAttribute("href", alphaToChar(j) + ".html");
link.innerText = alphaToChar(j);
item.appendChild(link);
}
list.appendChild(item);
}
document.getElementById("foo").appendChild(list);
На этом уровне они начинают становиться очень похожими по длине.
Но код DOM будет легче поддерживать, и у вас немного меньше шансов сделать опечатку или ошибку, которую трудно диагностировать, например, пропуск закрывающего тега. Либо ваши элементы будут в вашем документе, либо их не будет.
- С более сложными сценариями (такими как построение древовидных меню) вы, вероятно, выйдете вперед с кодом DOM.
- В сценариях, в которых вам нужно добавить несколько типов содержимого вместе, чтобы создать документ с более разнородным содержимым, это становится беспроигрышным вариантом. Вам не нужно гарантировать, что вы вызываете свой дочерний код добавления перед вызовом родительского кода добавления.
- В сценариях, где добавляют, удаляют или изменяют существующий статический контент, обычно выигрывает DOM.
Если вы начнете делать сложные модификации DOM (одна из последних вещей, которые я упомянул), вам определенно захочется проверить библиотеку, построенную на модификациях DOM, как jQuery.
person
Merlyn Morgan-Graham
schedule
11.12.2011
innerHTML('<p>Here is a brand new paragraph!</p>');
должно бытьinnerHTML = '<p>Here is a brand new paragraph!</p>';
я думаю? - person Merlyn Morgan-Graham   schedule 11.12.2011innerHTML
определенно не быстрее. Это ложное срабатывание старых браузеров (IE).document.createElement
теперь сильно оптимизирован для многих браузеров. См.: jsperf.com/dom-table-generation. - person   schedule 11.12.2011innerHTML
): owasp.org/index. php/DOM_based_XSS_Prevention_Cheat_Sheet - person   schedule 11.12.2011