目錄
測試DOM 載入
首頁 web前端 js教程 JavaScript判斷DOM何時載入完畢的技巧_javascript技巧

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

May 16, 2016 pm 05:48 PM
dom 判斷 載入

處理HTML DOM文件有一個難題是,JavaScript可以在DOM完全載入之前執行,這會為你的程式碼引發不少潛在的問題。瀏覽器的渲染和操作順序大致如下列表:

HTML解析完畢
外部腳本和樣式表加載完畢
腳本在文檔內解析並執行
HTML DOM完全建構
圖片和外部內容載入
網頁完成載入

在網頁頭部並且從外部文件載入的腳本會在HTML真正建構之前執行。如前所述,這是個至關重要的問題,因為這兩個執行的腳本並不能存取還不存在的DOM。幸好,我們還有若干的補救方法。
目前,最常用的級數是完全等待整個頁面載入完畢才執行DOM操作。這種技巧只需利用window物件的load事件來綁定一個函數,頁面載入完畢即可觸發。

複製程式碼 程式碼如下:

addEvent(window, "load", function(){
// do something
});

最簡單的操作卻是最慢的。在載入過程的順序清單中,你會注意到頁面的載入完畢與否完全被最後一步所掌控。這就是說,如果頁面有很多的圖片、影片等,使用者可能得登上一段時間JavaScript才執行。
另一個級數可用以監聽 DOM 載入狀態,可能是最複雜的(從實作角度來看),但也是最有效地。
這項技術在不堵塞瀏覽器載入的情況下盡可能快速地檢查 HTML DOM文件是否已經載入了執行所必須得屬性。以下是檢查HTML DOM是否可用的幾個要點:

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

最後,domReady函數集合了所有需要在DOM可用時就執行的函數的參考。一旦DOM被認為是可用的,就呼叫這些引用並按順序一一執行。
複製程式碼 程式碼如下:

// 監聽DOM 是否可用的函數// 假如DOM已經加載,馬山執行函數
if(domReady.done) return f();

// 假如我們已經增加了一個函數
if(domReady.timer) {
// 把它假如待執行函數清單中
domReady.ready.push(f);
} else {
// 為頁面載入完畢綁定一個事件,以防它最先完成。
addEvent(window, "load", isDOMReady);
// 初始化執行函數的陣列
domReady.ready = [f];
// 盡可能快的檢查DOM是否已可用
domReady.timer = setInterval(isDOMReady, 13);
}
}

// 檢查DOM 是否已可操作
function isDOMReady() { 能判斷DOM已可能,忽略
if(domReady.done) return false;

// 檢查若干函數和元素是否可能
if(document &&getdocument.getElementsByTagName && document. document.body) {
// 如果可用,我們停止檢查
clearInterval(domReady.timer);
domReady.timer = null;

// 執行所有正在等待的函數
for(var i = 0; i domReady.ready[i]();
// 記錄我們在此已經完成
domReady.ready = null;
domReady.done = true;
}
}
}


現在我們來看看在HTML文件中是如何執行的。假設已經將domReady函數寫到一個名為domready.js的外部檔案


複製程式碼 程式碼如下:



測試DOM 載入


domReady(function(){
alert("DOM 已載入!");
// 執行某些操作
});
腳本>
頭>

測試DOM 載入



身體>

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1318
25
PHP教程
1269
29
C# 教程
1248
24
在Illustrator中載入插件時出錯[修復] 在Illustrator中載入插件時出錯[修復] Feb 19, 2024 pm 12:00 PM

啟動AdobeIllustrator時是否會彈出載入插件時出錯的訊息?一些Illustrator用戶在打開該應用程式時遇到了此錯誤。訊息後面緊跟著一系列有問題的插件。此錯誤提示表示已安裝的插件有問題,但也可能是由於VisualC++DLL檔案損壞或首選項檔案受損等其他原因所引起。如果遇到此錯誤,我們將在本文中指導您修復問題,請繼續閱讀以下內容。在Illustrator中載入外掛程式時出錯如果您在嘗試啟動AdobeIllustrator時收到「載入外掛程式時出錯」的錯誤訊息,您可以使用以下用途:以管理員身

PHP郵件偵測:判斷郵件是否已傳送成功。 PHP郵件偵測:判斷郵件是否已傳送成功。 Sep 19, 2023 am 09:16 AM

