国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

JavaScript判斷DOM何時加載完畢的技巧

2024-05-06 14:20:59
字體:
供稿:網(wǎng)友
處理HTML DOM文檔存在一個難題是,JavaScript可以在DOM完全加載之前執(zhí)行,這會給你的代碼引發(fā)不少的潛在問題。瀏覽器的渲染和操作順序大致如下列表:

HTML解析完畢
外部腳本和樣式表加載完畢
腳本在文檔內(nèi)解析并執(zhí)行
HTML DOM完全構(gòu)造起來
圖片和外部內(nèi)容加載
網(wǎng)頁完成加載

在網(wǎng)頁頭部并且從外部文件加載的腳本會在HTML真正構(gòu)造之前執(zhí)行。如前所述,這是個至關重要的問題,因為這兩處執(zhí)行的腳本并不能訪問還不存在的DOM。幸好,我們還有若干的補救方法。
目前,最常用的級數(shù)是完全等待整個頁面加載完畢才執(zhí)行DOM操作。這種技術(shù)只需利用window對象的load事件來綁定一個函數(shù),頁面加載完畢即可觸發(fā)。
代碼如下:
addEvent(window, "load", function(){
// do something
});

最簡單的操作卻是最慢的。在加載過程的順序列表中,你會注意到頁面的加載完畢與否完全被最后一步所掌控。這就是說,如果頁面有很多的圖片、視頻等,用戶可能得登上一段時間JavaScript才執(zhí)行。
另一種級數(shù)可用以監(jiān)聽 DOM 加載狀態(tài),可能是最復雜的(從實現(xiàn)角度來看),但也是最有效地。
這項技術(shù)在不堵塞瀏覽器加載的情況下盡可能快地檢查 HTML DOM文檔是否已經(jīng)加載了執(zhí)行所必須得屬性。以下是檢查HTML DOM是否可用的幾個要點:

document: 你需要知道DOM文檔是否已經(jīng)加載。若能足夠快地檢查,運氣好的話你會看到undefined。
document.getElementsByTagName和document.getElementById:頻繁使用document.getElementsByTagName和document.getElementById函數(shù)檢查文檔,當存在這些函數(shù)則表明DOM已經(jīng)加載完畢。
document.body: 作為額外補充,檢查元素是否已經(jīng)完全加載。理論上前一個檢查應該已經(jīng)能做出判斷,但我發(fā)現(xiàn)有些情況下還是不夠。
使用這些檢查就足夠判斷DOM是否可用了(“足夠”在此表示可能會有一定毫秒級的時間差)。這個方法幾乎沒有瑕疵。單獨使用前述檢查,腳本應該可以在現(xiàn)代瀏覽器中運行得相對良好。但是,最近(2008年?)Firefox實現(xiàn)了緩存改進,使得window加載事件實際上可以在腳本能檢查到DOM是否可用之前觸發(fā)。為了能發(fā)揮這個優(yōu)勢,我同時為window加載事件附加檢查,以期能獲得更快的執(zhí)行速度。

最后,domReady函數(shù)集合了所有需要在DOM可用時就執(zhí)行的函數(shù)的引用。一旦DOM被認為是可用的,就調(diào)用這些引用并按順序一一執(zhí)行。
代碼如下:
// 監(jiān)聽 DOM 是否可用的函數(shù)
function domReady(f) {
// 假如DOM已經(jīng)加載,馬山執(zhí)行函數(shù)
if(domReady.done) return f();

// 假如我們已經(jīng)增加了一個函數(shù)
if(domReady.timer) {
// 把它假如待執(zhí)行函數(shù)清單中
domReady.ready.push(f);
} else {
// 為頁面加載完畢綁定一個事件,以防它最先完成。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 仁怀市| 榆社县| 明光市| 安阳县| 龙口市| 博客| 来凤县| 平乡县| 息烽县| 宁强县| 文水县| 普格县| 玉林市| 泸西县| 竹溪县| 鲁山县| 东乡族自治县| 舟曲县| 翁源县| 呼和浩特市| 铁力市| 扶绥县| 乌苏市| 霍邱县| 长汀县| 黑水县| 偏关县| 福安市| 即墨市| 黔江区| 雷波县| 屏南县| 孙吴县| 承德县| 新和县| 大厂| 台前县| 教育| 滨海县| 海林市| 松原市|