JavaScript判斷DOM何時載入完畢的技巧_javascript技巧
處理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 是否可用的函數
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 載入
身體>

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)
![在Illustrator中載入插件時出錯[修復]](https://img.php.cn/upload/article/000/465/014/170831522770626.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
啟動AdobeIllustrator時是否會彈出載入插件時出錯的訊息?一些Illustrator用戶在打開該應用程式時遇到了此錯誤。訊息後面緊跟著一系列有問題的插件。此錯誤提示表示已安裝的插件有問題,但也可能是由於VisualC++DLL檔案損壞或首選項檔案受損等其他原因所引起。如果遇到此錯誤,我們將在本文中指導您修復問題,請繼續閱讀以下內容。在Illustrator中載入外掛程式時出錯如果您在嘗試啟動AdobeIllustrator時收到「載入外掛程式時出錯」的錯誤訊息,您可以使用以下用途:以管理員身

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

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

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

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

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

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

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