JS 中document.write()的用法和清空的原因淺析
可能很多朋友都遇到過這樣的情況,那就是使用document.write()函數(shù)向網(wǎng)頁中寫內(nèi)容的時候,會把文檔中的原來的內(nèi)容給清空,這一點對于初學(xué)者來說算是一個困擾,下面就介紹一下為什么會出現(xiàn)這種情況,當(dāng)然也就知道如何避免此種情況的發(fā)生了。
先看一段代碼實例:
<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <title>Document</title> <script type="text/javascript"> window.onload=function(){ document.write("重溫 JavaScript"); } </script> </head> <body> <div>Hello JavaScript</div> </body> </html>
從以上代碼的可以看出document.write()函數(shù)將原來的文檔內(nèi)容清空了,下面介紹一下出現(xiàn)此種情況的原因:
window.onload事件是在文檔內(nèi)容完全加載完畢再去執(zhí)行事件處理函數(shù),當(dāng)然文檔流已經(jīng)關(guān)閉了,這個時候執(zhí)行doucment.writ()函數(shù)會自動調(diào)用document.open()函數(shù)創(chuàng)建一個新的文檔流,并寫入新的內(nèi)容,再通過瀏覽器展現(xiàn),這樣就會覆蓋原來的內(nèi)容。不過很多朋友還有會這樣的疑問,為什么類似下面的情況,原來網(wǎng)頁中的內(nèi)容不會被覆蓋,代碼如下:
<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <title>Document</title> <script type="text/javascript"> document.write("重溫 JavaScript"); </script> </head> <body> <div>Hello JavaScript</div> </body> </html>
在以上代碼中,原來的文檔內(nèi)容并沒有被清空,這是因為當(dāng)前文檔流是由瀏覽器所創(chuàng)建,并且document.wirte()函數(shù)身處其中,也就是執(zhí)行此函數(shù)的時候文檔流并沒有被關(guān)閉,這個時候不會調(diào)用document.open()函數(shù)創(chuàng)建新文檔流,所以也就不會被覆蓋了。可能還有朋友會問為什么下面的方式還是不行,代碼如下:
<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <title>Document</title> <script type="text/javascript"> document.close(); document.write("重溫 JavaScript"); </script> </head> <body> <div>Hello JavaScript</div> </body> </html>
上面使用document.close()關(guān)閉文檔流了,為什么還是不能夠覆蓋原來的內(nèi)容的,很遺憾,文檔流是由瀏覽器創(chuàng)建,無權(quán)限手動關(guān)閉,document.close()函數(shù)只能夠關(guān)閉由document.open()函數(shù)創(chuàng)建的文檔流。看下面的代碼實例:
<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <title>Document</title> <script type="text/javascript"> function create(){ var newWindow=window.open("","Document","_blank"); newWindow.document.write("Hello JavaScript"); newWindow.document.close(); newWindow.document.write("覆蓋后的輸出"); } window.onload=function(){ var obt=document.getElementById("bt"); obt.onclick=function(){ create(); } } </script> </head> <body> <div id="print">Hello JavaScript</div> <input type="button" id="bt" value="查看效果"/> </body> </html>
由doucment.open()創(chuàng)建的文檔流就可以由document.close()關(guān)閉,那么第二個document.write()輸出的內(nèi)容會覆蓋掉第一個輸出的內(nèi)容。
異步引用外部JavaScript時,必須先運行document.open()清空文檔,然后才能運行document.write(),參數(shù)寫在body內(nèi)容的開頭。
如果不先運行document.open(),直接運行document.write(),則無效且Chrome有如下提示:
// asyncWrite.js document.open(); document.write('<p>test</p>'); document.close(); <!-- asyncWrite.html --> <!-- 運行前 --> <body> <script src="asyncWrite.js" async></script> </body> <!-- 運行后 --> <body> <p>test</p> </body>
document.write()也能寫入含有script標(biāo)簽的字符串,但是需要轉(zhuǎn)義。寫入的script標(biāo)簽中的內(nèi)容會正常運行。
<!-- 運行前 --> <script> document.write('<script>document.write("<p>test</p>");<\/script>'); </script> <!-- 運行后 --> <script> document.write('<script>document.write("<p>test</p>");<\/script>'); </script> <script>document.write("<p>test</p>");</script> <p>test</p>
document.write()可以傳入多個參數(shù)。
<!-- 運行前 --> <body> <script> document.write('<h2>multiArgument</h2>','<p>test</p>'); </script> </body> <!-- 運行后 --> <body> <script> document.write('<h2>multiArgument</h2>','<p>test</p>'); </script> <h2>multiArgument</h2> <p>test</p> </body>
總結(jié)
以上所述是小編給大家介紹的JS 中document.write()的用法和清空的原因淺析,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
javascript引用類型之時間Date和數(shù)組Array
引用類型的值(對象)其實就是引用類型的一個實例,接下來,通過本篇文章給大家介紹javascript引用類型之時間Date和數(shù)組Array,需要的朋友可以參考下2015-08-08JavaScript如何監(jiān)測數(shù)組的變化
最近在造輪子的時候遇到了這么一個問題,那就是數(shù)組在調(diào)用內(nèi)部方法的時候怎么才可以監(jiān)聽到數(shù)組發(fā)生了變化,這篇文章主要給大家介紹了關(guān)于JavaScript如何監(jiān)測數(shù)組變化的相關(guān)資料,需要的朋友可以參考下2021-07-07