1. 程式人生 > >談談document.ready和window.onload的區別

談談document.ready和window.onload的區別

在Jquery裡面,我們可以看到兩種寫法:$(function(){}) 和$(document).ready(function(){})

這兩個方法的效果都是一樣的,都是在dom文件樹載入完之後執行一個函式(注意,這裡面的文件樹載入完不代表全部檔案載入完)。

而window.onload是在dom文件樹載入完和所有檔案載入完之後執行一個函式。也就是說$(document).ready要比window.onload先執行。

那麼Jquery裡面$(document).ready函式的內部是怎麼實現的呢?下面我們就來看看:

我們來為document新增一個ready函式:

複製程式碼
     document.ready = function
(callback) { ///相容FF,Google if (document.addEventListener) { document.addEventListener('DOMContentLoaded', function () { document.removeEventListener('DOMContentLoaded', arguments.callee, false); callback(); },
false) } //相容IE else if (document.attachEvent) { document.attachEvent('onreadystatechange', function () {      if (document.readyState == "complete") {
                                document.detachEvent("onreadystatechange", arguments.callee);
                                callback();
                       } }) }
else if (document.lastChild == document.body) { callback(); } }
複製程式碼

document.ready這個函式是實現了。我們再來驗證一下最上面所說的“ready要比onload先執行”:

複製程式碼
   window.onload = function () {
            alert('onload');

        };

        document.ready(function () {
            alert('ready');

        });
複製程式碼

執行這段程式碼之後,你會看到瀏覽器裡面會先彈出“ready”,在彈出onload。