<!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>