比Jquery的document.ready更快的方法

  这个是上次在博客园看到的一篇文章,经测试,确实比jquery的$(document).ready(function(){....})更快,并且在ie和火狐等主流浏览器上都没问题,

  忘了原创是谁了,如果主人看到可以联系我, 我会立刻加上原文出处的,敬请见谅。

  

复制代码 代码如下:

  var =new function() {

  dom = [];

  dom.isReady = false;

  dom.isFunction = function(obj) {

  return Object.prototype.toString.call(obj) === "[object Function]";

  }

  dom.Ready = function(fn) {

  dom.initReady();

  //如果没有建成DOM树,则走第二步,存储起来一起杀

  if (dom.isFunction(fn)) {

  if (dom.isReady) {

  fn();

  //如果已经建成DOM,则来一个杀一个

  } else {

  dom.push(fn);

  //存储加载事件

  }

  }

  }

  dom.fireReady = function() {

  if (dom.isReady) return;

  dom.isReady = true;

  for (var i = 0, n = dom.length; i < n; i++) {

  var fn = dom[i];

  fn();

  }

  dom.length = 0;

  //清空事件

  }

  dom.initReady = function() {

  if (document.addEventListener) {

  document.addEventListener("DOMContentLoaded",

  function() {

  document.removeEventListener("DOMContentLoaded", arguments.callee, false);

  //清除加载函数

  dom.fireReady();

  },

  false);

  } else {

  if (document.getElementById) {

  document.write("<script id=\"ie-domReady\" defer='defer'src=\"//:\"><\/script>");

  document.getElementById("ie-domReady").onreadystatechange = function() {

  if (this.readyState === "complete") {

  dom.fireReady();

  this.onreadystatechange = null;

  this.parentNode.removeChild(this)

  }

  };

  }

  }

  }

  }