<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[思想之地]]></title> 
<description><![CDATA[Echo is my life]]></description>
<link>http://be-evil.org/</link>
<language>zh-cn</language>
<generator>www.emlog.net</generator>

<item>
	<title>如何删除ckeditor的状态栏</title>
	<link>http://be-evil.org/?post=194</link>
	<description><![CDATA[<p>如何移除ckedior的状态栏上的元素路径显示和彻底移除状态栏？</p>
<p><a href="http://be-evil.org/content/uploadfile/201005/dedf67724b962c1e2d5b0db5eaa845c320100514044931.png" id="ematt:217" target="_blank"><img alt="点击查看原图" border="0" src="http://be-evil.org/content/uploadfile/201005/dedf67724b962c1e2d5b0db5eaa845c320100514044931.png" /></a>
</p>
<p>去ckeditor的官方文档库查找了一番，解决方案如下：</p>
<p>移除元素路径的方法（上图中状态栏显示的 body p）：</p>
<p>在config.js中配置以下参数</p>
<p><strong>config.removePlugins = &#39;elementspath&#39;;<br /></strong>
</p>
<p>这玩意实际上是个ckedior自带的插件</p>
<p>彻底移除状态栏的方法：</p>
<p>在config.js中配置以下参数，其实是将ckedior窗口大小调整功能关闭</p>
<p><strong>config.resize_enabled = false;<br /></strong>
</p>
<p>清空浏览器缓存刷新后即可看到效果</p>
<p><a href="http://be-evil.org/content/uploadfile/201005/6c8be7adc0e4760272fca16a621b0a7620100514045423.png" id="ematt:218" target="_blank"><img alt="点击查看原图" border="0" src="http://be-evil.org/content/uploadfile/201005/6c8be7adc0e4760272fca16a621b0a7620100514045423.png" /></a>
</p><div id="related_log" style="font-size:12px"><p><b>相关日志：</b></p><p><a href="http://be-evil.org/?post=154">JavaScript在不同浏览器下取得鼠标绝对位置函数</a></p><p><a href="http://be-evil.org/?post=56">Pro JavaScript系列讲座(1)</a></p><p><a href="http://be-evil.org/?post=122">利用javascript闭包特性给setInterval(setTimeout)传递参数</a></p><p><a href="http://be-evil.org/?post=58">Pro JavaScript系列讲座(2):对象基础</a></p><p><a href="http://be-evil.org/?post=116">jquery修复ie6不支持position: fixed;的插件</a></p><p><a href="http://be-evil.org/?post=101">FireFox和IE下使用ajax的一些小问题总结</a></p><p><a href="http://be-evil.org/?post=179">菊花文和边框文实现原理</a></p><p><a href="http://be-evil.org/?post=33">JavaScript得到当前窗口的所有大小值</a></p><p><a href="http://be-evil.org/?post=2">JavaScript生成ifame导致IE报无法打开搜索页的解决办法</a></p><p><a href="http://be-evil.org/?post=52">IE6和IE7中document.getElementsByName用法问题</a></p></div>]]></description>
	<pubDate>Fri, 14 May 2010 04:44:36 +0000</pubDate>
	<author>朦朧中的罪惡</author>
	<guid>http://be-evil.org/?post=194</guid>

</item>
<item>
	<title>符合为w3c标准的CSS Hack</title>
	<link>http://be-evil.org/?post=142</link>
	<description><![CDATA[<p>
	如何让你的CSS既兼容各种浏览器，又可以通过w3c的验证？答案是CSS hack</p>
<p>
	测试页面在附件压缩包中</p>
<p>
	标准CSS样式</p>
<p>
	#style {<br />
	&nbsp;&nbsp;&nbsp; color&nbsp; :orange;<br />
	}</p>
<p>
	火狐效果</p>
<p>
	<a href="http://be-evil.org/content/uploadfile/201002/6e3ff27578c6cd0eba956b1730fac3a820100203170754.png" id="ematt:162" target="_blank"><img alt="点击查看原图" border="0" src="http://be-evil.org/content/uploadfile/201002/6e3ff27578c6cd0eba956b1730fac3a820100203170754.png" /></a></p>
<p>
	&nbsp;</p>
<p>
	IE7 独有hack写法</p>
<p>
	*+html #style{<br />
	&nbsp;&nbsp;&nbsp; color&nbsp; :green;<br />
	}</p>
<p>
	表现效果</p>
<p>
	<a href="http://be-evil.org/content/uploadfile/201002/2b80b9d1f4cd4efe4c57561f018a5d9420100203170754.png" id="ematt:164" target="_blank"><img alt="点击查看原图" border="0" src="http://be-evil.org/content/uploadfile/201002/2b80b9d1f4cd4efe4c57561f018a5d9420100203170754.png" /></a></p>
<p>
	<br />
	* html #style {<br />
	&nbsp;&nbsp; color&nbsp; &nbsp; :blue;<br />
	}&nbsp; /* IE6独有HACK，只有IE6可以理解，后复盖前，所以IE6会使用这个样式 */</p>
<p>
	<a href="http://be-evil.org/content/uploadfile/201002/0d221bab2394d62022a1942810845ddd20100203170754.png" id="ematt:163" target="_blank"><img alt="点击查看原图" border="0" src="http://be-evil.org/content/uploadfile/201002/0d221bab2394d62022a1942810845ddd20100203170754.png" /></a></p>
<p>
	W3C CSS 验证</p>
<p>
	<a href="http://be-evil.org/content/uploadfile/201002/aa17a7df9330b4ab503d8427b591433e20100203171245.png" id="ematt:165" target="_blank"><img alt="点击查看原图" border="0" src="http://be-evil.org/content/uploadfile/201002/thum-aa17a7df9330b4ab503d8427b591433e20100203171245.png" /></a></p>
<p>
	CSS3 验证完美通过</p>
<p>
	<a href="http://be-evil.org/content/uploadfile/201002/46183e8c4265bf5c93b3355e9173f52520100203171245.png" id="ematt:166" target="_blank"><img alt="点击查看原图" border="0" src="http://be-evil.org/content/uploadfile/201002/thum-46183e8c4265bf5c93b3355e9173f52520100203171245.png" /></a></p>]]></description>
	<pubDate>Wed, 03 Feb 2010 08:42:54 +0000</pubDate>
	<author>朦朧中的罪惡</author>
	<guid>http://be-evil.org/?post=142</guid>

</item>
<item>
	<title>利用javascript闭包特性给setInterval(setTimeout)传递参数</title>
	<link>http://be-evil.org/?post=122</link>
	<description><![CDATA[<p>
	<span style="color: rgb(0, 0, 255);">function</span> <span style="color: rgb(0, 0, 0);">doSomething</span>(<span style="color: rgb(0, 0, 0);">paramA</span><span style="color: rgb(0, 0, 0);">,</span> <span style="color: rgb(0, 0, 0);">paramB</span><span style="color: rgb(0, 0, 0);">,</span> <span style="color: rgb(0, 0, 0);">paramC</span><span style="color: rgb(0, 0, 0);">) {</span><br />
	&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 128, 0);">/* </span></p>
<p>
	<span style="color: rgb(0, 128, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 返回一个由函数表达式创建的匿名内部函数的引用 - 闭包</span></p>
<p>
	<span style="color: rgb(0, 128, 0);">&nbsp;&nbsp; */</span><br />
	&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 255);">return</span> (<span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">() {</span><br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 128, 0);">/* </span></p>
<p>
	<span style="color: rgb(0, 128, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这个内部函数将通过 - setInterval- 执行，</span></p>
<p>
	<span style="color: rgb(0, 128, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 而且当它执行时它会读取并按照传递给外部函数的参数行事： </span></p>
<p>
	<span style="color: rgb(0, 128, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */</span><br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 0);">paramA</span><span style="color: rgb(0, 0, 0);">[</span><span style="color: rgb(0, 0, 0);">paramB</span><span style="color: rgb(0, 0, 0);">]</span> <span style="color: rgb(0, 0, 0);">=</span> <span style="color: rgb(0, 0, 0);">paramC</span>;<br />
	&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 0);">});</span><br />
	<span style="color: rgb(0, 0, 0);">}</span><br />
	<br />
	<span style="color: rgb(0, 128, 0);">/* </span></p>
<p>
	<span style="color: rgb(0, 128, 0);">&nbsp;&nbsp; 调用这个函数将返回一个在其执行环境中创建的内部函数对象的引用。</span></p>
<p>
	<span style="color: rgb(0, 128, 0);">&nbsp;&nbsp; 传递的参数最终将作为外部函数的参数被内部函数使用。</span></p>
<p>
	<span style="color: rgb(0, 128, 0);">&nbsp;&nbsp; 返回的对内部函数的引用被赋给一个全局变量</span></p>
<p>
	<span style="color: rgb(0, 128, 0);">*/</span><br />
	<span style="color: rgb(0, 0, 255);">var</span> <span style="color: rgb(0, 0, 0);">functRef</span> <span style="color: rgb(0, 0, 0);">=</span> <span style="color: rgb(0, 0, 0);">doSomething</span>(<span style="color: rgb(0, 0, 0);">menu</span><span style="color: rgb(0, 0, 0);">,</span> <span style="color: rgb(163, 21, 21);">&quot;display&quot;</span><span style="color: rgb(0, 0, 0);">,</span> <span style="color: rgb(163, 21, 21);">&quot;none&quot;</span>);<br />
	<span style="color: rgb(0, 128, 0);">/**//* 调用 setInterval函数，将赋给变量 - functRef - 的内部函数的引用作为传递的第一个参数:- */</span><br />
	<span style="color: rgb(0, 0, 0);">setInterval</span>(<span style="color: rgb(0, 0, 0);">functRef</span><span style="color: rgb(0, 0, 0);">,</span> <span style="color: rgb(0, 0, 0);">500</span>);</p><div id="related_log" style="font-size:12px"><p><b>相关日志：</b></p><p><a href="http://be-evil.org/?post=194">如何删除ckeditor的状态栏</a></p><p><a href="http://be-evil.org/?post=154">JavaScript在不同浏览器下取得鼠标绝对位置函数</a></p><p><a href="http://be-evil.org/?post=56">Pro JavaScript系列讲座(1)</a></p><p><a href="http://be-evil.org/?post=58">Pro JavaScript系列讲座(2):对象基础</a></p><p><a href="http://be-evil.org/?post=116">jquery修复ie6不支持position: fixed;的插件</a></p><p><a href="http://be-evil.org/?post=101">FireFox和IE下使用ajax的一些小问题总结</a></p><p><a href="http://be-evil.org/?post=179">菊花文和边框文实现原理</a></p><p><a href="http://be-evil.org/?post=33">JavaScript得到当前窗口的所有大小值</a></p><p><a href="http://be-evil.org/?post=2">JavaScript生成ifame导致IE报无法打开搜索页的解决办法</a></p><p><a href="http://be-evil.org/?post=52">IE6和IE7中document.getElementsByName用法问题</a></p></div>]]></description>
	<pubDate>Thu, 22 Oct 2009 04:26:36 +0000</pubDate>
	<author>朦朧中的罪惡</author>
	<guid>http://be-evil.org/?post=122</guid>