PHP郵件偵測:判斷郵件是否已傳送成功。在開發網頁應用程式時,經常需要發送電子郵件來與使用者溝通,無論是註冊確認、密碼重設或發送通知,郵件功能都是不可或缺的一部分。但是,有時我們無法確保郵件是否真正發送成功,因此我們需要進行郵件檢測以及判斷郵件是否已成功發送。本文將介紹如何使用PHP來實現這個功能。一、使用SMTP伺服器發送郵件首先,我們需要使用SM

Stremio字幕不工作;載入字幕時出錯 Stremio字幕不工作;載入字幕時出錯 Feb 24, 2024 am 09:50 AM

字幕在你的WindowsPC上不能在Stremio上運行嗎?一些Stremio用戶報告說,影片中沒有顯示字幕。許多用戶報告說他們遇到了一條錯誤訊息,上面寫著「載入字幕時出錯」。以下是與此錯誤一起顯示的完整錯誤訊息:載入字幕時出錯載入字幕失敗:這可能是您正在使用的插件或您的網路有問題。正如錯誤訊息所說,可能是您的網路連線導致了錯誤。因此,請檢查您的網路連接,並確保您的網路運作正常。除此之外,這個錯誤的背後可能還有其他原因,包括字幕加載項衝突、特定影片內容不支援字幕以及Stremio應用程式過時。如

使用java的Character.isDigit()函數判斷字元是否為數字 使用java的Character.isDigit()函數判斷字元是否為數字 Jul 27, 2023 am 09:32 AM

使用Java的Character.isDigit()函數判斷字元是否為數字字元在電腦內部以ASCII碼的形式表示,每個字元都有一個對應的ASCII碼。其中,數字字元0到9分別對應的ASCII碼值為48到57。要判斷一個字元是否為數字,可以使用Java中的Character類別提供的isDigit()方法來判斷。 isDigit()方法是Character類別的

使用java的File.isDirectory()函數判斷檔案是否存在且為目錄類型 使用java的File.isDirectory()函數判斷檔案是否存在且為目錄類型 Jul 24, 2023 pm 06:57 PM

使用java的File.isDirectory()函數判斷檔案是否存在且為目錄類型在Java程式設計中,常常會遇到需要判斷一個檔案是否存在且為目錄類型的情況。 Java提供了File類別來操作檔案和目錄,其中的isDirectory()函數可以幫助我們判斷一個檔案是否是目錄類型。 File.isDirectory()函數是File類別中的一個方法,其作用是判斷目前Fil

PHP實作無限滾動加載 PHP實作無限滾動加載 Jun 22, 2023 am 08:30 AM

隨著互聯網的發展,越來越多的網頁需要支援滾動加載,而無限滾動加載是其中的一種。它可以讓頁面不斷載入新的內容,使用戶可以更流暢地瀏覽網頁。在這篇文章中,我們將介紹如何使用PHP實現無限滾動載入。一、什麼是無限滾動載入?無限滾動載入是一種基於捲軸的網頁內容載入方式。它的原理是當使用者捲動至頁面底部時,透過AJAX非同步調取後台數據,實現不斷載入新的內容。這種載入方

如何使用Double類別的isInfinite()方法判斷一個數是否為無限大 如何使用Double類別的isInfinite()方法判斷一個數是否為無限大 Jul 24, 2023 am 10:10 AM

如何使用Double類別的isInfinite()方法判斷一個數是否為無限大在Java中,Double類別是用來表示浮點數的包裝類別。此類別提供了一系列方法,可以方便地對浮點數進行操作。其中,isInfinite()方法就是用來判斷一個浮點數是否為無限大的方法。無窮大是指大到超出了浮點數所能表示的範圍的正無窮和負無窮。在計算機中,浮點數的最​​大值可以通過Double類

css載入不出來怎麼解決 css載入不出來怎麼解決 Oct 20, 2023 am 11:29 AM

css載入不出來的解決辦法有檢查檔案路徑、檢查檔案內容、清除瀏覽器快取、檢查伺服器設定、使用開發者工具和檢查網路連線等。詳細介紹:1、檢查檔案路徑,首先請確保CSS檔案的路徑正確,如果CSS檔案位於網站的不同部分或子目錄中,需要提供正確的路徑,如果CSS檔案位於根目錄下,路徑應該是直接的;2、檢查文件內容,如果路徑正確,那麼問題可能出在CSS文件本身,開啟CSS文件檢查等等。

See all articles