我是靠谱客的博主 粗犷招牌,最近开发中收集的这篇文章主要介绍怎样提取jQuery.ready(),DOM加载完毕执行onDOMReady()方法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在大部分中,需要在树载入时马上执行一些函数,但又不愿意仅为了这一个需求而引入整个库,于是就把jQuery的方法提取出来,单独使用了。

当然大家可以使用windows.onload事件, 但onload在看来,就是页面上的东西(img,iframe等资源)全部都加载完毕后才能发生,

如果页面内有大的图片的话,会在页面展现后好久时间后才执行。

如果只需要对DOM进行操作,那么这时就没必要等到页面全部加载了。我们需要更快的方法。

Firefox有DOMContentLoaded事件可以轻松解决,可惜的就是IE没有。

MSDN关于JSCRIPT的一个方法有段不起眼的话,当页面DOM未加载完成时,调用doScroll方法时,会产生异常。

那么我们反过来用,如果不异常,那么就是页面DOM加载完毕了!

所以 对于Mozilla & Opera 浏览器,在dom树载入后有现成的 DOMContentLoaded 事件

对于Safari 浏览器,有document.onreadystatechange事件,

当该触发时,如果 document.readyState=complete时,可视为dom树已经载入

对于ie,当在iframe内时,同样有document.onreadystatechange事件,

对于ie在非iframe内时,只有不断地通过能否执行doScroll判断dom是否加载完毕。

在本例中每间隔5毫秒尝试去执行 document.documentElement.doScroll('left')

另外要注意一点:PDF目录在ie8下,貌视非iframe窗口也会有document.onreadystatechange事件,另外你也可以在构建自己的框架时使用此函数

 

01(function(){
02var isReady=false; //判断onDOMReady方法是否已经被执行过
03var readyList= [];//把需要执行的方法先暂存在这个数组里
04var timer;//定时器句柄
05ready=function(fn) {
06if (isReady )
07fn.call( document);
08else
09readyList.push( function() { return fn.call(this);});
10return this;
11}
12var onDOMReady=function(){
13for(var i=0;i<readyList.length;i++){
14readyList[i].apply(document);
15}
16readyList = null;
17}
18var bindReady = function(evt){
19if(isReady) return;
20isReady=true;
21onDOMReady.call(window);
22if(document.removeEventListener){
23document.removeEventListener("DOMContentLoaded", bindReady, false);
24}else if(document.attachEvent){
25document.detachEvent("onreadystatechange", bindReady);
26if(window == window.top){
27clearInterval(timer);
28timer = null;
29}
30}
31};
32if(document.addEventListener){
33document.addEventListener("DOMContentLoaded", bindReady, false);
34}else if(document.attachEvent){
35document.attachEvent("onreadystatechange", function(){
36if((/loaded|complete/).test(document.readyState))
37bindReady();
38});
39if(window == window.top){
40timer = setInterval(function(){
41try{
42isReady||document.documentElement.doScroll('left');//在IE下用能否执行doScroll判断 dom是否加载完毕
43}catch(e){
44return;
45}
46bindReady();
47},5);
48}
49}
50})();
使用方法如下:

1ready(dosomething);//dosomething为已存在的函数
2//也可以通过闭包来使用
3ready(function(){
4//这里是逻辑代码
5});

转载于:https://www.cnblogs.com/aspxnets/archive/2011/06/19/2084521.html

最后

以上就是粗犷招牌为你收集整理的怎样提取jQuery.ready(),DOM加载完毕执行onDOMReady()方法的全部内容,希望文章能够帮你解决怎样提取jQuery.ready(),DOM加载完毕执行onDOMReady()方法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部