$(document).ready()與 window.onload執行時機


  $(document).ready()方法和window.onload方法有相似的功能,但是在執行時機方面是有區別的。window.onload方法是子啊網頁中的所有元素(包括元素的所有關聯的文件)完全加載到瀏覽器后才執行,即javascript此可以訪問網頁中的任何元素。而通過jquery中的$(document).ready()方法注冊的時間處理程序,在DOM完全就緒時就可以被調用。此時,網頁的所有元素對jquery而言都是可以訪問的,但是,這並不意味着這些元素關聯的文件都已經下載完畢。

  舉一個例子,有一個大型的圖庫網站,為網頁中的所有圖片添加某些行為,例如單機圖片后讓他隱藏或顯示。如果使用window.onload方法來處理,那么用戶必須等到每一副圖片都加載完畢后,才可以進行操作。如果使用jquery中的$(document).ready()方法來進行設置,只要DOM就緒就可以操作了,不需要等待所有圖片加載完畢。顯然,吧網頁解析為DOM樹的速度比吧網頁中的所有關聯文件加載完畢的素的快很多。

  另外,需要注意一點,由於在$(document).ready()方法內注冊的事件,只要DOM就緒就會被執行,因此可能此時元素的關聯文件未下載完。例如與圖片有關的HTML下載完畢,並且已經即誒下為DOM樹了,但很有可能圖片還未加載完畢,所有例如圖片的高度和寬度這樣的屬性此時比一定有效。要解決這個問題,可以使用Jquery中另一個關於頁面加載的方法-----load()方法。load()方法會在元素的onload事件中綁定一個處理函數。如果處理函數綁定給window對象,則會在所有內容(包括窗口。框架,對象和圖像等)加載完畢后觸發,如果處理函數綁定在元素上,則會在元素的被容加載完畢后加載。jquery代碼如下:

$(window).load(function(){
//代碼

});

  等價於javascript中的以下代碼:

window.onload=function(){
    
//代碼
}

 

 

例如1:時間加載對比:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script src="../../scripts/jquery-1.3.1.js" type="text/javascript"></script>
<script type="text/javascript">
   var startTime = new Date().getTime();
   $(document).ready(function(){
		test1();
  })
	
  function test1(){
      var endTime2  = new Date().getTime(); 
	  var a = endTime2 - startTime;
	  $("<div>jQuery的ready() : "+a+" ms</div>").appendTo("body");
  }

  function test2(){
       var endTime1  = new Date().getTime();
	   var b = endTime1 - startTime;
	   $("<p>JavaScript的window.onload : "+b+" ms</p>").appendTo("body");
  }
</script>
</head>
<body  onload="test2();">
	<img src="demo.jpg" style="width:200px;height:200px;"/>
</body>
</html>

  

 

 

 

 

window.onload

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script type="text/javascript">
 function one(){
   alert("one");
 }
 function two(){
   alert("two");
 } 
 window.onload = one ;
 window.onload = two ;
</script>
</head>
<body>

</body>
</html>

  

document.ready

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script src="../../scripts/jquery-1.3.1.js" type="text/javascript"></script>
<script type="text/javascript">
  function one(){
   alert("one");
 }
 function two(){
   alert("two");
 } 
  $(document).ready(function(){
      one();
  })
  $(document).ready(function(){
      two();
  })
</script>

</head>
<body>

</body>
</html>

 

 

 

出處:鋒利的jquery第二版 P99


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM