<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>判断dom加载完毕</title>
<mce:script type="text/javascript" language="javascript"><!--
function domready(f) {
//如果dom已经加载,立即执行函数
if (domready.done) { return f(); }
//增加一个函数判断dom是否加载完毕
if (domready.timer) {
domready.ready.push(f); //把它加入待执行函数清单中
} else {
//为页面加载完毕绑定一个事件
addevent(window, "load", isdomready);
//初始化执行函数的数组
domready.ready = [f];
//尽可能的检查dom是否可用
domready.timer = setinterval(isdomready, 13);
}
//检查dom是否可用
function isdomready() {
//如果我们能判断出dom是否可用,忽略
if (domready.done) {
return false;
//检查若干元素是否可用
if (document && document.getelementsbytagname && document.getelementbyid && document.body) {
//如果可用,停止检查
clearinterval(domready.timer);
domready.timer = null;
//执行所有等待的函数
for (var i = 0; i < domready.ready.length; i++)
{ domready.ready[i](); }
//记录dom加载完成的标识
domready.ready = null;
domready.done = true;
//添加事件函数
function addevent(element, type, handler) {
if (!handler.$$guid) {
handler.$$guid = addevent.guid++; //为每一个事件处理函数赋予一个独立的id
//为元素建立一个事件类型的散列表
if (!element.events) {
element.events = {};
//为没对元素/事件建立一个事件处理函数的散列表
var handlers = element.events[type];
if (!handlers) {
handlers = element.events[type] = {};
//存储已有的事件处理函数(如果已存在一个)
if (element["on" + type]) {
handelers[0] = element["on" + type];
//在散列表中存储该事件的处理函数
handelers[handler.$$guid] = handler;
//赋予一个全局事件处理函数来处理所有工作
element["on" + type] = handleevent;
};
//创建独立id的计数器
addevent.guid = 1;
function removeevent(element, type, handler) {
//从散列表中删除事件处理函数
if (element.events && element.events[type]) {
delete element.events[type][handler.$$guid];
function handleevent(event) {
var returnvalue = true;
//获取事件对象(ie使用全局的事件对象)
event = event || fixevent(window.event);
//获取事件处理函数散列表的引用
var handlers = this.events[event.type];
//依次执行每个处理函数
for (var i in handlers) {
this.$$handleevent = handlers[i];
if (this.$$handleevent(event) === false) {
returnvalue = false;
return returnvalue;
//增加一些ie事件对象缺乏的方法
function fixevent(event) {
event.preventdefault = fixevent.preventdefault;
event.stoppropagation = fixevent.stoppropagation;
return event;
fixevent.preventdefault = function () {
this.returnvalue = false;
fixevent.stoppropagation = function () {
this.cancelbubble = true;
// --></mce:script>
//测试使用
domready(function () {
alert("判断dom是否可用:dom可用!")
});
</head>
<body>
</body>
</html>