+ -
当前位置:首页 → 问答吧 → 求解domReady( )函数

求解domReady( )函数

时间:2011-11-27

来源:互联网

function domReady(f) {
  //假如DOM已经加载,马上执行函数
  if(domReady.done) return f();
  //假如我们已经增加一个函数
  if(domReady.timer){
  domReady.read.push(f);
  }else{
  //为页面加载完毕绑定一个时间,以防止他最先完成。
  addEvent(window, 'load', isDOMReady);
  //初始化待执行函数数组
  domReady.ready=[f];
  //尽可能快的检查DOM是否可用
  domReady.timer=setInterval(isDOMReady,13);
  }
}
function isDOMReady() {
  //如果我们判断出DOM可用,忽略
  if(domReady.done) return false;
  //检查若干函数和元素是否可用
  if(document&&document.getElementById&&document.getElementsByTagName&&document.body){
  //如果可用,我们立即停止检查
  clearInterval(domReady.timer);
  domReady.timer=null;
  //执行所有正在等待的函数
  for(var i=0; i<domReady.ready.length;i++)
  domReady.ready[i]();
  //记录我们在此已经完成
  domReady.ready=null;
  domReady.done=true;
  }
}

问题:
1、if(document&&document.getElementById&&document.getElementsByTagName&&document.body) document如果可用,是否意味着document.body也可用?为什么还要单独检查后者呢?document.getElementById&&document.getElementsByTagName是否是在检查浏览器的能力,是否支持DOM方式?
2、addEvent(window, 'load', isDOMReady);不明白这句代码的含义,为什么要防止他先执行呢?后面不是一直在通过setInterval调用这个函数吗?
3、domReady.timer这个是属性除了用于清除间断调用,在if(domReady.timer){domReady.read.push(f);}又是什么用途?

请不吝赐教!

作者: shijuren   发布时间: 2011-11-27

1. document是js的重要属性之一,建议好好学习,document存在不一定代表document.body存在,body要到body标签加载完毕才会有效。 document.getElementById和document.getElementsByTagName都需要游览器加载完毕,或者加载DOM树的一部分才可以用,当然了,不支持DOM就肯定没用
2. 给window.onload加上检查是为了尽快达成,如果页面全部加载完毕就调用,虽然有计时器,但多个保险总是没错的。
3. 如果timer有值,那代表之前有函数执行列表了,那么新的函数就push到列表里就行了

作者: jim9_kabi   发布时间: 2011-11-27

热门下载

更多