国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

javascript - 請(qǐng)問(wèn)DOM樹(shù)是如何加載的?
天蓬老師
天蓬老師 2017-05-19 10:42:33
0
2
576

javascript高級(jí)程序設(shè)計(jì)講到IE中的錯(cuò)誤時(shí)提到操作中止(operation shorted)這個(gè)概念:

在修改尚未加載完成的頁(yè)面會(huì)發(fā)生錯(cuò)誤。

示例代碼為:

<body>
    <p></p>
    <p>
        <script>
            document.body.appendChild(document.createElement("p"));
        </script>
    </p>
</body>

當(dāng)<script>被包含在某元素中,且JS代碼要使用DOM方法修改其父元素或祖先元素,會(huì)發(fā)生操作中止錯(cuò)誤(因?yàn)橹荒苄薷囊呀?jīng)加載完的元素)。

而改為

document.body.insertChild(document.createElement("p"),document.body.firstChild);

就能避免錯(cuò)誤。

說(shuō)是新<p>添加到document.body開(kāi)頭而不是末尾,就沒(méi)有錯(cuò)誤。


看了過(guò)后就不太理解文檔是如何加載的,為什么插在body開(kāi)頭就行,插在后面就不行。

天蓬老師
天蓬老師

歡迎選擇我的課程,讓我們一起見(jiàn)證您的進(jìn)步~~

全部回復(fù)(2)
曾經(jīng)蠟筆沒(méi)有小新

瀏覽器加載頁(yè)面時(shí),碰到 js 代碼會(huì)進(jìn)行加載和解析,這時(shí)候就會(huì)中止其他代碼的解析和渲染。這就是為什么我們一般把 js 代碼放在頁(yè)面尾部的原因,不組織頁(yè)面文檔結(jié)構(gòu)的加載,而且可以對(duì)所有的 DOM 元素進(jìn)行操作。

上面代碼中,在執(zhí)行那一句 js 代碼時(shí),整個(gè)頁(yè)面的 html 結(jié)構(gòu)還沒(méi)有加載完成,所以瀏覽器并不知道 body 的末尾位置,而 body 開(kāi)頭位置已經(jīng)確定了,所以新 p 可以添加到開(kāi)頭而不能添加到結(jié)尾。

小葫蘆

DOM文檔加載的步驟
1 解析HTML結(jié)構(gòu)。
2 加載外部腳本和樣式表文件。
3 解析并執(zhí)行腳本代碼。
4 構(gòu)造HTML DOM模型。//DOMContentLoaded
5 加載圖片等外部文件。
6 頁(yè)面加載完畢。//load

理論上是這樣,但實(shí)際還要考慮文檔內(nèi)容的位置,由于是從上到下解析,遇到j(luò)s會(huì)阻塞渲染進(jìn)行js解析和執(zhí)行。

你所說(shuō)的問(wèn)題,我猜測(cè)是因?yàn)閳?zhí)行時(shí)body的前部已經(jīng)渲染,而尾部未渲染導(dǎo)致的,就是不知道往哪插入尾部。

由于現(xiàn)代瀏覽器對(duì)DOM操作的優(yōu)化,我在chrome上已經(jīng)測(cè)試不出錯(cuò)誤,兩種都可以,所以沒(méi)必要太過(guò)在意這個(gè)問(wèn)題了,只要記得順序渲染,js放底部就行。

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板