+ -
当前位置:首页 → 问答吧 → Jquery中ready函数不用把网页全部加载完就能操作DOM,请问onload的原理是什么?

Jquery中ready函数不用把网页全部加载完就能操作DOM,请问onload的原理是什么?

时间:2010-01-27

来源:互联网

Jquery中ready函数不用把网页全部加载完,就能操作DOM, 请问Jquery的onload的原理是什么?

作者: 469502097   发布时间: 2010-01-27

判断是否domReady.
对于IE来说。如果dom 树未完成。则对一个元素运行doScroll() 函数会异常。而FF,则有DOMContentLoaded事件在dom树绘制之后触发。

作者: forbe   发布时间: 2010-01-27

写了一下,可以瞧瞧.  fn 为回调函数。用法为domReady(function(){alert("dom ready yet!")})
复制内容到剪贴板
代码:
function domReady(fn){
            var _timer_ = null;
            void function(){
                if(document.all){
                    try{
                        document.body.doScroll("left");
                        clearTimeout(_timer_,_timer_ = null, fn());
                    }catch(e){
                        _timer_ = setTimeout(arguments.callee,1000);
                    }
                }else{
                    document.addEventListener("DOMContentLoaded", fn, false);
                }
            }()
        }

作者: forbe   发布时间: 2010-01-27

oh, no!  第秒检测一次太慢。大意了。你可改成 10 or 100

作者: forbe   发布时间: 2010-01-27

引用:
原帖由 forbe 于 2010-1-27 11:09 发表
oh, no!  第秒检测一次太慢。大意了。你可改成 10 or 100
不懂 高手来点注释吧

作者: 469502097   发布时间: 2010-01-27

复制内容到剪贴板
代码:
function domReady(fn){
            /*一个timer..中文称计时器..*/
            var _timer_ = null;
            /*一个自执行函数..就是不调用就会跑.. void function(){}(),  or  (function(){})()  or + function(){}()  or ~function(){}().. or . 手酸了.*/
            void function(){
                /*ie..*/
                if(document.all){
                    try{
                        /*调用document.body.doScroll()  这个函数在domReady之前调用。会报错。所以这里try catch*/
                        document.body.doScroll("left");
                        /*如果通过。说明domReady了。好,清除计时器,跑你的回调函数, 否则,进入catch*/
                        clearTimeout(_timer_,_timer_ = null, fn());
                    }catch(e){
                        /*继续跑哪个自执行函数, 每隔100毫秒就跑一次*/
                        _timer_ = setTimeout(arguments.callee,100);
                    }
                }else{
                    /*FF...*/
                    document.addEventListener("DOMContentLoaded", fn, false);
                }
            }()
        }

作者: forbe   发布时间: 2010-01-27

forbe,你这一段代码,其实是解决了加载问题。
我一加载问题调查了快两天了。
你的贴帮助了我。
谢谢。
为了谢你我都注册了个帐号。呵呵

作者: michaelboo   发布时间: 2011-09-29

函数内再用闭包在此处没有任何意义,void function 纯属多余

作者: wanglong8906   发布时间: 2011-09-29

相关阅读 更多