相信很多初學JavaScript的小伙伴們都有用到document.write(),
它的基本作用:就是向文檔中寫入HTML表達式和JavaScript的代碼。
基本語法:
document.write(exp1,exp2,exp3,....);
支持輸入多個字符串參數(shù)(其他類型會轉(zhuǎn)為字符串格式輸出);
用法還是相對比較簡單,但是很多同學在使用的過程中,就會發(fā)現(xiàn)某些特定的情況下,使用document.write()向文檔中寫入內(nèi)容時,document.write()中的內(nèi)容會將文檔中的原本內(nèi)容給覆蓋掉,對于初學JS的朋友來說可能摸不著頭腦,下面就針對這個問題,做下簡單的探討。
代碼如下:
由以上代碼可以發(fā)現(xiàn)一下兩種情況:
為什么會出現(xiàn)這兩種不同的情況呢?
這和頁面中的文檔流是否閉合有有一定的關(guān)系,接下來我們就針對這兩種情況做一下介紹。
首先,了解文檔流的同學都知道,頁面第一次打開時,瀏覽器會自上而下讀取頁面內(nèi)容,
所以當頁面加載到時,此時的文檔流還沒有關(guān)閉,所以document.write()方法中的內(nèi)容會拼接到文檔流中也就是情況一的由來。
之后繼續(xù)加載JS,為button按鈕綁定了一個點擊事件,此后頁面加載完畢,文檔流就閉合了。
當我們點擊button按鈕時,執(zhí)行對應的函數(shù)內(nèi)容時,由于頁面初始的文檔流已經(jīng)關(guān)閉,所以document.write() 會調(diào)用document.open()創(chuàng)建一個新的文檔流,并將document.write()中的內(nèi)容寫入到新的文檔流中,這樣新的文檔流就會覆蓋原本已加載的文檔流,也就是情況二的由來。
總結(jié)如下:
1. 頁面加載時,瀏覽器默認創(chuàng)建的文檔流自上而下會讀取整個頁面內(nèi)容,此時document.write()中的內(nèi)容會直接寫入到當前文檔流中(注:此時document.write()并不會觸發(fā)document.open()方法創(chuàng)建新的文檔流)。
2. 頁面加載完畢,文檔流已經(jīng)閉合,再使用document.write則會先執(zhí)行document.open()創(chuàng)建一個新文檔流,這個新文檔流將會覆蓋替換掉之前的文檔流.