</item>
<item>
	<title>jquery修复ie6不支持position: fixed;的插件</title>
	<link>http://be-evil.org/?post=116</link>
	<description><![CDATA[<div style="background: none repeat scroll 0% 0% rgb(253, 253, 253); -moz-background-inline-policy: continuous; color: black;">
	<u><br />
	</u></div>
<div class="source" style="font-family: &quot;[object HTMLOptionElement]&quot;,&quot;Consolas&quot;,&quot;Lucida Console&quot;,&quot;Courier New&quot;; color: rgb(224, 238, 224); background-color: rgb(16, 48, 64);">
	<span style="color: rgb(80, 112, 128);">&lt;!--</span><span style="color: rgb(224, 238, 224);">[</span><span style="color: rgb(144, 238, 144);">if</span> <span style="color: rgb(224, 238, 224);">lte</span> <span style="color: rgb(224, 238, 224);">IE</span> <span style="color: rgb(0, 255, 255);">7</span><span style="color: rgb(224, 238, 224);">]</span><span style="color: rgb(224, 238, 224);">&gt;</span><br />
	<span style="color: rgb(224, 238, 224);">&lt;</span><span style="color: rgb(224, 238, 224);">script</span> <span style="color: rgb(224, 238, 224);">type</span><span style="color: rgb(224, 238, 224);">=</span><span style="color: rgb(0, 229, 238);">&quot;text/javascript&quot;</span><span style="color: rgb(224, 238, 224);">&gt;</span><br />
	(<span style="color: rgb(173, 216, 230);">function</span>(<span style="color: rgb(224, 238, 224);">$</span>) <span style="color: rgb(224, 238, 224);">{</span> <br />
	&nbsp;&nbsp;&nbsp; <span style="color: rgb(224, 238, 224);">$</span><span style="color: rgb(224, 238, 224);">.</span><span style="color: rgb(224, 238, 224);">fn</span><span style="color: rgb(224, 238, 224);">.</span><span style="color: rgb(224, 238, 224);">pozFixed</span> <span style="color: rgb(224, 238, 224);">=</span> <span style="color: rgb(173, 216, 230);">function</span>(<span style="color: rgb(224, 238, 224);">params</span>) <span style="color: rgb(224, 238, 224);">{</span> <br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(173, 216, 230);">var</span> <span style="color: rgb(224, 238, 224);">defaults</span> <span style="color: rgb(224, 238, 224);">=</span> <span style="color: rgb(224, 238, 224);">{</span> <br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(224, 238, 224);">top</span> <span style="color: rgb(224, 238, 224);">:</span> <span style="color: rgb(0, 255, 255);">400</span><span style="color: rgb(224, 238, 224);">,</span> <br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(224, 238, 224);">left</span> <span style="color: rgb(224, 238, 224);">:</span> <span style="color: rgb(0, 229, 238);">&#39;50%&#39;</span><span style="color: rgb(224, 238, 224);">,</span><br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(224, 238, 224);">interval</span><span style="color: rgb(224, 238, 224);">:</span><span style="color: rgb(0, 255, 255);">100</span><br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(224, 238, 224);">};</span> <br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(224, 238, 224);">defaults</span> <span style="color: rgb(224, 238, 224);">=</span> <span style="color: rgb(224, 238, 224);">$</span><span style="color: rgb(224, 238, 224);">.</span><span style="color: rgb(224, 238, 224);">extend</span>(<span style="color: rgb(224, 238, 224);">defaults</span><span style="color: rgb(224, 238, 224);">,</span><span style="color: rgb(224, 238, 224);">params</span>);&nbsp;&nbsp;&nbsp;&nbsp; <br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(144, 238, 144);">return</span> <span style="color: rgb(144, 238, 144);">this</span><span style="color: rgb(224, 238, 224);">.</span><span style="color: rgb(224, 238, 224);">each</span>(<span style="color: rgb(173, 216, 230);">function</span>(<span style="color: rgb(224, 238, 224);">i</span><span style="color: rgb(224, 238, 224);">,</span><span style="color: rgb(224, 238, 224);">o</span>) <span style="color: rgb(224, 238, 224);">{</span> <br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(173, 216, 230);">var</span> <span style="color: rgb(224, 238, 224);">$this</span> <span style="color: rgb(224, 238, 224);">=</span> <span style="color: rgb(224, 238, 224);">$</span>(<span style="color: rgb(144, 238, 144);">this</span>); <br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(144, 238, 144);">this</span><span style="color: rgb(224, 238, 224);">.</span><span style="color: rgb(224, 238, 224);">fixPosition</span> <span style="color: rgb(224, 238, 224);">=</span> <span style="color: rgb(173, 216, 230);">function</span>() <span style="color: rgb(224, 238, 224);">{</span> <br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(173, 216, 230);">var</span> <span style="color: rgb(224, 238, 224);">st</span> <span style="color: rgb(224, 238, 224);">=</span> <span style="color: rgb(224, 238, 224);">$</span><span style="color: rgb(224, 238, 224);">().</span><span style="color: rgb(224, 238, 224);">scrollTop</span>();&nbsp; <br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(224, 238, 224);">$this</span><span style="color: rgb(224, 238, 224);">.</span><span style="color: rgb(224, 238, 224);">css</span><span style="color: rgb(224, 238, 224);">({</span><br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(224, 238, 224);">top</span><span style="color: rgb(224, 238, 224);">:</span><span style="color: rgb(224, 238, 224);">st</span> <span style="color: rgb(224, 238, 224);">+</span> <span style="color: rgb(224, 238, 224);">defaults</span><span style="color: rgb(224, 238, 224);">.</span><span style="color: rgb(224, 238, 224);">top</span><span style="color: rgb(224, 238, 224);">,</span><br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(224, 238, 224);">left</span><span style="color: rgb(224, 238, 224);">:</span><span style="color: rgb(0, 229, 238);">&#39;50%&#39;</span><br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(224, 238, 224);">});</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(224, 238, 224);">};</span><br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(224, 238, 224);">$this</span><span style="color: rgb(224, 238, 224);">.</span><span style="color: rgb(224, 238, 224);">css</span><span style="color: rgb(224, 238, 224);">({</span><span style="color: rgb(224, 238, 224);">position</span><span style="color: rgb(224, 238, 224);">:</span><span style="color: rgb(0, 229, 238);">&#39;absolute&#39;</span><span style="color: rgb(224, 238, 224);">,</span><span style="color: rgb(224, 238, 224);">top</span><span style="color: rgb(224, 238, 224);">:</span><span style="color: rgb(224, 238, 224);">defaults</span><span style="color: rgb(224, 238, 224);">.</span><span style="color: rgb(224, 238, 224);">top</span><span style="color: rgb(224, 238, 224);">,</span><span style="color: rgb(224, 238, 224);">left</span><span style="color: rgb(224, 238, 224);">:</span><span style="color: rgb(0, 229, 238);">&quot;50%&quot;</span><span style="color: rgb(224, 238, 224);">});</span> <br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(224, 238, 224);">setInterval</span>(<span style="color: rgb(144, 238, 144);">this</span><span style="color: rgb(224, 238, 224);">.</span><span style="color: rgb(224, 238, 224);">fixPosition</span><span style="color: rgb(224, 238, 224);">,</span><span style="color: rgb(224, 238, 224);">defaults</span><span style="color: rgb(224, 238, 224);">.</span><span style="color: rgb(224, 238, 224);">interval</span>); <br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(224, 238, 224);">});</span><br />
	&nbsp;&nbsp;&nbsp; <span style="color: rgb(224, 238, 224);">};</span><br />
	<span style="color: rgb(224, 238, 224);">})(</span><span style="color: rgb(224, 238, 224);">jQuery</span>);<br />
	<span style="color: rgb(224, 238, 224);">&lt;/</span><span style="color: rgb(224, 238, 224);">script</span><span style="color: rgb(224, 238, 224);">&gt;</span><br />
	<span style="color: rgb(224, 238, 224);">&lt;!</span><span style="color: rgb(224, 238, 224);">[</span><span style="color: rgb(224, 238, 224);">endif</span><span style="color: rgb(224, 238, 224);">]</span><span style="color: rgb(224, 238, 224);">--&gt;</span></div><div id="related_log" style="font-size:12px"><p><b>相关日志：</b></p><p><a href="http://be-evil.org/?post=228">优化FireFox速度，移除插件（plugin）的方法</a></p><p><a href="http://be-evil.org/?post=208">PHP解析XML异常问题解决</a></p><p><a href="http://be-evil.org/?post=161">PHP解数学题</a></p><p><a href="http://be-evil.org/?post=195">mysql_fetch_object函数读取SELECT COUNT(*)数据的方法</a></p><p><a href="http://be-evil.org/?post=210">PHP匹配GBK全中文字正则表达式（不包括GBK标点符号）</a></p><p><a href="http://be-evil.org/?post=183">PHP计算相关两个时区的时间差</a></p><p><a href="http://be-evil.org/?post=194">如何删除ckeditor的状态栏</a></p><p><a href="http://be-evil.org/?post=188">ubuntu配置TortoiseHg的对比工具meld</a></p><p><a href="http://be-evil.org/?post=154">JavaScript在不同浏览器下取得鼠标绝对位置函数</a></p><p><a href="http://be-evil.org/?post=207">PHP识别url重写请求</a></p></div>]]></description>
	<pubDate>Fri, 25 Sep 2009 07:41:52 +0000</pubDate>
	<author>朦朧中的罪惡</author>
	<guid>http://be-evil.org/?post=116</guid>

</item>
<item>
	<title>FireFox和IE下使用ajax的一些小问题总结</title>
	<link>http://be-evil.org/?post=101</link>
	<description><![CDATA[<p>
	1、FireFox下使用xmlHttpRequest的send方法是必须指定参数。即.send();是无效的，如果没有参数要使用.send(null);.<br />
	2、FireFox下处理DOM时把空白也当作是一个节点。因此为了避免出现一些意想不到的问题，要尽量不要使用空白（包括换行、空格等等）。<br />
	3、使用createElement创建节点时，IE下可以用document.createElement(&rdquo;&lt;tr&gt;&rdquo;);但是FireFox下只能用document.createElement(&rdquo;tr&rdquo;);<br />
	4、添加子节点，IE可以用add，但是FireFox下不可以。FireFox下只能用appendChild.<br />
	5、如果IE下往table节点里添加tr达不到预期效果，常常是因为没有添加tbody节点。<br />
	6、IE下使用javascript设定td的colspan无效是因为大小写的问题，必须使用colSpan。<br />
	7、FireFox下输出从服务器端返回XML时注意开头不能有空白（包括换行、空格等），否则会有解析错误。<br />
	8、使用xmlHTTPRequest实现分页效果时，每次处理完一次请求要把xmlHTTPRequest对象消掉，下次使用时再重新构建。</p><div id="related_log" style="font-size:12px"><p><b>相关日志：</b></p><p><a href="http://be-evil.org/?post=228">优化FireFox速度，移除插件（plugin）的方法</a></p><p><a href="http://be-evil.org/?post=224">如何在ubuntu上通过PPA安装Firefox4.0</a></p><p><a href="http://be-evil.org/?post=221">FireFox苹果主题美化包FoxDie</a></p><p><a href="http://be-evil.org/?post=214">FireFox主题Crystal Chrome</a></p><p><a href="http://be-evil.org/?post=194">如何删除ckeditor的状态栏</a></p><p><a href="http://be-evil.org/?post=154">JavaScript在不同浏览器下取得鼠标绝对位置函数</a></p><p><a href="http://be-evil.org/?post=155">Firefox主题NAVER</a></p><p><a href="http://be-evil.org/?post=107">我正在使用的FireFox扩展</a></p><p><a href="http://be-evil.org/?post=184">手动删除Firefox中一些无法卸载的扩展</a></p><p><a href="http://be-evil.org/?post=139">Firefox主题Fox world</a></p></div>]]></description>
	<pubDate>Wed, 17 Jun 2009 12:07:56 +0000</pubDate>
	<author>朦朧中的罪惡</author>
	<guid>http://be-evil.org/?post=101</guid>

