document.write
document.write();
可以非常方便的把字符串插入到文檔里。
但書中對這個方法的評價并不是特別好,因為背離了行為與結構分離
的原則(我的理解就是HTML\CSS\JS腳本三者分離,CSS和JS均使用外部文件調用)。
document.write();
的使用方法一(內部):
document.write("<p>This is my blog!</p>");
document.write();
的使用方法二(外部文件調用):
//外部js腳本文件(定義一個inserP函數)
function inserP(text){
var str = "<p>"
str += text;
str += "</p>"
document.write(str);
//"+="是變量等于變量加上后面的值:如a+=2; 實則是a= a+2;
}
//html文件
<script scr="inserP.js">
<script>
inserP("This is my blog!");
</script>
但這種方法不容易閱讀和編輯,也無法享受行為與結構分離
的好處。
書中倡導,盡量少或者避免使用
document.write
方法。
innerHTML
如今的瀏覽器幾乎都已經支持innerHTML
,這個屬性并不是W3C DOM的標準組成部分,但現在已經包含到HTML5規范中了。始于IE4瀏覽器,從那時就逐漸的被其他瀏覽器接受。
innerHTML屬性可以用來讀寫某個指定元素里的HTML內容。
innerHTML是如何工作的。
如下面這段HTML:
<div id="testdiv">
<p>This is <em>my</em> content.</p>
</div>
用DOM的眼睛來看它們的結構(這個圖標我不知道怎么用markdown語言寫出來就直接貼圖):
但這個在innerHTML看來則簡單很多:
var divP = document.getElementById("testdiv");
alert(divP.innerHTML);
很明顯,innerHTML屬性沒有細節可言。要想獲得其中的細節,就必須使用DOM方法和屬性。便準化的DOM像手術刀一樣精細,而innerHTML就像大錘子一樣粗放。
如果需要在頁面中插入一大段HTML,innerHTML最合適不過了。它支持讀寫,只要讀取到元素的位置,就可以將內容寫進元素中,但是如果原來的元素中已經有內容了,這個屬性將替換掉原來的屬性。
<div id="testdiv">
<p>This is <em>my</em> content.</p>
</div>
<script type="text/javascript">
var divP = document.getElementById("testdiv");
divP.innerHTML = "<p style='color: red;'>This is my blog.</p>"
</script>
//最終結果是替換掉原來的內容,輸出紅色的This is my blog.
如果這個元素中內容為空,則直接插入。
<div id="testdiv">
</div>
<script type="text/javascript">
var divP = document.getElementById("testdiv");
divP.innerHTML = "<p style='color: red;'>This is my blog.</p>"
</script>
//最終結果是直接輸出紅色的This is my blog.
兩者對比
innerHTML屬性比document.write更推薦使用。innerHTML可以更好的把腳本和HTML分離出來,用不著在body中插入script標簽。
任何時候,DOM都可以用來替代innerHTML,雖然需要寫多寫代碼才能獲得同樣的效果,但DOM更精確更強大!