国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

jQuery的Read()方法代替原生JS詳解

來源:懂視網 責編:小采 時間:2020-11-27 20:28:51
文檔

jQuery的Read()方法代替原生JS詳解

jQuery的Read()方法代替原生JS詳解:在jQuery 3.0的版本前, ready經典用法是用一個匿名函數,像這樣:$(document).ready(function() { // Handler for .ready() called. }); jQuery 3.0 ready() 變化在jQuery 3.0發布之前,有以下幾種方法稱之為ready方法: 在docume
推薦度:
導讀jQuery的Read()方法代替原生JS詳解:在jQuery 3.0的版本前, ready經典用法是用一個匿名函數,像這樣:$(document).ready(function() { // Handler for .ready() called. }); jQuery 3.0 ready() 變化在jQuery 3.0發布之前,有以下幾種方法稱之為ready方法: 在docume

在jQuery 3.0的版本前, ready經典用法是用一個匿名函數,像這樣:

$(document).ready(function() {
 // Handler for .ready() called.
});

jQuery 3.0 ready() 變化

在jQuery 3.0發布之前,有以下幾種方法稱之為ready方法:

在document元素上操作: $(document).ready(handler);

在空元素上操作: $().ready(handler);

或者直接(即不在一個具體的元素上)操作: $(handler);

上述所有命名的變種在功能上是等價的。無論是哪個元素,在DOM加載完畢之后其指定的處理程序都將會被調用。換句話說,這里的DOM加載完畢并不表示在文檔中的某個具體的元素,比如img元素,加載完畢。相反,這里表示的是整個DOM樹加載完畢。

在jQuery 3.0中,除了$(handler) 其他的ready方法都被棄用。

官方聲明為此:

這是因為選擇器并沒有和ready()建立聯系,不僅低效而且會導致瀏覽器引擎對該方法的行為進行不正確的假設。

ready 事件和 load 事件的區別

當DOM加載完畢且元素能夠被安全訪問時就會觸發ready事件。另一方面,load事件卻在DOM和所有資源加載后觸發。

可以像下面這樣使用load事件:

$(window).on("load", function(){
 // Handler when all assets (including images) are loaded
});

這樣的話,不僅僅要等到DOM結構能完全訪問,而且還需要等到所有的圖片資源完全加載完畢(加載時間取決于圖片文件大?。┎拍軋绦泻瘮?。

正常的DOM操作你可能不需要load事件,但是如果你想要在所有的資源被加載完畢之前展示一個旋轉的加載器樣式,比如,又或者你想要用JS計算一下圖片的大小,這可能是一個好的選擇。

你可能不需要jQuery.ready()

ready 方法可以確保代碼只在所有DOM元素能被安全操縱時才執行。 但這意味著什么呢?這意味著當你要執行的js代碼嵌在HTML中某個片段中時,瀏覽器也要加載完以下元素才能執行。

就像下面這個例子一樣:

<!doctype html>
<html>
 <head>
 <meta charset="utf-8">
 <title>.ready() tutorial</title>
 <script src="https://cdn.jsdelivr.net/jquery/latest/jquery.min.js"></script>
 <script>
 $(function(){ // .ready() callback, is only executed when the DOM is fully loaded
 var length = $("p").length;
 // The following will log 1 to the console, as the paragraph exists.
 // This is the evidence that this method is only called when the
 // DOM is fully loaded
 console.log(length);
 });
 </script>
 </head>
 <body>
 <p>I'm the content of this website</p>
 </body>
</html>

如果你要執行的javascript代碼放在body末尾,你就可能不需要使用ready()方法,因為瀏覽器解析到javascript時你可能試圖操縱和訪問的DOM元素已經被加載完了:

<!doctype html>
<html>
 <head>
 <meta charset="utf-8">
 <title>.ready() tutorial</title>
 </head>
 <body>
 <p>I'm the content of this website</p>
 <script src="https://cdn.jsdelivr.net/jquery/latest/jquery.min.js"></script>
 <script>
 var length = $("p").length;
 // The following will log 1 to the console, as the paragraph exists.
 console.log(length);
 </script>
 </body>
</html>

原生JavaScript ready()替代

對于現代瀏覽器以及IE9+,你可以通過監聽 DOMContentLoaded 事件實現ready()相同的功能:

document.addEventListener("DOMContentLoaded", function(){
 // Handler when the DOM is fully loaded
});

但是,請注意,如果事件已經發射,回調將不會被執行。為了確?;卣{總是運行,jQuery檢查文檔reference)的“readyState”屬性,如果屬性值變為 complete,則立即執行回調函數:

var callback = function(){
 // Handler when the DOM is fully loaded
};
 
if (
 document.readyState === "complete" ||
 (document.readyState !== "loading" && !document.documentElement.doScroll)
) {
 callback();
} else {
 document.addEventListener("DOMContentLoaded", callback);
}

包括domReady庫,已經實現了這個解決方案。

老版本的IE瀏覽器

對于IE8及以下的瀏覽器,你能使用onreadystatechange 事件去監聽文檔的readyState 屬性:

document.attachEvent("onreadystatechange", function(){
 // check if the DOM is fully loaded
 if(document.readyState === "complete"){
 // remove the listener, to make sure it isn't fired in future
 document.detachEvent("onreadystatechange", arguments.callee);
 // The actual handler...
 }
});

或者你可以使用Load事件,如jQuery,這樣可以在任何瀏覽器上運行。這也會導致一個時間延遲,因為它會等待所有的資產被加載。

注意,在這個解決方案中你也要檢查readyState,如上文所述,這樣能確保回調總是能夠被執行。

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

jQuery的Read()方法代替原生JS詳解

jQuery的Read()方法代替原生JS詳解:在jQuery 3.0的版本前, ready經典用法是用一個匿名函數,像這樣:$(document).ready(function() { // Handler for .ready() called. }); jQuery 3.0 ready() 變化在jQuery 3.0發布之前,有以下幾種方法稱之為ready方法: 在docume
推薦度:
標簽: 方法 () read
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 国产 日韩 欧美 综合 | 日本高清一区二区三区不卡免费 | 亚洲视频一二区 | 欧美性野久久久久久久久 | 亚洲国产精品二区久久 | 欧美日韩精品一区二区在线播放 | 黄色毛片在线观看 | 亚洲男女网站 | 欧美人与动性xxxxx杂性 | 欧美精品国产综合久久 | 在线观看国产欧美 | 青青国产成人久久91网 | 国产亚洲欧美一区二区 | 视频日韩p影院永久免费 | 亚洲精品国产成人99久久 | 一区二区三区精品 | 在线观看亚洲一区二区 | 久久频道毛片免费不卡片 | 91久久| 日韩欧美综合视频 | 精品视频一区二区三区四区五区 | 国产精品一区二区综合 | 精品久久中文网址 | 欧美日韩激情 | 久久久91精品国产一区二区 | 国产成人久久精品一区二区三区 | 日韩va亚洲va欧美va浪潮 | 欧美人禽杂交狂配 | 久久久精品久久久久久久久久久 | 亚洲综合一区二区精品久久 | 在线国产一区二区三区 | 国产精品亚洲精品日韩动图 | 久久91精品国产91久久小草 | 久久久久久综合成人精品 | 国产日韩视频 | 亚洲国产成人久久99精品 | 激情自拍网 | 天堂va欧美ⅴa亚洲va一国产 | 国产成人免费高清激情明星 | 日本免费一区尤物 | 日韩精品 欧美 |