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