<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Allen.M成长的路 &#187; DOMContentLoaded</title>
	<atom:link href="http://blog.allenm.me/tag/domcontentloaded/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.allenm.me</link>
	<description>冷静的思考是解决问题的最佳方式</description>
	<lastBuildDate>Sun, 01 Apr 2012 09:00:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>window.onload 和 DOMContentLoaded</title>
		<link>http://blog.allenm.me/2010/02/window-onload-%e5%92%8c-domcontentloaded/</link>
		<comments>http://blog.allenm.me/2010/02/window-onload-%e5%92%8c-domcontentloaded/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 07:50:07 +0000</pubDate>
		<dc:creator>allenm</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[DOMContentLoaded]]></category>

		<guid isPermaLink="false">http://allenm.cn/?p=486</guid>
		<description><![CDATA[相信写js的，都知道window.onload吧，但是并不是每个人都知道DOMContentLoaded，其实即使你不知道，很有可能你也经常使用了这个东西。 一般情况下，DOMContentLoaded事件要在window.onload之前执行，当DOM树构建完成的时候就会执行DOMContentLoaded事件，而window.onload是在页面载入完成的时候，才执行，这其中包括图片等元素。大多数时候我们只是想在DOM树构建完成后，绑定事件到元素，我们并不需要图片元素，加上有时候加载外域图片的速度非常缓慢。 我们可以写代码来简单测试一下这两种事件： javascript代码（引入了jQuery1.4.1)： if(document.addEventListener){ function DOMContentLoaded(){ $("#status").text("DOM is ready now!"); } document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); } window.onload=function(){ $("#status").text("DOM is ready AND wondow.onload is excute!"); } HTML 代码 body 部分： &#60;h1&#62; DOM READY's TEST &#60;/h1&#62; &#60;img src="./delay.php" alt="delay image" &#8230; <a href="http://blog.allenm.me/2010/02/window-onload-%e5%92%8c-domcontentloaded/">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>相信写js的，都知道window.onload吧，但是并不是每个人都知道DOMContentLoaded，其实即使你不知道，很有可能你也经常使用了这个东西。</p>
<p>一般情况下，DOMContentLoaded事件要在window.onload之前执行，当DOM树构建完成的时候就会执行DOMContentLoaded事件，而window.onload是在页面载入完成的时候，才执行，这其中包括图片等元素。大多数时候我们只是想在DOM树构建完成后，绑定事件到元素，我们并不需要图片元素，加上有时候加载外域图片的速度非常缓慢。</p>
<p>我们可以写代码来简单测试一下这两种事件：</p>
<h2>javascript代码（引入了jQuery1.4.1)：</h2>
<p><code> </code></p>
<p><code></p>
<pre>if(document.addEventListener){
	function DOMContentLoaded(){
		$("#status").text("DOM is ready now!");
	}
	document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
}
window.onload=function(){
			$("#status").text("DOM is ready AND wondow.onload is excute!");
}</pre>
<p></code></p>
<h2>HTML 代码 body 部分：</h2>
<p><code> </code></p>
<p><code></p>
<pre>&lt;h1&gt; DOM READY's TEST &lt;/h1&gt;
&lt;img src="./delay.php" alt="delay image" /&gt;
&lt;p id="status"&gt; DOM is not ready &lt;/p&gt;</pre>
<p></code></p>
<p>为了清楚的看到效果，特意写个简单的php文件，提供图片延时加载，代码如下：</p>
<p><code> </code></p>
<p><code></p>
<pre>sleep(5);
header('Location:./delay.png');</pre>
<p></code></p>
<p>在firefox和chrome以及opera中都可以清楚的看到，在图片未载入之前，id为status的段落已经显示了“DOM is ready now!”，然后等5秒钟后，图片加载完成后，此段落显示”DOM is ready AND wondow.onload is excute!”</p>
<p>此代码并不能在IE中工作，一方面是因为我使用的是addEventListener，开始前做了个判断，不存在此方法则不添加此事件。这样做的原因是IE确实是不支持DOMContentLoaded这个事件的，为了代码的简单，就没为IE写了。虽然IE没有此事件，但是我们却可以来模拟这个事件，常见的方法是判断element的doScroll如果成功则说明DOM载入完成。</p>
<p>常见的库中都提供了此事件的兼容各个浏览器的封装，如果你是个jQuery使用者，你可能会经常使用$(document).ready();或者$(function(){}) 这都是使用了DOMContentLoaded事件</p>
<h2>延伸阅读：</h2>
<ul>
<li><a href="https://developer.mozilla.org/en/Gecko-Specific_DOM_Events" target="_blank">MOZILLA官方的DOMContentLoaded文档</a></li>
<li><a href="http://varnow.org/?p=77" target="_blank">主流框架中DOMContentLoaded事件的实现</a></li>
<li><a href="http://lifesinger.org/blog/2009/07/onload-and-domcontentloaded/" target="_blank">onload 和 DOMContentLoaded 的陷阱</a></li>
</ul>
<p>合理使用DOMContentLoaded可以使页面更早的响应用户操作，希望IE早日原生实现这个事件，或者希望IE灭亡</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.allenm.me/2010/02/window-onload-%e5%92%8c-domcontentloaded/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