</item>
<item>
	<title>[译文]难倒你的9个JavaScript陷阱</title>
	<link>http://be-evil.org/?post=88</link>
	<description><![CDATA[<p>
	本文来自于<a href="http://www.fitzblog.com/bid/2127/Nine-Javascript-Gotchas" target="_blank">Nine Javascript Gotchas</a></p>
<p>
	<strong>1.　最后一个逗号</strong></p>
<p>
	如这段代码，注意最后一个逗号，按语言学角度来说应该是不错的（python的类似数据类型辞典dictionary就允许如此）。IE会报语法错误，但语焉不详，你只能用人眼从几千行代码中扫描。</p>
<pre>&nbsp;</pre>
<ol class="dp-c">
	<li class="alt">
		<span><span class="keyword">var</span><span>&nbsp;theObj&nbsp;=&nbsp;{ &nbsp;</span></span></li>
	<li>
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;city&nbsp;:&nbsp;</span><span class="string">&quot;Boston&quot;</span><span>, &nbsp;</span></li>
	<li class="alt">
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;state&nbsp;:&nbsp;</span><span class="string">&quot;MA&quot;</span><span>, &nbsp;</span></li>
	<li>
		<span>&nbsp;&nbsp;}&nbsp;</span></li>
</ol>
<p>
	<strong>2.　this的引用会改变</strong></p>
<p>
	如这段代码：</p>
<pre>&nbsp;</pre>
<ol class="dp-xml">
	<li class="alt">
		<span><span class="tag">&lt;</span><span class="tag-name">input</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;button&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;Gotcha!&quot;</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;MyButton&quot;</span><span>&nbsp;</span><span class="tag">&gt;</span><span>&nbsp;</span></span></li>
	<li>
		<span class="tag">&lt;</span><span class="tag-name">script</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
	<li class="alt">
		<span>var&nbsp;</span><span class="attribute">MyObject</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">function</span><span>&nbsp;()&nbsp;{ &nbsp;</span></li>
	<li>
		<span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">this.alertMessage</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">&quot;javascript&nbsp;rules&quot;</span><span>; &nbsp;</span></li>
	<li class="alt">
		<span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">this.ClickHandler</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">function</span><span>()&nbsp;{ &nbsp;</span></li>
	<li>
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(this.alertMessage&nbsp;); &nbsp;</span></li>
	<li class="alt">
		<span>&nbsp;&nbsp;} &nbsp;</span></li>
	<li>
		<span>}(); &nbsp;</span></li>
	<li class="alt">
		<span>document.getElementById(&rdquo;theText&rdquo;)</span><span class="attribute">.onclick</span><span>&nbsp;=&nbsp;&nbsp;</span><span class="attribute-value">MyObject</span><span>.ClickHandler &nbsp;</span></li>
	<li>
		<span class="tag">&lt;/</span><span class="tag-name">script</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
</ol>
<p>
	&nbsp;</p>
<p>
	并不如你所愿，答案并不是&rdquo;javascript rules&rdquo;。在执行MyObject.ClickHandler时，代码中红色这行，this的引用实际上指向的是document.getElementById(&quot;theText&quot;)的引用。可以这么解决：</p>
<ol class="dp-xml">
	<li class="alt">
		<span><span class="tag">&lt;</span><span class="tag-name">input</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;button&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;Gotcha!&quot;</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;theText&quot;</span><span>&nbsp;</span><span class="tag">&gt;</span><span>&nbsp;</span></span></li>
	<li>
		<span class="tag">&lt;</span><span class="tag-name">script</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
	<li class="alt">
		<span>var&nbsp;</span><span class="attribute">MyObject</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">function</span><span>&nbsp;()&nbsp;{ &nbsp;</span></li>
	<li>
		<span>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;</span><span class="attribute">self</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">this</span><span>; &nbsp;</span></li>
	<li class="alt">
		<span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">this.alertMessage</span><span>&nbsp;=&nbsp;&ldquo;javascript&nbsp;rules&rdquo;; &nbsp;</span></li>
	<li>
		<span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">this.OnClick</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">function</span><span>()&nbsp;{ &nbsp;</span></li>
	<li class="alt">
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(self.value); &nbsp;</span></li>
	<li>
		<span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;</span></li>
	<li class="alt">
		<span>}(); &nbsp;</span></li>
	<li>
		<span>document.getElementById(&rdquo;theText&rdquo;)</span><span class="attribute">.onclick</span><span>&nbsp;=&nbsp;&nbsp;</span><span class="attribute-value">MyObject</span><span>.OnClick &nbsp;</span></li>
	<li class="alt">
		<span class="tag">&lt;/</span><span class="tag-name">script</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
</ol>
<p>
	实质上，这就是javascript作用域的问题。如果你看过，你会发现解决方案不止一种。</p>
<pre></pre>
<p>
	<strong>3.　标识盗贼</strong></p>
<p>
	在javascript中不要使用跟HTML的id一样的变量名。如下代码：</p>
<pre>&nbsp;</pre>
<ol class="dp-xml">
	<li class="alt">
		<span><span class="tag">&lt;</span><span class="tag-name">input</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;button&quot;</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;TheButton&quot;</span><span class="tag">&gt;</span><span>&nbsp;</span></span></li>
	<li>
		<span class="tag">&lt;</span><span class="tag-name">script</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
	<li class="alt">
		<span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">TheButton</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">get</span><span>(&quot;TheButton&quot;); &nbsp;</span></li>
	<li>
		<span class="tag">&lt;/</span><span class="tag-name">script</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
</ol>
<p>
	IE会报对象未定义的错误。我只能说：IE sucks.</p>
<p>
	<strong>4.　字符串只替换第一个匹配</strong></p>
<p>
	如下代码：</p>
<pre>&nbsp;</pre>
<ol class="dp-c">
	<li class="alt">
		<span><span class="keyword">var</span><span>&nbsp;fileName&nbsp;=&nbsp;</span><span class="string">&quot;This&nbsp;is&nbsp;a&nbsp;title&quot;</span><span>.replace(</span><span class="string">&quot;&nbsp;&quot;</span><span>,</span><span class="string">&quot;_&quot;</span><span>);&nbsp;</span></span></li>
</ol>
<p>
	&nbsp;</p>
<p>
	而实际上，结果是&rdquo;This_is a title&ldquo;. 在javascript中，String.replace的第一个参数应该是正则表达式。所以，正确的做法是这样：</p>
<pre>&nbsp;</pre>
<ol class="dp-c">
	<li class="alt">
		<span><span class="keyword">var</span><span>&nbsp;fileName&nbsp;=&nbsp;</span><span class="string">&quot;This&nbsp;is&nbsp;a&nbsp;title&quot;</span><span>.replace(/&nbsp;/g,</span><span class="string">&quot;_&quot;</span><span>);&nbsp;</span></span></li>
</ol>
<p>
	<br />
	&nbsp;</p>
<p>
	<strong>5.　mouseout意味着mousein</strong></p>
<p>
	事实上，这是由于事件冒泡导致的。IE中有mouseenter和mouseleave，但不是标准的。作者在此建议大家使用库比如YUI来解决问题。</p>
<p>
	<strong>6.　parseInt是基于进制体系的</strong></p>
<p>
	这个是常识，可是很多人给忽略了parseInt还有第二个参数，用以指明进制。比如，parseInt(&quot;09&quot;)，如果你认为答案是9，那就错了。因为，在此，字符串以0开头，parseInt以八进制来处理它，在八进制中，09是非法，返回false，布尔值false转化成数值就是0. 因此，正确的做法是parseInt(&quot;09&quot;, 10).</p>
<p>
	<strong>7.　for...in...会遍历所有的东西</strong></p>
<p>
	有一段这样的代码：</p>
<pre>&nbsp;</pre>
<ol class="dp-c">
	<li class="alt">
		<span><span class="keyword">var</span><span>&nbsp;arr&nbsp;=&nbsp;[5,10,15]; &nbsp;</span></span></li>
	<li>
		<span class="keyword">var</span><span>&nbsp;total&nbsp;=&nbsp;1; &nbsp;</span></li>
	<li class="alt">
		<span class="keyword">for</span><span>&nbsp;(&nbsp;</span><span class="keyword">var</span><span>&nbsp;x&nbsp;</span><span class="keyword">in</span><span>&nbsp;arr)&nbsp;{ &nbsp;</span></li>
	<li>
		<span>&nbsp;&nbsp;&nbsp;&nbsp;total&nbsp;=&nbsp;total&nbsp;*&nbsp;arr[x]; &nbsp;</span></li>
	<li class="alt">
		<span>}&nbsp;</span></li>
</ol>
<p>
	<br />
	&nbsp;</p>
<p>
	运行得好好的，不是吗？但是有一天它不干了，给我返回的值变成了NaN, 晕。我只不过引入了一个库而已啊。原来是这个库改写了Array的prototype，这样，我们的arr平白无过多出了一个属性（方法），而for...in...会把它给遍历出来。所以这样做才是比较安全的：</p>
<pre>&nbsp;</pre>
<ol class="dp-c">
	<li class="alt">
		<span><span class="keyword">for</span><span>&nbsp;(&nbsp;</span><span class="keyword">var</span><span>&nbsp;x&nbsp;=&nbsp;0;&nbsp;x&nbsp;&lt;&nbsp;arr.length;&nbsp;x++)&nbsp;{ &nbsp;</span></span></li>
	<li>
		<span>&nbsp;&nbsp;&nbsp;&nbsp;total&nbsp;=&nbsp;total&nbsp;*&nbsp;arr[x]; &nbsp;</span></li>
	<li class="alt">
		<span>}&nbsp;</span></li>
</ol>
<p>
	其实，这也是污染基本类的prototype会带来危害的一个例证。</p>
<p>
	<strong>8.　事件处理器的陷阱</strong></p>
<p>
	这其实只会存在使用作为对象属性的事件处理器才会存在的问题。比如window.onclick = MyOnClickMethod这样的代码，这会复写掉之前的window.onclick事件，还可能导致IE的内容泄露（sucks again）。在IE还没有支持DOM 2的事件注册之前，作者建议使用库来解决问题，比如使用YUI:</p>
<pre>&nbsp;</pre>
<ol class="dp-c">
	<li class="alt">
		<span><span>YAHOO.util.Event.addListener(window,&nbsp;</span><span class="string">&quot;click&quot;</span><span>,&nbsp;MyOnClickMethod);&nbsp;</span></span></li>
</ol>
<p>
	<br />
	&nbsp;</p>
<p>
	这应该也属于常识问题，但新手可能容易犯错。</p>
<p>
	<strong>9.　Focus Pocus</strong></p>
<p>
	新建一个input文本元素，然后把焦点挪到它上面，按理说，这样的代码应该很自然：</p>
<pre>&nbsp;</pre>
<ol class="dp-c">
	<li class="alt">
		<span><span class="keyword">var</span><span>&nbsp;newInput&nbsp;=&nbsp;document.createElement(</span><span class="string">&quot;input&quot;</span><span>); &nbsp;</span></span></li>
	<li>
		<span>document.body.appendChild(newInput); &nbsp;</span></li>
	<li class="alt">
		<span>newInput.focus(); &nbsp;</span></li>
	<li>
		<span>newInput.select();&nbsp;</span></li>
</ol>
<p>
	但是IE会报错（sucks again and again）。理由可能是当你执行focus()的时候，元素尚未可用。因此，我们可以延迟执行：</p>
<pre style="width: 100.16%; height: 173px;">&nbsp;</pre>
<ol class="dp-c">
	<li class="alt">
		<span><span class="keyword">var</span><span>&nbsp;newInput&nbsp;=&nbsp;document.createElement(</span><span class="string">&quot;input&quot;</span><span>); &nbsp;</span></span></li>
	<li>
		<span>newInput.id&nbsp;=&nbsp;</span><span class="string">&quot;TheNewInput&quot;</span><span>; &nbsp;</span></li>
	<li class="alt">
		<span>document.body.appendChild(</span><span class="string">&quot;newInput&quot;</span><span>); &nbsp;</span></li>
	<li>
		<span>&nbsp;</span></li>
	<li class="alt">
		<span>setTimeout(</span><span class="string">&quot;document.getElementById(&#39;TheNewInput&#39;).focus();&nbsp;document.getElementById(&#39;TheNewInput&#39;).select();&quot;</span><span>,&nbsp;10);&nbsp;</span></li>
</ol>
<p>
	在实践中，javascript的陷阱还有很多很多，大多是由于解析器的实现不到位而引起。这些东西一般都不会在教科书中出现，只能靠开发者之间的经验分享。谢天谢地，我们生活在网络时代，很多碰到的问题，一般都可以在Google中找到答案。</p>
<div class="hiddenElement">
	&nbsp;</div>
<p>
	&nbsp;</p>
<table class="hiddenElement">
	<tbody>
		<tr>
			<td>
				&nbsp;</td>
		</tr>
	</tbody>
</table>
<p class="hiddenElement">
	&nbsp;</p>
<ul class="hiddenElement">
	<li>
		&nbsp;</li>
</ul>]]></description>
	<pubDate>Sat, 18 Oct 2008 11:01:50 +0000</pubDate>
	<author>朦朧中的罪惡</author>
	<guid>http://be-evil.org/?post=88</guid>

</item>
<item>
	<title>IE的document.getElementById混淆name和id属性的BUG</title>
	<link>http://be-evil.org/?post=86</link>
	<description><![CDATA[<p>
	前不久我在开发中遇到了<a href="http://be-evil.org/showlog-83.html" target="_blank">在IE下Form.submit()的一个BUG</a>,没想到IE的BUG还不只这么一个,下面我来介绍我遇到的另外一个关于document.getElementById的BUG.</p>
<p>
	<strong>BUG演示</strong></p>
<p>
	页面演示在这里,代码在下面</p>
<pre></pre>
<ol class="dp-xml">
	<li class="alt">
		<pre><span><span>&lt;!DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;&quot;-//W3C//DTD&nbsp;XHTML&nbsp;1.0&nbsp;Transitional//EN&quot;&nbsp;&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;</span><span class="tag">&gt;</span><span>&nbsp;</span></span></pre></li>
	<li>
		<span class="tag">&lt;</span><span class="tag-name">html</span><span>&nbsp;</span><span class="attribute">xmlns</span><span>=</span><span class="attribute-value">&quot;http://www.w3.org/1999/xhtml&quot;</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
	<li class="alt">
		<span class="tag">&lt;</span><span class="tag-name">head</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
	<li>
		<span class="tag">&lt;</span><span class="tag-name">meta</span><span>&nbsp;</span><span class="attribute">http-equiv</span><span>=</span><span class="attribute-value">&quot;Content-Type&quot;</span><span>&nbsp;</span><span class="attribute">content</span><span>=</span><span class="attribute-value">&quot;text/html;&nbsp;charset=utf-8&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;</span></li>
	<li class="alt">
		<span class="tag">&lt;</span><span class="tag-name">title</span><span class="tag">&gt;</span><span>IE&nbsp;document.getElementById&nbsp;BUG&nbsp;DEMO</span><span class="tag">&lt;/</span><span class="tag-name">title</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
	<li>
		<span class="tag">&lt;/</span><span class="tag-name">head</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
	<li class="alt">
		<span>&nbsp;</span></li>
	<li>
		<span class="tag">&lt;</span><span class="tag-name">body</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
	<li class="alt">
		<span class="tag">&lt;</span><span class="tag-name">script</span><span>&nbsp;</span><span class="attribute">language</span><span>=</span><span class="attribute-value">&quot;javascript&quot;</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
	<li>
		<span>/* &nbsp;</span></li>
	<li class="alt">
		<span>&nbsp;&nbsp;&nbsp;&nbsp;IE&nbsp;document.getElementById&nbsp;BUG&nbsp;演示DEMO &nbsp;</span></li>
	<li>
		<span>&nbsp;&nbsp;&nbsp;&nbsp;作者:朦朧中的罪惡 &nbsp;</span></li>
	<li class="alt">
		<span>&nbsp;&nbsp;&nbsp;&nbsp;博客:http://be-evil.org &nbsp;</span></li>
	<li>
		<span>*/ &nbsp;</span></li>
	<li class="alt">
		<span>function&nbsp;changeValue() &nbsp;</span></li>
	<li>
		<span>{ &nbsp;</span></li>
	<li class="alt">
		<span>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;</span><span class="attribute">username</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">document</span><span>.getElementById(&#39;username&#39;); &nbsp;</span></li>
	<li>
		<span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">username.value</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">&#39;Whahaha&#39;</span><span>; &nbsp;</span></li>
	<li class="alt">
		<span>} &nbsp;</span></li>
	<li>
		<span class="tag">&lt;/</span><span class="tag-name">script</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
	<li class="alt">
		<span class="tag">&lt;</span><span class="tag-name">form</span><span>&nbsp;</span><span class="attribute">action</span><span>=</span><span class="attribute-value">&quot;IE_BUG2.html&quot;</span><span>&nbsp;</span><span class="attribute">method</span><span>=</span><span class="attribute-value">&quot;get&quot;</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
	<li>
		<span class="tag">&lt;</span><span class="tag-name">p</span><span class="tag">&gt;</span><span>name:</span><span class="tag">&lt;</span><span class="tag-name">input</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;text&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;username&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span class="tag">&lt;/</span><span class="tag-name">p</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
	<li class="alt">
		<span class="tag">&lt;</span><span class="tag-name">p</span><span class="tag">&gt;</span><span>name2:</span><span class="tag">&lt;</span><span class="tag-name">input</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;text&quot;</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;username&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;name&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span class="tag">&lt;/</span><span class="tag-name">p</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
	<li>
		<span class="tag">&lt;</span><span class="tag-name">p</span><span class="tag">&gt;</span><span class="tag">&lt;</span><span class="tag-name">input</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;button&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;改变&quot;</span><span>&nbsp;</span><span class="attribute">onclick</span><span>=</span><span class="attribute-value">&quot;changeValue();&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span class="tag">&lt;/</span><span class="tag-name">p</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
	<li class="alt">
		<span class="tag">&lt;/</span><span class="tag-name">form</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
	<li>
		<span class="tag">&lt;/</span><span class="tag-name">body</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
	<li class="alt">
		<span class="tag">&lt;/</span><span class="tag-name">html</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
</ol>
<p>
	&nbsp;</p>
<p>
	很简单的一段代码,看上去似乎没有任何错误,但是在IE下点击改变按钮后,被改变值的对象居然是第一个name属性为username的input对象.而不是第二个id属性为username的对象.&nbsp;</p>
<p>
	&nbsp;</p>
<p>
	&nbsp;</p>
<p>
	&nbsp;</p>
<p>
	<strong>如何避免这个问题?</strong></p>
<p>
	&nbsp;</p>
<p>
	方法一：尽量避免在页面中出现name与id属性相同的对象</p>
<p>
	&nbsp;</p>
<p>
	方法二：利用JavaScript的特点,重写document.getElementById</p>
<p>
	&nbsp;</p>
<p>
	下面j解决问题的方法和思路是根据国外某位兄弟的经验翻译过来,原文在<a href="http://www.sixteensmallstones.org/ie-javascript-bugs-overriding-internet-explorers-documentgetelementbyid-to-be-w3c-compliant-exposes-an-additional-bug-in-getattributes" target="_blank">这里</a>,这里非常感谢他的文章给我作参考!</p>
<p>
	&nbsp;</p>
<p>
	1.首先初步的尝试复写document.getElementById的方法</p>
<p>
	&nbsp;</p>
<pre></pre>
<ol class="dp-c">
	<li class="alt">
		<pre><span><span class="keyword">if</span><span>&nbsp;(/msie/i.test&nbsp;(navigator.userAgent))&nbsp;</span><span class="comment">//根据userAgent确定用户使用IE浏览器 </span><span>&nbsp;</span></span></pre></li>
	<li>
		<span>{ &nbsp;</span></li>
	<li class="alt">
		<span>&nbsp;&nbsp;&nbsp;&nbsp;document.nativeGetElementById&nbsp;=&nbsp;document.getElementById; &nbsp;</span></li>
	<li>
		<span>&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById&nbsp;=&nbsp;</span><span class="keyword">function</span><span>(id) &nbsp;</span></li>
	<li class="alt">
		<span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span></li>
	<li>
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;elem&nbsp;=&nbsp;document.nativeGetElementById(id); &nbsp;</span></li>
	<li class="alt">
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(elem) &nbsp;</span></li>
	<li>
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span></li>
	<li class="alt">
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//确定id相同 </span><span>&nbsp;</span></li>
	<li>
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(elem.id&nbsp;==&nbsp;id) &nbsp;</span></li>
	<li class="alt">
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span></li>
	<li>
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;elem; &nbsp;</span></li>
	<li class="alt">
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;</span></li>
	<li>
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">else</span><span>&nbsp;</span></li>
	<li class="alt">
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span></li>
	<li>
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//如果没有ID相同的,那么就遍历所有元素的集合找到id相同的元素 </span><span>&nbsp;</span></li>
	<li class="alt">
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>(</span><span class="keyword">var</span><span>&nbsp;i=1;i&lt;document.all[id].length;i++) &nbsp;</span></li>
	<li>
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span></li>
	<li class="alt">
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(document.all[id][i].id&nbsp;==&nbsp;id) &nbsp;</span></li>
	<li>
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span></li>
	<li class="alt">
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;document.all[id][i]; &nbsp;</span></li>
	<li>
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;</span></li>
	<li class="alt">
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;</span></li>
	<li>
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;</span></li>
	<li class="alt">
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;</span></li>
	<li>
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">null</span><span>; &nbsp;</span></li>
	<li class="alt">
		<span>&nbsp;&nbsp;&nbsp;&nbsp;}; &nbsp;</span></li>
	<li>
		<span>}&nbsp;</span></li>
</ol>
<p>
	&nbsp;</p>
<p>
	看起来似乎没有任何问题,但是在IE7下的某些情况中又会引出一个<strong>getAttribute()</strong>方法的问题.</p>
<p>
	&nbsp;</p>
<p>
	看代码:</p>
<p>
	&nbsp;</p>
<pre></pre>
<ol class="dp-xml">
	<li class="alt">
		<pre><span><span class="tag">&lt;</span><span class="tag-name">html</span><span class="tag">&gt;</span><span>&nbsp;</span></span></pre></li>
	<li>
		<span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">head</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
	<li class="alt">
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">title</span><span class="tag">&gt;</span><span>Demonstrate&nbsp;IE7&nbsp;getAttribute()&nbsp;bug</span><span class="tag">&lt;/</span><span class="tag-name">title</span><span class="tag">&gt;</span><span>&nbsp; &nbsp;</span></li>
	<li>
		<span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">head</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
	<li class="alt">
		<span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">body</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
	<li>
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">form</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;myForm1&quot;</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
	<li class="alt">
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">input</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;user_id&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;user_id&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;text&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;</span></li>
	<li>
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">form</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
	<li class="alt">
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">form</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;myForm2&quot;</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
	<li>
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">input</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;id&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;id&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;text&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;</span></li>
	<li class="alt">
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">form</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
	<li>
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">script</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;text/javascript&quot;</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
	<li class="alt">
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;</span><span class="attribute">formElement1</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">document</span><span>.getElementById(&#39;myForm1&#39;); &nbsp;</span></li>
	<li>
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;</span><span class="attribute">formElement2</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">document</span><span>.getElementById(&#39;myForm2&#39;); &nbsp;</span></li>
	<li class="alt">
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(formElement1.getAttribute(&#39;id&#39;)+&nbsp;&quot;\n&quot;&nbsp;+&nbsp;formElement2.getAttribute(&#39;id&#39;)); &nbsp;</span></li>
	<li>
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">script</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
	<li class="alt">
		<span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">body</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
	<li>
		<span class="tag">&lt;/</span><span class="tag-name">html</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
</ol>
<p>
	&nbsp;</p>
<p>
	这个情况出现在表单中,如果有一个表单元素name的值为id的时候</p>
<p>
	&nbsp;</p>
<p>
	在火狐下我们得到的结果是</p>
<p>
	&nbsp;</p>
<p>
	myForm1 myForm2</p>
<p>
	&nbsp;</p>
<p>
	但是在IE7下面,却变成了</p>
<p>
	&nbsp;</p>
<p>
	myForm1 [object]</p>
<p>
	&nbsp;</p>
<p>
	不知怎么的,ie错误的访问了它内部name位id的input元素而不是表单元素本身的id属性.使用formElement2.id的方法替代getAttribute()我们仍然可以得到相同的效果.(参见<a href="http://be-evil.org/showlog-83.html" target="_blank">我先前遇到的一个IE的BUG</a>)</p>
<p>
	&nbsp;</p>
<p>
	幸运的是我们仍然可以通过以下的方式得到正确的元素:</p>
<p>
	&nbsp;</p>
<p>
	formElement2.attributes[&#39;id&#39;].value formElement2.getAttributeNode(&#39;id&#39;).value</p>
<p>
	&nbsp;</p>
<p>
	既然还有以上的隐性BUG,那我们还要再次修改一下我们覆写的document.getElementById方法</p>
<p>
	&nbsp;</p>
<pre></pre>
<ol class="dp-c">
	<li class="alt">
		<pre><span><span class="keyword">if</span><span>&nbsp;(/msie/i.test&nbsp;(navigator.userAgent))&nbsp;</span><span class="comment">//<span class="comment">根据userAgent确定用户使用IE浏览器</span></span></span></pre></li>
	<li>
		<span>{ &nbsp;</span></li>
	<li class="alt">
		<span>&nbsp;&nbsp;&nbsp;&nbsp;document.nativeGetElementById&nbsp;=&nbsp;document.getElementById; &nbsp;</span></li>
	<li>
		<span>&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById&nbsp;=&nbsp;</span><span class="keyword">function</span><span>(id) &nbsp;</span></li>
	<li class="alt">
		<span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span></li>
	<li>
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;elem&nbsp;=&nbsp;document.nativeGetElementById(id); &nbsp;</span></li>
	<li class="alt">
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(elem) &nbsp;</span></li>
	<li>
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span></li>
	<li class="alt">
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//修改后的确认能得到id属性方法 </span><span>&nbsp;</span></li>
	<li>
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(elem.attributes[</span><span class="string">&#39;id&#39;</span><span>].value&nbsp;==&nbsp;id) &nbsp;</span></li>
	<li class="alt">
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span></li>
	<li>
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;elem; &nbsp;</span></li>
	<li class="alt">
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;</span></li>
	<li>
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">else</span><span>&nbsp;</span></li>
	<li class="alt">
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span></li>
	<li>
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment"><span class="comment">//如果没有ID相同的,那么就遍历所有元素的集合找到id相同的元素</span> </span><span>&nbsp;</span></li>
	<li class="alt">
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>(</span><span class="keyword">var</span><span>&nbsp;i=1;i&lt;document.all[id].length;i++) &nbsp;</span></li>
	<li>
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span></li>
	<li class="alt">
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(document.all[id][i].attributes[</span><span class="string">&#39;id&#39;</span><span>].value&nbsp;==&nbsp;id) &nbsp;</span></li>
	<li>
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span></li>
	<li class="alt">
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;document.all[id][i]; &nbsp;</span></li>
	<li>
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;</span></li>
	<li class="alt">
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;</span></li>
	<li>
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;</span></li>
	<li class="alt">
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;</span></li>
	<li>
		<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">null</span><span>; &nbsp;</span></li>
	<li class="alt">
		<span>&nbsp;&nbsp;&nbsp;&nbsp;}; &nbsp;</span></li>
	<li>
		<span>} &nbsp;</span></li>
</ol>
<p>
	&nbsp;</p>
<p>
	OK,这个问题总算解决了,希望我们的微软公司能早日修复这些JavaScript DOM BUG</p><div id="related_log" style="font-size:12px"><p><b>相关日志：</b></p><p><a href="http://be-evil.org/?post=228">优化FireFox速度，移除插件（plugin）的方法</a></p><p><a href="http://be-evil.org/?post=208">PHP解析XML异常问题解决</a></p><p><a href="http://be-evil.org/?post=161">PHP解数学题</a></p><p><a href="http://be-evil.org/?post=195">mysql_fetch_object函数读取SELECT COUNT(*)数据的方法</a></p><p><a href="http://be-evil.org/?post=210">PHP匹配GBK全中文字正则表达式（不包括GBK标点符号）</a></p><p><a href="http://be-evil.org/?post=183">PHP计算相关两个时区的时间差</a></p><p><a href="http://be-evil.org/?post=194">如何删除ckeditor的状态栏</a></p><p><a href="http://be-evil.org/?post=188">ubuntu配置TortoiseHg的对比工具meld</a></p><p><a href="http://be-evil.org/?post=154">JavaScript在不同浏览器下取得鼠标绝对位置函数</a></p><p><a href="http://be-evil.org/?post=151">PHP函数strtotime理解笔记</a></p></div>]]></description>
	<pubDate>Wed, 15 Oct 2008 14:54:03 +0000</pubDate>
	<author>朦朧中的罪惡</author>
	<guid>http://be-evil.org/?post=86</guid>

</item>
<item>
	<title>Discuz!编辑器附件添加原理不完全研究</title>
	<link>http://be-evil.org/?post=66</link>
	<description><![CDATA[<p>
	Discuz!在6.0版的时候推出了自己的编辑器,除了它常用的编辑功能之外有一个很有特色的功能就是<strong>附件无上传插入.</strong></p>
<p>
	用这个这个功能人都会发现在编辑时只要在本地选择了文件附件无需上传即可将它插入到帖子内容中,图文并排在第一次发贴的时候就可以实现,而不像一些传统程序必须上传了附件才可以插入到编辑器中.</p>
<p>
	作为开发者的我对这个功能实现的方式非常感兴趣,花了一点时间来研读了一下Discuz!编辑器此功能的代码.</p>
<p>
	本文分析的Discuz!版本为6.0,涉及的javascript和php文件包括</p>
<p>
	include/javascript/post_attach.js</p>
<p>
	include/javascript/post_editor.js</p>
<p>
	include/javascript/bbcode.js</p>
<p>
	include/newthread.inc.php</p>
<p>
	<strong>代码版权归康盛创想公司所有</strong></p>
<p>
	</p>
<p>
	首先我们来分析 include/javascript/post_attach.js 中的 插入附件操作</p>
<p>
	实现的过程是大体这样的:</p>
<p>
	1.获得File表单域的值,也就是本地文件路径</p>
<p>
	2.检查文件和浏览器类型,如果是IE切附件是图片格式才开始</p>
<p>
	3.用Dom+IE AlphaImageLoader滤镜把图片加载到一个隐藏的图片中.</p>
<p>
	4.算得图片的高宽后再根据系统设定的缩略图计算图片在编辑器中的大小.</p>
<p>
	5.将得到值写入全局变量中存储,并生成HTML代码插入到编辑器中</p>
<p>
	计算图片宽高和生成插入到编辑器可视化内容的HTML操作函数 insertAttach()</p>
<p>
	<span><span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">/* </span><br />
	</span><span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">&nbsp;&nbsp;&nbsp; Discuz!编辑器附件添加原理不完全研究 </span><br />
	<span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">&nbsp;&nbsp;&nbsp; 作者:朦朧中的罪惡</span><br />
	<span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">&nbsp;&nbsp;&nbsp; 博客:http://be-evil.org</span><br />
	<span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">*/</span><br />
	<br />
	<br />
	<span class="_k" style="font-weight: bold; color: rgb(0, 128, 0);">function</span><span class="_"> </span><span class="_nx">insertAttach</span><span class="_p">(</span><span class="_nx">id</span><span class="_p">)</span><span class="_"> </span><span class="_p">{</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp; </span><span class="_k" style="font-weight: bold; color: rgb(0, 128, 0);">var</span><span class="_"> </span><span class="_nx">localimgpreview</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">=</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;&#39;</span><span class="_o" style="color: rgb(102, 102, 102);">;</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp; </span><span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">//根据附件序号获得对应file对象的值(本地文件地址)</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp; </span><span class="_k" style="font-weight: bold; color: rgb(0, 128, 0);">var</span><span class="_"> </span><span class="_nx">path</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">=</span><span class="_"> </span><span class="_nx">$</span><span class="_p">(</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;attach_&#39;</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_nx">id</span><span class="_p">).</span><span class="_nx">value</span><span class="_o" style="color: rgb(102, 102, 102);">;</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp; </span><span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">//获取文件后缀</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp; </span><span class="_k" style="font-weight: bold; color: rgb(0, 128, 0);">var</span><span class="_"> </span><span class="_nx">ext</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">=</span><span class="_"> </span><span class="_nx">path</span><span class="_p">.</span><span class="_nx">lastIndexOf</span><span class="_p">(</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;.&#39;</span><span class="_p">)</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">==</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">-</span><span class="_mi" style="color: rgb(102, 102, 102);">1</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">?</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;&#39;</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">:</span><span class="_"> </span><span class="_nx">path</span><span class="_p">.</span><span class="_nx">substr</span><span class="_p">(</span><span class="_nx">path</span><span class="_p">.</span><span class="_nx">lastIndexOf</span><span class="_p">(</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;.&#39;</span><span class="_p">)</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_mi" style="color: rgb(102, 102, 102);">1</span><span class="_o" style="color: rgb(102, 102, 102);">,</span><span class="_"> </span><span class="_nx">path</span><span class="_p">.</span><span class="_nx">length</span><span class="_p">).</span><span class="_nx">toLowerCase</span><span class="_p">();</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp; </span><span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">//正则表达式验证文件后缀</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp; </span><span class="_k" style="font-weight: bold; color: rgb(0, 128, 0);">var</span><span class="_"> </span><span class="_nx">re</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">=</span><span class="_"> </span><span class="_k" style="font-weight: bold; color: rgb(0, 128, 0);">new</span><span class="_"> </span><span class="_nb" style="color: rgb(0, 128, 0);">RegExp</span><span class="_p">(</span><span class="_s2" style="color: rgb(186, 33, 33);">&quot;(^|\\s|,)&quot;</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_nx">ext</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_s2" style="color: rgb(186, 33, 33);">&quot;($|\\s|,)&quot;</span><span class="_o" style="color: rgb(102, 102, 102);">,</span><span class="_"> </span><span class="_s2" style="color: rgb(186, 33, 33);">&quot;ig&quot;</span><span class="_p">);</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp; </span><span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">//获得文件名</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp; </span><span class="_k" style="font-weight: bold; color: rgb(0, 128, 0);">var</span><span class="_"> </span><span class="_nx">localfile</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">=</span><span class="_"> </span><span class="_nx">$</span><span class="_p">(</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;attach_&#39;</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_nx">id</span><span class="_p">).</span><span class="_nx">value</span><span class="_p">.</span><span class="_nx">substr</span><span class="_p">(</span><span class="_nx">$</span><span class="_p">(</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;attach_&#39;</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_nx">id</span><span class="_p">).</span><span class="_nx">value</span><span class="_p">.</span><span class="_nx">replace</span><span class="_p">(</span><span class="_sr" style="color: rgb(187, 102, 136);">/\\/g</span><span class="_o" style="color: rgb(102, 102, 102);">,</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;/&#39;</span><span class="_p">).</span><span class="_nx">lastIndexOf</span><span class="_p">(</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;/&#39;</span><span class="_p">)</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_mi" style="color: rgb(102, 102, 102);">1</span><span class="_p">);</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp; </span><span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">//如果路径为空则跳出</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp; </span><span class="_k" style="font-weight: bold; color: rgb(0, 128, 0);">if</span><span class="_p">(</span><span class="_nx">path</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">==</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;&#39;</span><span class="_p">)</span><span class="_"> </span><span class="_p">{</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_k" style="font-weight: bold; color: rgb(0, 128, 0);">return</span><span class="_o" style="color: rgb(102, 102, 102);">;</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp; </span><span class="_p">}</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp; </span><span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">//判断系统允许附件设置是否加载</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp; </span><span class="_k" style="font-weight: bold; color: rgb(0, 128, 0);">if</span><span class="_p">(</span><span class="_nx">extensions</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">!=</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;&#39;</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">&amp;&amp;</span><span class="_"> </span><span class="_p">(</span><span class="_nx">re</span><span class="_p">.</span><span class="_nx">exec</span><span class="_p">(</span><span class="_nx">extensions</span><span class="_p">)</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">==</span><span class="_"> </span><span class="_kc" style="font-weight: bold; color: rgb(0, 128, 0);">null</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">||</span><span class="_"> </span><span class="_nx">ext</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">==</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;&#39;</span><span class="_p">))</span><span class="_"> </span><span class="_p">{</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_nx">alert</span><span class="_p">(</span><span class="_nx">lang</span><span class="_p">[</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;post_attachment_ext_notallowed&#39;</span><span class="_p">]);</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_k" style="font-weight: bold; color: rgb(0, 128, 0);">return</span><span class="_o" style="color: rgb(102, 102, 102);">;</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp; </span><span class="_p">}</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp; </span><span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">//判断当前浏览器是否为IE且文件是图片</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp; </span><span class="_nx">attachexts</span><span class="_p">[</span><span class="_nx">id</span><span class="_p">]</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">=</span><span class="_"> </span><span class="_nx">is_ie</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">&amp;&amp;</span><span class="_"> </span><span class="_nx">in_array</span><span class="_p">(</span><span class="_nx">ext</span><span class="_o" style="color: rgb(102, 102, 102);">,</span><span class="_"> </span><span class="_p">[</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;gif&#39;</span><span class="_o" style="color: rgb(102, 102, 102);">,</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;jpeg&#39;</span><span class="_o" style="color: rgb(102, 102, 102);">,</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;jpg&#39;</span><span class="_o" style="color: rgb(102, 102, 102);">,</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;png&#39;</span><span class="_o" style="color: rgb(102, 102, 102);">,</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;bmp&#39;</span><span class="_p">])</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">?</span><span class="_"> </span><span class="_mi" style="color: rgb(102, 102, 102);">2</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">:</span><span class="_"> </span><span class="_mi" style="color: rgb(102, 102, 102);">1</span><span class="_o" style="color: rgb(102, 102, 102);">;</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp; </span><span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">//浏览器是IE且文件是图片</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp; </span><span class="_k" style="font-weight: bold; color: rgb(0, 128, 0);">if</span><span class="_p">(</span><span class="_nx">attachexts</span><span class="_p">[</span><span class="_nx">id</span><span class="_p">]</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">==</span><span class="_"> </span><span class="_mi" style="color: rgb(102, 102, 102);">2</span><span class="_p">)</span><span class="_"> </span><span class="_p">{</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">/* </span><br />
	<span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * img_hidden 是一个隐藏的 img 位于 id 为 posteditor_bottom 的div 中 </span><br />
	<span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">//设定图片 alt 属性为附件序号</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_nx">$</span><span class="_p">(</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;img_hidden&#39;</span><span class="_p">).</span><span class="_nx">alt</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">=</span><span class="_"> </span><span class="_nx">id</span><span class="_o" style="color: rgb(102, 102, 102);">;</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">//设定img的滤镜 AlphaImageLoader 的 sizingMethod 属性为 image (增大或减小对象的尺寸边界以适应图片的尺寸) </span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_nx">$</span><span class="_p">(</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;img_hidden&#39;</span><span class="_p">).</span><span class="_nx">filters</span><span class="_p">.</span><span class="_nx">item</span><span class="_p">(</span><span class="_s2" style="color: rgb(186, 33, 33);">&quot;DXImageTransform.Microsoft.AlphaImageLoader&quot;</span><span class="_p">).</span><span class="_nx">sizingMethod</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">=</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;image&#39;</span><span class="_o" style="color: rgb(102, 102, 102);">;</span><br />
	<br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_k" style="font-weight: bold; color: rgb(0, 128, 0);">try</span><span class="_"> </span><span class="_p">{</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">//尝试将本地图片用滤镜加载到 img_hidden 中</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_nx">$</span><span class="_p">(</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;img_hidden&#39;</span><span class="_p">).</span><span class="_nx">filters</span><span class="_p">.</span><span class="_nx">item</span><span class="_p">(</span><span class="_s2" style="color: rgb(186, 33, 33);">&quot;DXImageTransform.Microsoft.AlphaImageLoader&quot;</span><span class="_p">).</span><span class="_nx">src</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">=</span><span class="_"> </span><span class="_nx">$</span><span class="_p">(</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;attach_&#39;</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_nx">id</span><span class="_p">).</span><span class="_nx">value</span><span class="_o" style="color: rgb(102, 102, 102);">;</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_p">}</span><span class="_"> </span><span class="_k" style="font-weight: bold; color: rgb(0, 128, 0);">catch</span><span class="_"> </span><span class="_p">(</span><span class="_nx">e</span><span class="_p">)</span><span class="_"> </span><span class="_p">{</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">//如果失败则提示附件错误,并删除当前的文件上传表单</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_nx">alert</span><span class="_p">(</span><span class="_nx">lang</span><span class="_p">[</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;post_attachment_img_invalid&#39;</span><span class="_p">]);</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_nx">delAttach</span><span class="_p">(</span><span class="_nx">id</span><span class="_p">);</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_k" style="font-weight: bold; color: rgb(0, 128, 0);">return</span><span class="_o" style="color: rgb(102, 102, 102);">;</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_p">}</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">//获得img_hidden本身的高和宽</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_k" style="font-weight: bold; color: rgb(0, 128, 0);">var</span><span class="_"> </span><span class="_nx">wh</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">=</span><span class="_"> </span><span class="_p">{</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;w&#39;</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">:</span><span class="_"> </span><span class="_nx">$</span><span class="_p">(</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;img_hidden&#39;</span><span class="_p">).</span><span class="_nx">offsetWidth</span><span class="_o" style="color: rgb(102, 102, 102);">,</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;h&#39;</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">:</span><span class="_"> </span><span class="_nx">$</span><span class="_p">(</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;img_hidden&#39;</span><span class="_p">).</span><span class="_nx">offsetHeight</span><span class="_p">};</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">//获得图片序号</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_k" style="font-weight: bold; color: rgb(0, 128, 0);">var</span><span class="_"> </span><span class="_nx">aid</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">=</span><span class="_"> </span><span class="_nx">$</span><span class="_p">(</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;img_hidden&#39;</span><span class="_p">).</span><span class="_nx">alt</span><span class="_o" style="color: rgb(102, 102, 102);">;</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">//如果图片高宽超过了系统设定的缩略图高宽则获得系统设定的缩略图高宽</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_k" style="font-weight: bold; color: rgb(0, 128, 0);">if</span><span class="_p">(</span><span class="_nx">wh</span><span class="_p">[</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;w&#39;</span><span class="_p">]</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">&gt;=</span><span class="_"> </span><span class="_nx">thumbwidth</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">||</span><span class="_"> </span><span class="_nx">wh</span><span class="_p">[</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;h&#39;</span><span class="_p">]</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">&gt;=</span><span class="_"> </span><span class="_nx">thumbheight</span><span class="_p">)</span><span class="_"> </span><span class="_p">{</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_nx">wh</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">=</span><span class="_"> </span><span class="_nx">attachthumbImg</span><span class="_p">(</span><span class="_nx">wh</span><span class="_p">[</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;w&#39;</span><span class="_p">]</span><span class="_o" style="color: rgb(102, 102, 102);">,</span><span class="_"> </span><span class="_nx">wh</span><span class="_p">[</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;h&#39;</span><span class="_p">]);</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_p">}</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">//附件高宽数组索引赋值</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_nx">attachwh</span><span class="_p">[</span><span class="_nx">id</span><span class="_p">]</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">=</span><span class="_"> </span><span class="_nx">wh</span><span class="_o" style="color: rgb(102, 102, 102);">;</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">//调整img_hidden的高宽</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_nx">$</span><span class="_p">(</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;img_hidden&#39;</span><span class="_p">).</span><span class="_nx">style</span><span class="_p">.</span><span class="_nx">width</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">=</span><span class="_"> </span><span class="_nx">wh</span><span class="_p">[</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;w&#39;</span><span class="_p">]</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_nx">$</span><span class="_p">(</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;img_hidden&#39;</span><span class="_p">).</span><span class="_nx">style</span><span class="_p">.</span><span class="_nx">height</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">=</span><span class="_"> </span><span class="_nx">wh</span><span class="_p">[</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;h&#39;</span><span class="_p">];</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">//设定img的滤镜 AlphaImageLoader 的 sizingMethod 属性为 scale (缩放图片以适应对象的尺寸边界) </span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_nx">$</span><span class="_p">(</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;img_hidden&#39;</span><span class="_p">).</span><span class="_nx">filters</span><span class="_p">.</span><span class="_nx">item</span><span class="_p">(</span><span class="_s2" style="color: rgb(186, 33, 33);">&quot;DXImageTransform.Microsoft.AlphaImageLoader&quot;</span><span class="_p">).</span><span class="_nx">sizingMethod</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">=</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;scale&#39;</span><span class="_o" style="color: rgb(102, 102, 102);">;</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">//生成一个查看缩略图的 Div</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_nx">div</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">=</span><span class="_"> </span><span class="_nb" style="color: rgb(0, 128, 0);">document</span><span class="_p">.</span><span class="_nx">createElement</span><span class="_p">(</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;div&#39;</span><span class="_p">);</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">//根据附件编号设定其id</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_nx">div</span><span class="_p">.</span><span class="_nx">id</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">=</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;localimgpreview_&#39;</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_nx">id</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;_menu&#39;</span><span class="_o" style="color: rgb(102, 102, 102);">;</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">//设定该层为不可见</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_nx">div</span><span class="_p">.</span><span class="_nx">style</span><span class="_p">.</span><span class="_nx">display</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">=</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;none&#39;</span><span class="_o" style="color: rgb(102, 102, 102);">;</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">//设定层的样式</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_nx">div</span><span class="_p">.</span><span class="_nx">style</span><span class="_p">.</span><span class="_nx">marginLeft</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">=</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;20px&#39;</span><span class="_o" style="color: rgb(102, 102, 102);">;</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_nx">div</span><span class="_p">.</span><span class="_nx">className</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">=</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;popupmenu_popup&#39;</span><span class="_o" style="color: rgb(102, 102, 102);">;</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">//插入该层到body中</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_nb" style="color: rgb(0, 128, 0);">document</span><span class="_p">.</span><span class="_nx">body</span><span class="_p">.</span><span class="_nx">appendChild</span><span class="_p">(</span><span class="_nx">div</span><span class="_p">);</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">//将图片插入到层中</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_nx">div</span><span class="_p">.</span><span class="_nx">innerHTML</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">=</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;&lt;img style=&quot;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=\&#39;scale\&#39;,src=\&#39;&#39;</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_nx">$</span><span class="_p">(</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;attach_&#39;</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_nx">id</span><span class="_p">).</span><span class="_nx">value</span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;\&#39;);width:&#39;</span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_nx">wh</span><span class="_p">[</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;w&#39;</span><span class="_p">]</span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;;height:&#39;</span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_nx">wh</span><span class="_p">[</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;h&#39;</span><span class="_p">]</span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;&quot; src=\&#39;images/common/none.gif\&#39; border=&quot;0&quot; aid=&quot;attach_&#39;</span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_nx">aid</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;&quot; alt=&quot;&quot; /&gt;&#39;</span><span class="_o" style="color: rgb(102, 102, 102);">;</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp; </span><span class="_p">}</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp; </span><span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">//生成附件后的 [删除] [插入] [图片序号] [图片名称] 按钮</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp; </span><span class="_nx">$</span><span class="_p">(</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;localfile_&#39;</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_nx">id</span><span class="_p">).</span><span class="_nx">innerHTML</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">=</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;&lt;a href=&quot;###delAttach&quot; onclick=&quot;delAttach(&#39;</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_nx">id</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;)&quot;&gt;[&#39;</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_nx">lang</span><span class="_p">[</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;post_attachment_deletelink&#39;</span><span class="_p">]</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;]&lt;/a&gt; &lt;a href=&quot;###insertAttach&quot; title=&quot;&#39;</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_nx">lang</span><span class="_p">[</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;post_attachment_insert&#39;</span><span class="_p">]</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;&quot; onclick=&quot;insertAttachtext(&#39;</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_nx">id</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;);return false;&quot;&gt;[&#39;</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_nx">lang</span><span class="_p">[</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;post_attachment_insertlink&#39;</span><span class="_p">]</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;]&lt;/a&gt; &#39;</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_p">(</span><span class="_nx">attachexts</span><span class="_p">[</span><span class="_nx">id</span><span class="_p">]</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">==</span><span class="_"> </span><span class="_mi" style="color: rgb(102, 102, 102);">2</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">?</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;&lt;span id=&quot;localimgpreview_&#39;</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_nx">id</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;&quot; onmouseover=&quot;showMenu(this.id, 0, 0, 1, 0)&quot;&gt; &lt;span class=&quot;smalltxt&quot;&gt;[&#39;</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_nx">id</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;]&lt;/span&gt; &lt;a href=&quot;###attachment&quot; onclick=&quot;insertAttachtext(&#39;</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_nx">id</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;);return false;&quot;&gt;&#39;</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_nx">localfile</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;&lt;/a&gt;&lt;/span&gt;&#39;</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">:</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;&lt;span class=&quot;smalltxt&quot;&gt;[&#39;</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_nx">id</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;]&lt;/span&gt; &#39;</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_nx">localfile</span><span class="_p">);</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp; </span><span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">//隐藏当前的file对象</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp; </span><span class="_nx">$</span><span class="_p">(</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;attach_&#39;</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_nx">id</span><span class="_p">).</span><span class="_nx">style</span><span class="_p">.</span><span class="_nx">display</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">=</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;none&#39;</span><span class="_o" style="color: rgb(102, 102, 102);">;</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp; </span><span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">//生成一个新的file对象</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp; </span><span class="_nx">addAttach</span><span class="_p">();</span><br />
	<span class="_p">}</span></p>
<p>
	<span>插入到编辑器的操作函数 insertAttachtext()</span></p>
<p>
	<span class="_"><span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">//插入编辑器操作 @id 附件序号 </span><br />
	</span><span class="_k" style="font-weight: bold; color: rgb(0, 128, 0);">function</span><span class="_"> </span><span class="_nx">insertAttachtext</span><span class="_p">(</span><span class="_nx">id</span><span class="_p">)</span><span class="_"> </span><span class="_p">{</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp; </span><span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">//根据传入的id判断全局数组索引中是否有该对象</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp; </span><span class="_k" style="font-weight: bold; color: rgb(0, 128, 0);">if</span><span class="_p">(</span><span class="_o" style="color: rgb(102, 102, 102);">!</span><span class="_nx">attachexts</span><span class="_p">[</span><span class="_nx">id</span><span class="_p">])</span><span class="_"> </span><span class="_p">{</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_k" style="font-weight: bold; color: rgb(0, 128, 0);">return</span><span class="_o" style="color: rgb(102, 102, 102);">;</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp; </span><span class="_p">}</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp; </span><span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">//检查该对象是否在IE下产生</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp; </span><span class="_k" style="font-weight: bold; color: rgb(0, 128, 0);">if</span><span class="_p">(</span><span class="_nx">attachexts</span><span class="_p">[</span><span class="_nx">id</span><span class="_p">]</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">==</span><span class="_"> </span><span class="_mi" style="color: rgb(102, 102, 102);">2</span><span class="_p">)</span><span class="_"> </span><span class="_p">{</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">/*</span><br />
	<span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *</span><br />
	<span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp; 检查编辑器是discuz代码插入模式还是所见即所得模式</span><br />
	<span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp; 所见即所得模式则往编辑器中插入隐藏层中的img HTML代码</span><br />
	<span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp; 代码插入模式则插入 &quot;[localimg=高度,宽度]附件序号[/localimg]&quot; 代码</span><br />
	<span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *</span><br />
	<span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_nx">bbinsert</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">&amp;&amp;</span><span class="_"> </span><span class="_nx">wysiwyg</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">?</span><span class="_"> </span><span class="_nx">insertText</span><span class="_p">(</span><span class="_nx">$</span><span class="_p">(</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;localimgpreview_&#39;</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_nx">id</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;_menu&#39;</span><span class="_p">).</span><span class="_nx">innerHTML</span><span class="_o" style="color: rgb(102, 102, 102);">,</span><span class="_"> </span><span class="_kc" style="font-weight: bold; color: rgb(0, 128, 0);">false</span><span class="_p">)</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">:</span><span class="_"> </span><span class="_nx">AddText</span><span class="_p">(</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;[localimg=&#39;</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_nx">attachwh</span><span class="_p">[</span><span class="_nx">id</span><span class="_p">][</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;w&#39;</span><span class="_p">]</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;,&#39;</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_nx">attachwh</span><span class="_p">[</span><span class="_nx">id</span><span class="_p">][</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;h&#39;</span><span class="_p">]</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;]&#39;</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_nx">id</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;[/localimg]&#39;</span><span class="_p">);</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp; </span><span class="_p">}</span><span class="_"> </span><span class="_k" style="font-weight: bold; color: rgb(0, 128, 0);">else</span><span class="_"> </span><span class="_p">{</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_c" style="color: rgb(64, 128, 128); font-style: italic;">//在其他浏览器下直接插入 &quot;[local]附件序号[/local]&quot; 代码</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="_nx">bbinsert</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">&amp;&amp;</span><span class="_"> </span><span class="_nx">wysiwyg</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">?</span><span class="_"> </span><span class="_nx">insertText</span><span class="_p">(</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;[local]&#39;</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_nx">id</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;[/local]&#39;</span><span class="_o" style="color: rgb(102, 102, 102);">,</span><span class="_"> </span><span class="_kc" style="font-weight: bold; color: rgb(0, 128, 0);">false</span><span class="_p">)</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">:</span><span class="_"> </span><span class="_nx">AddText</span><span class="_p">(</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;[local]&#39;</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_nx">id</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;[/local]&#39;</span><span class="_p">);</span><br />
	<span class="_">&nbsp;&nbsp;&nbsp; </span><span class="_p">}</span><br />
	<span class="_p">}</span></p>
<div>
	<strong>读到这里我产生了一个疑问:</strong></div>
<div>
	在所见即所得模式下插入的是HTML代码,并未插入Discuz!代码,同样,在Discuz!代码模式下插入的是Discuz!代码而没有插入HTML代码.但是我点击切换模式后对应的代码却会出现在编辑器中,这是如何实现的?</div>
<div>
	&nbsp;</div>
<div>
	经过分析,原来编辑器在切换模式的时候会对内容代码使用正则表达式进行替换操作</div>
<div>
	&nbsp;</div>
<div>
	在include/javascript/bbcode.js 第96行 是将 Discuz!代码转换为HTML代码的操作</div>
<div>
	&nbsp;</div>
<div>
	<span class="_nx">str</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">=</span><span class="_"> </span><span class="_nx">str</span><span class="_p">.</span><span class="_nx">replace</span><span class="_p">(</span><span class="_sr" style="color: rgb(187, 102, 136);">/\[localimg=(\d{1,4}),(\d{1,4})\](\d+)\[\/localimg\]/ig</span><span class="_o" style="color: rgb(102, 102, 102);">,</span><span class="_"> </span><span class="_k" style="font-weight: bold; color: rgb(0, 128, 0);">function</span><span class="_"> </span><span class="_p">(</span><span class="_nx">$1</span><span class="_o" style="color: rgb(102, 102, 102);">,</span><span class="_"> </span><span class="_nx">$2</span><span class="_o" style="color: rgb(102, 102, 102);">,</span><span class="_"> </span><span class="_nx">$3</span><span class="_o" style="color: rgb(102, 102, 102);">,</span><span class="_"> </span><span class="_nx">$4</span><span class="_p">)</span><span class="_"> </span><span class="_p">{</span><span class="_k" style="font-weight: bold; color: rgb(0, 128, 0);">if</span><span class="_p">(</span><span class="_nx">$</span><span class="_p">(</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;attach_&#39;</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_nx">$4</span><span class="_p">))</span><span class="_"> </span><span class="_p">{</span><span class="_k" style="font-weight: bold; color: rgb(0, 128, 0);">var</span><span class="_"> </span><span class="_nx">src</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">=</span><span class="_"> </span><span class="_nx">$</span><span class="_p">(</span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;attach_&#39;</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_nx">$4</span><span class="_p">).</span><span class="_nx">value</span><span class="_o" style="color: rgb(102, 102, 102);">;</span><span class="_"> </span><span class="_k" style="font-weight: bold; color: rgb(0, 128, 0);">if</span><span class="_p">(</span><span class="_nx">src</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">!=</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;&#39;</span><span class="_p">)</span><span class="_"> </span><span class="_k" style="font-weight: bold; color: rgb(0, 128, 0);">return</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;&lt;img style=&quot;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=\&#39;scale\&#39;,src=\&#39;&#39;</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_nx">src</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;\&#39;);width:&#39;</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_nx">$2</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;;height=&#39;</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_nx">$3</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;&quot; src=\&#39;images/common/none.gif\&#39; border=&quot;0&quot; aid=&quot;attach_&#39;</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_nx">$4</span><span class="_"> </span><span class="_o" style="color: rgb(102, 102, 102);">+</span><span class="_"> </span><span class="_s1" style="color: rgb(186, 33, 33);">&#39;&quot; alt=&quot;&quot; /&gt;&#39;</span><span class="_o" style="color: rgb(102, 102, 102);">;</span><span class="_p">}});</span></div>
<p>
	将HTML代码转换为Discuz!代码在277-305行</p>
<div class="source">
	function imgtag(attributes) {<br />
	&nbsp;var width = &#39;&#39;;<br />
	&nbsp;var height = &#39;&#39;;</div>
<div class="source">
	&nbsp;re = /src=([&quot;&#39;]?)([\s\S]*?)(\1)/i;<br />
	&nbsp;var matches = re.exec(attributes);<br />
	&nbsp;if(matches != null) {<br />
	&nbsp;&nbsp;var src = matches[2];<br />
	&nbsp;} else {<br />
	&nbsp;&nbsp;return &#39;&#39;;<br />
	&nbsp;}</div>
<div class="source">
	&nbsp;re = /width\s?:\s?(\d{1,4})(px)?/ig;<br />
	&nbsp;var matches = re.exec(attributes);<br />
	&nbsp;if(matches != null) {<br />
	&nbsp;&nbsp;width = matches[1];<br />
	&nbsp;}</div>
<div class="source">
	&nbsp;re = /height\s?:\s?(\d{1,4})(px)?/ig;<br />
	&nbsp;var matches = re.exec(attributes);<br />
	&nbsp;if(matches != null) {<br />
	&nbsp;&nbsp;height = matches[1];<br />
	&nbsp;}</div>
<div class="source">
	&nbsp;if(!width || !height) {<br />
	&nbsp;&nbsp;re = /width=([&quot;&#39;]?)(\d+)(\1)/i;<br />
	&nbsp;&nbsp;var matches = re.exec(attributes);<br />
	&nbsp;&nbsp;if(matches != null) {<br />
	&nbsp;&nbsp;&nbsp;width = matches[2];<br />
	&nbsp;&nbsp;}</div>
<div class="source">
	&nbsp;&nbsp;re = /height=([&quot;&#39;]?)(\d+)(\1)/i;<br />
	&nbsp;&nbsp;var matches = re.exec(attributes);<br />
	&nbsp;&nbsp;if(matches != null) {<br />
	&nbsp;&nbsp;&nbsp;height = matches[2];<br />
	&nbsp;&nbsp;}<br />
	&nbsp;}</div>
<div class="source">
	&nbsp;re = /aid=([&quot;&#39;]?)attach_(\d+)(\1)/i;<br />
	&nbsp;var matches = re.exec(attributes);<br />
	&nbsp;var imgtag = &#39;img&#39;;<br />
	&nbsp;if(matches != null) {<br />
	&nbsp;&nbsp;imgtag = &#39;localimg&#39;;<br />
	&nbsp;&nbsp;src = matches[2];<br />
	&nbsp;}<br />
	&nbsp;re = /aid=([&quot;&#39;]?)attachimg_(\d+)(\1)/i;<br />
	&nbsp;var matches = re.exec(attributes);<br />
	&nbsp;if(matches != null) {<br />
	&nbsp;&nbsp;return &#39;[attachimg]&#39; + matches[2] + &#39;[/attachimg]&#39;;<br />
	&nbsp;}<br />
	&nbsp;return width &gt; 0 &amp;&amp; height &gt; 0 ?<br />
	&nbsp;&nbsp;&#39;[&#39; + imgtag + &#39;=&#39; + width + &#39;,&#39; + height + &#39;]&#39; + src + &#39;[/&#39; + imgtag + &#39;]&#39; :<br />
	&nbsp;&nbsp;&#39;[img]&#39; + src + &#39;[/img]&#39;;<br />
	}</div>
<div class="source">
	&nbsp;</div>
<div class="source">
	虽然这个功能只有IE Only。但是的确能够提高不少的用户体验，同时我非常佩服Discuz!团队的解决问题的思想。</div><div id="related_log" style="font-size:12px"><p><b>相关日志：</b></p><p><a href="http://be-evil.org/?post=228">优化FireFox速度，移除插件（plugin）的方法</a></p><p><a href="http://be-evil.org/?post=205">PHP上传带有单引号文件名的文件导致文件名被截断的bug</a></p><p><a href="http://be-evil.org/?post=208">PHP解析XML异常问题解决</a></p><p><a href="http://be-evil.org/?post=161">PHP解数学题</a></p><p><a href="http://be-evil.org/?post=195">mysql_fetch_object函数读取SELECT COUNT(*)数据的方法</a></p><p><a href="http://be-evil.org/?post=211">PHP实现html标签补全</a></p><p><a href="http://be-evil.org/?post=210">PHP匹配GBK全中文字正则表达式（不包括GBK标点符号）</a></p><p><a href="http://be-evil.org/?post=183">PHP计算相关两个时区的时间差</a></p><p><a href="http://be-evil.org/?post=194">如何删除ckeditor的状态栏</a></p><p><a href="http://be-evil.org/?post=181">ubuntu下PHP5.3安装xdebug后var_dump输出没有格式化的问题</a></p></div>]]></description>
	<pubDate>Fri, 13 Jun 2008 05:39:30 +0000</pubDate>
	<author>朦朧中的罪惡</author>
	<guid>http://be-evil.org/?post=66</guid>

</item>
<item>
	<title>Pro JavaScript系列讲座(3):继承</title>
	<link>http://be-evil.org/?post=65</link>
	<description><![CDATA[<p>
	<strong>本文系转载,来源和出处不明</strong></p>
<p>
	JavaScript的继承需要首先明确的是，它是模拟的，而不是真正（精确）的实现了继承。或者可以这样说，JavaScript的继承更倾向于由使用者自己来实现。</p>
<p>
	</p>
<p>
	<strong>对象伪装法 </strong><strong>(Object Masquerading)</strong></p>
<p>
	对象伪装法实际是程序员为了实现继承的Trick。</p>
<p>
	<strong>继承：</strong>ClassB继承ClassA，注意delete this.newMethod的使用。</p>
<p>
	<a href="http://be-evil.org/uploadfile/200806/b5e9b4f86ce43ca65bd79c894c4a924c20080612212856.gif" target="_blank"><img alt="附件[ematt:95] " border="0" src="http://be-evil.org/uploadfile/200806/b5e9b4f86ce43ca65bd79c894c4a924c20080612212856.gif" /></a></p>
<p>
	<strong>多重继承：</strong>ClassZ继承自ClassX与ClassY</p>
<p>
	<a href="http://be-evil.org/uploadfile/200806/274a01ad7ad7ad7d73d5f0b399ae5db220080612212856.gif" target="_blank"><img alt="附件[ematt:96] " border="0" src="http://be-evil.org/uploadfile/200806/274a01ad7ad7ad7d73d5f0b399ae5db220080612212856.gif" /></a></p>
<p>
	上述的实现有一个Gotcha，当ClassX与ClassY有同名的属性或方法时，因为ClassY后初始化，所以会覆盖掉ClassX的同名方法或属性。</p>
<p>
	&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;</p>
<p>
	<strong>使用</strong><strong>call()</strong><strong>方法实现：</strong></p>
<p>
	call()方法的第一参数为被当作This的对象，其他参数直接被传给funciton，通过使用Call(),我们也可以实现继承：<br />
	<a href="http://be-evil.org/uploadfile/200806/068ae40523a24c9ef54edefd375e542d20080612212856.gif" target="_blank"><img alt="附件[ematt:97] " border="0" src="http://be-evil.org/uploadfile/200806/068ae40523a24c9ef54edefd375e542d20080612212856.gif" /></a></p>
<p>
	&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;<br />
	<strong>使用</strong><strong>Apply()</strong><strong>方法实现：</strong></p>
<p>
	Apply()方法只有两个参数，第一个与call()一样，被当作this；第二个是被传入function的参数数组，使用Apply()的好处是你可以使用function的arguments对象直接当作第二参数。</p>
<p>
	<a href="http://be-evil.org/uploadfile/200806/8f173d0eaffc4b90c0c0361b8f37cc1720080612212856.gif" target="_blank"><img alt="附件[ematt:98] " border="0" src="http://be-evil.org/uploadfile/200806/8f173d0eaffc4b90c0c0361b8f37cc1720080612212856.gif" /></a></p>
<p>
	注意：如果使用arguments对象则需保证参数顺序与ClassA一致。<br />
	&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;<br />
	<strong>使用</strong><strong>Prototype</strong><strong>链</strong>，要求构造器不能有参数</p>
<p>
	<a href="http://be-evil.org/uploadfile/200806/6a0fe32c3736658bde52846b7df05e0120080612212856.gif" target="_blank"><img alt="附件[ematt:99] " border="0" src="http://be-evil.org/uploadfile/200806/6a0fe32c3736658bde52846b7df05e0120080612212856.gif" /></a></p>
<p>
	好处是可以使用instanceof，对对象进行判断，如果obj为ClassB对象，则instanceof ClassA和ClassB都会为true，这是使用伪装法所不具备的，但是prototype的构造器不能有参数。所以最好的方式是混合法。<br />
	&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;<br />
	<strong>使用混合法 （</strong><strong>The Best Way</strong><strong>）</strong></p>
<p>
	<a href="http://be-evil.org/uploadfile/200806/bde7cf9049e122a728d29f2213bb2b6720080612212856.gif" target="_blank"><img alt="附件[ematt:100] " border="0" src="http://be-evil.org/uploadfile/200806/bde7cf9049e122a728d29f2213bb2b6720080612212856.gif" /></a></p>
<p>
	混合法的缺点是无法多重继承。</p>
<p>
	&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;</p>
<p>
	动态原形的一些问题：主要指xxx.protoype = new xxx() 不能被放在构造器里面，必须放在外面，可是如果要放在外面，那动态原形法本身就失去意义了，因为动态原形法本身就是为了把原形方法放在function的构造器里面，以使得代码风格接近Java。所以最好还是不要用动态原形法了。</p>
<p>
	&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;</p>
<p>
	其它通过工具库实现继承</p>
<p>
	xbObject(<a href="http://archive.bclary.com/xbProjects/">http://archive.bclary.com/xbProjects/</a>)</p>
<p>
	Zinherit （Nicholas C. Zakas的库，写Professional Javascript for web develop</p>]]></description>
	<pubDate>Thu, 12 Jun 2008 13:28:56 +0000</pubDate>
	<author>朦朧中的罪惡</author>
	<guid>http://be-evil.org/?post=65</guid>

</item>
<item>
	<title>在线正则表达式测试工具Regex Tester</title>
	<link>http://be-evil.org/?post=61</link>
	<description><![CDATA[<p>
	最近无意中发现一个在线测试正则表达式的网站<a href="http://regexpal.com/">http://regexpal.com/</a></p>
<p>
	它提供所见即所得的正则表达式匹配方式,将你写的正则和匹配的字符串直接高亮标出,非常方便快捷..</p>
<p>
	&nbsp;<a href="http://be-evil.org/uploadfile/200806/a7a98951e7f0085717601a4a254c8e7520080608232000.gif" target="_blank"><img alt="附件[ematt:94] " border="0" src="http://be-evil.org/uploadfile/200806/a7a98951e7f0085717601a4a254c8e7520080608232000.gif" /></a></p>
<p>
	和emlog 一样 Regex Tester 是开源的,它对于经常要调试正则表达式的程序员来说是开发编程,居家旅行之必备工具...</p>
<p>
	好东西 收了~!</p><div id="related_log" style="font-size:12px"><p><b>相关日志：</b></p><p><a href="http://be-evil.org/?post=194">如何删除ckeditor的状态栏</a></p><p><a href="http://be-evil.org/?post=154">JavaScript在不同浏览器下取得鼠标绝对位置函数</a></p><p><a href="http://be-evil.org/?post=56">Pro JavaScript系列讲座(1)</a></p><p><a href="http://be-evil.org/?post=122">利用javascript闭包特性给setInterval(setTimeout)传递参数</a></p><p><a href="http://be-evil.org/?post=58">Pro JavaScript系列讲座(2):对象基础</a></p><p><a href="http://be-evil.org/?post=116">jquery修复ie6不支持position: fixed;的插件</a></p><p><a href="http://be-evil.org/?post=101">FireFox和IE下使用ajax的一些小问题总结</a></p><p><a href="http://be-evil.org/?post=179">菊花文和边框文实现原理</a></p><p><a href="http://be-evil.org/?post=33">JavaScript得到当前窗口的所有大小值</a></p><p><a href="http://be-evil.org/?post=2">JavaScript生成ifame导致IE报无法打开搜索页的解决办法</a></p></div>]]></description>
	<pubDate>Sun, 08 Jun 2008 15:20:00 +0000</pubDate>
	<author>朦朧中的罪惡</author>
	<guid>http://be-evil.org/?post=61</guid>

</item></channel>
</rss>