JS 中document.write()的用法和清空的原因淺析
可能很多朋友都遇到過(guò)這樣的情況,那就是使用document.write()函數(shù)向網(wǎng)頁(yè)中寫(xiě)內(nèi)容的時(shí)候,會(huì)把文檔中的原來(lái)的內(nèi)容給清空,這一點(diǎn)對(duì)于初學(xué)者來(lái)說(shuō)算是一個(gè)困擾,下面就介紹一下為什么會(huì)出現(xiàn)這種情況,當(dāng)然也就知道如何避免此種情況的發(fā)生了。
先看一段代碼實(shí)例:
<!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ù)將原來(lái)的文檔內(nèi)容清空了,下面介紹一下出現(xiàn)此種情況的原因:
window.onload事件是在文檔內(nèi)容完全加載完畢再去執(zhí)行事件處理函數(shù),當(dāng)然文檔流已經(jīng)關(guān)閉了,這個(gè)時(shí)候執(zhí)行doucment.writ()函數(shù)會(huì)自動(dòng)調(diào)用document.open()函數(shù)創(chuàng)建一個(gè)新的文檔流,并寫(xiě)入新的內(nèi)容,再通過(guò)瀏覽器展現(xiàn),這樣就會(huì)覆蓋原來(lái)的內(nèi)容。不過(guò)很多朋友還有會(huì)這樣的疑問(wèn),為什么類(lèi)似下面的情況,原來(lái)網(wǎng)頁(yè)中的內(nèi)容不會(huì)被覆蓋,代碼如下:
<!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>
在以上代碼中,原來(lái)的文檔內(nèi)容并沒(méi)有被清空,這是因?yàn)楫?dāng)前文檔流是由瀏覽器所創(chuàng)建,并且document.wirte()函數(shù)身處其中,也就是執(zhí)行此函數(shù)的時(shí)候文檔流并沒(méi)有被關(guān)閉,這個(gè)時(shí)候不會(huì)調(diào)用document.open()函數(shù)創(chuàng)建新文檔流,所以也就不會(huì)被覆蓋了??赡苓€有朋友會(huì)問(wèn)為什么下面的方式還是不行,代碼如下:
<!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)閉文檔流了,為什么還是不能夠覆蓋原來(lái)的內(nèi)容的,很遺憾,文檔流是由瀏覽器創(chuàng)建,無(wú)權(quán)限手動(dòng)關(guān)閉,document.close()函數(shù)只能夠關(guān)閉由document.open()函數(shù)創(chuàng)建的文檔流??聪旅娴拇a實(shí)例:
<!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)閉,那么第二個(gè)document.write()輸出的內(nèi)容會(huì)覆蓋掉第一個(gè)輸出的內(nèi)容。
異步引用外部JavaScript時(shí),必須先運(yùn)行document.open()清空文檔,然后才能運(yùn)行document.write(),參數(shù)寫(xiě)在body內(nèi)容的開(kāi)頭。
如果不先運(yùn)行document.open(),直接運(yùn)行document.write(),則無(wú)效且Chrome有如下提示:

// asyncWrite.js
document.open();
document.write('<p>test</p>');
document.close();
<!-- asyncWrite.html -->
<!-- 運(yùn)行前 -->
<body>
<script src="asyncWrite.js" async></script>
</body>
<!-- 運(yùn)行后 -->
<body>
<p>test</p>
</body>
document.write()也能寫(xiě)入含有script標(biāo)簽的字符串,但是需要轉(zhuǎn)義。寫(xiě)入的script標(biāo)簽中的內(nèi)容會(huì)正常運(yùn)行。
<!-- 運(yùn)行前 -->
<script>
document.write('<script>document.write("<p>test</p>");<\/script>');
</script>
<!-- 運(yùn)行后 -->
<script>
document.write('<script>document.write("<p>test</p>");<\/script>');
</script>
<script>document.write("<p>test</p>");</script>
<p>test</p>
document.write()可以傳入多個(gè)參數(shù)。
<!-- 運(yùn)行前 -->
<body>
<script>
document.write('<h2>multiArgument</h2>','<p>test</p>');
</script>
</body>
<!-- 運(yùn)行后 -->
<body>
<script>
document.write('<h2>multiArgument</h2>','<p>test</p>');
</script>
<h2>multiArgument</h2>
<p>test</p>
</body>
總結(jié)
以上所述是小編給大家介紹的JS 中document.write()的用法和清空的原因淺析,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
JavaScript實(shí)現(xiàn)與使用發(fā)布/訂閱模式詳解
這篇文章主要介紹了JavaScript實(shí)現(xiàn)與使用發(fā)布/訂閱模式,較為詳細(xì)的分析了發(fā)布/訂閱模式的概念、原理并結(jié)合實(shí)例形式分析了javascript實(shí)現(xiàn)與使用發(fā)布/訂閱模式的相關(guān)操作技巧,需要的朋友可以參考下2019-01-01
js實(shí)現(xiàn)html滑動(dòng)圖片拼圖驗(yàn)證
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)html滑動(dòng)圖片拼圖驗(yàn)證,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06
JavaScript異步操作的幾種常見(jiàn)處理方法實(shí)例總結(jié)
這篇文章主要介紹了JavaScript異步操作的幾種常見(jiàn)處理方法,結(jié)合實(shí)例形式總結(jié)分析了JavaScript常見(jiàn)的異步操作處理方法相關(guān)實(shí)現(xiàn)技巧與注意事項(xiàng),需要的朋友可以參考下2020-05-05
微信小程序?qū)崿F(xiàn)短信登錄的實(shí)戰(zhàn)
項(xiàng)目要求增加短信登錄及人臉識(shí)別登錄功能,本文就來(lái)實(shí)現(xiàn)一下 短信登錄功能,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10
js substr支持中文截取函數(shù)代碼(中文是雙字節(jié))
js substr支持中文截取函數(shù)代碼,中文是雙字節(jié),配有實(shí)例需要的朋友可以參考下2013-04-04
原生JS發(fā)送異步數(shù)據(jù)請(qǐng)求
這篇文章主要為大家詳細(xì)介紹了原生JS發(fā)送異步數(shù)據(jù)請(qǐng)求的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
JavaScript獲取當(dāng)前url根目錄(路徑)
本文主要介紹JavaScript獲取當(dāng)前url根目錄的方法,比較實(shí)用,需要的朋友可以參考一下。2016-06-06
javascript性能優(yōu)化之DOM交互操作實(shí)例分析
這篇文章主要介紹了javascript性能優(yōu)化之DOM交互操作技巧,結(jié)合實(shí)例形式總結(jié)分析了JavaScript針對(duì)DOM操作過(guò)程中的各種常見(jiàn)優(yōu)化操作技巧,需要的朋友可以參考下2015-12-12

