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

<channel>
	<title>蓝色的华 &#187; javascript</title>
	<atom:link href="http://bluehua.org/tag/javascript/feed" rel="self" type="application/rss+xml" />
	<link>http://bluehua.org</link>
	<description>分享所学,backup一切~</description>
	<lastBuildDate>Fri, 27 Aug 2010 08:41:16 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>相对完美的设计思路~</title>
		<link>http://bluehua.org/2010/07/22/1394.html</link>
		<comments>http://bluehua.org/2010/07/22/1394.html#comments</comments>
		<pubDate>Wed, 21 Jul 2010 16:27:31 +0000</pubDate>
		<dc:creator>小鹿</dc:creator>
				<category><![CDATA[web dev]]></category>
		<category><![CDATA[all in one]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[web.py]]></category>

		<guid isPermaLink="false">http://bluehua.org/2010/07/22/1394.html</guid>
		<description><![CDATA[有没有可能写一套代码适应以下三种情况:
1. 客户端没有开启javascript，或者使用ucweb一类的弱智浏览器访问时，功能没有影响
2. 客户端开启了javascript，每个页面都有单独加载的js,但是禁用ajax,只帮助用户交互
3. 客户端开启了javascript，为了提高载入速度，尽量使所有操作用ajax完成
略有所得: http://www.blogo2.com
源代码: http://code-of-emptyhua.googlecode.com/svn/trunk/blogo2
没有禁用js的时候，页面切换，表单提交（注册和登录没有用）尽量的使用ajax，而且部分操作会使用弹层(登录后的管理),禁用js之后，则所有操作换成普通表单提交在页面之间跳来跳去。。
还有一个功能没有开启，就是可以选择不用ajax，但是独立开的页面js依然有效。
有兴趣的同学可以check源代码，这种模式的实现:
1. 开发的时候禁用ajax，单个页面开发，而且要求禁用js时业务可以走通，页面内的js和css统一由模板引入。
2. 对需要开启ajax的链接增加hook，例如data-ajax=&#8221;dialog:{}&#8221;,则表明在开启ajax模式后，点击这个链接需要弹窗
3. ajax模式下只需要对单个页面更换特有的模板，动态加载需要的js和css即可。
这种设计的特点:
1. 尽量一个人包前后端。。
2. json不潮了，ajax返回html代码，优点是js不用套页面了，缺点是流量大
over，虽然没有完美的代码，但是我尽量~
&#8212;&#8212;&#8212;&#8211;
post by gmail~
]]></description>
			<content:encoded><![CDATA[<p>有没有可能写一套代码适应以下三种情况:<br />
1. 客户端没有开启javascript，或者使用ucweb一类的弱智浏览器访问时，功能没有影响<br />
2. 客户端开启了javascript，每个页面都有单独加载的js,但是禁用ajax,只帮助用户交互<br />
3. 客户端开启了javascript，为了提高载入速度，尽量使所有操作用ajax完成</p>
<p>略有所得: <a href="http://www.blogo2.com">http://www.blogo2.com</a><br />
源代码: <a href="http://code-of-emptyhua.googlecode.com/svn/trunk/blogo2">http://code-of-emptyhua.googlecode.com/svn/trunk/blogo2</a></p>
<p>没有禁用js的时候，页面切换，表单提交（注册和登录没有用）尽量的使用ajax，而且部分操作会使用弹层(登录后的管理),禁用js之后，则所有操作换成普通表单提交在页面之间跳来跳去。。</p>
<p>还有一个功能没有开启，就是可以选择不用ajax，但是独立开的页面js依然有效。</p>
<p>有兴趣的同学可以check源代码，这种模式的实现:<br />
1. 开发的时候禁用ajax，单个页面开发，而且要求禁用js时业务可以走通，页面内的js和css统一由模板引入。<br />
2. 对需要开启ajax的链接增加hook，例如data-ajax=&#8221;dialog:{}&#8221;,则表明在开启ajax模式后，点击这个链接需要弹窗<br />
3. ajax模式下只需要对单个页面更换特有的模板，动态加载需要的js和css即可。</p>
<p>这种设计的特点:<br />
1. 尽量一个人包前后端。。<br />
2. json不潮了，ajax返回html代码，优点是js不用套页面了，缺点是流量大</p>
<p>over，虽然没有完美的代码，但是我尽量~</p>
<p>&#8212;&#8212;&#8212;&#8211;<br />
post by gmail~</p>
]]></content:encoded>
			<wfw:commentRss>http://bluehua.org/2010/07/22/1394.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>js中简单实现数据和ui绑定</title>
		<link>http://bluehua.org/2010/05/18/1286.html</link>
		<comments>http://bluehua.org/2010/05/18/1286.html#comments</comments>
		<pubDate>Tue, 18 May 2010 09:27:44 +0000</pubDate>
		<dc:creator>小鹿</dc:creator>
				<category><![CDATA[web dev]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://bluehua.org/?p=1286</guid>
		<description><![CDATA[很简单的例子

//计数加一
count ++
//更新ui
jQuery&#40;'#count'&#41;.text&#40;count&#41;;

相信几乎所有前端工程师都会写过上面这样的代码，更新数据，然后更新ui，行云流水般的。 然而也是相当一部分内测bug的起源，数据删除了，ui里的计数没有变，或者ui变了，数据里确没有删除。而在逻辑复杂的应用里，更是很难保证不出这种低级错误。
其实我们可以通过自定义事件，这样重写

this.data_bind&#40;'count', 'change', function&#40;count&#41;
&#123;
    //更新计数
    jQuery&#40;'#count'&#41;.text&#40;count&#41;;
&#125;&#41;;
....
&#160;
this.data_bind&#40;'count', 'change', function&#40;count&#41;
&#123;
    //刷新分页
    refresh_pager&#40;count&#41;;
&#125;&#41;;
&#160;
this.set_data&#40;'count', this.get_data&#40;'count'&#41; + 1&#41;;

上次D2上听金大为讲模板技术，当时感觉耳目一新，最近边写边考虑这些新思想，其实使用现有的自定义事件要简单的多，而且灵活性，适用性更好。
用过flex的同学看完这篇文章肯定会说：靠，你们写js的还真是原始社会。。
]]></description>
			<content:encoded><![CDATA[<p>很简单的例子</p>

<div class="wp_syntax"><div class="code overflow"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">//</span>计数加一
count ++
<span style="color: #000000; font-weight: bold;">//</span>更新ui
jQuery<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #ff0000;">'#count'</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>.text<span style="color: #7a0874; font-weight: bold;">&#40;</span>count<span style="color: #7a0874; font-weight: bold;">&#41;</span>;</pre></div></div>

<p>相信几乎所有前端工程师都会写过上面这样的代码，更新数据，然后更新ui，行云流水般的。 然而也是相当一部分内测bug的起源，数据删除了，ui里的计数没有变，或者ui变了，数据里确没有删除。而在逻辑复杂的应用里，更是很难保证不出这种低级错误。</p>
<p>其实我们可以通过自定义事件，这样重写</p>

<div class="wp_syntax"><div class="code overflow"><pre class="javascript" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">data_bind</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'count'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'change'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>count<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #006600; font-style: italic;">//更新计数</span>
    jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#count'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">text</span><span style="color: #009900;">&#40;</span>count<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
....
&nbsp;
<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">data_bind</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'count'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'change'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>count<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #006600; font-style: italic;">//刷新分页</span>
    refresh_pager<span style="color: #009900;">&#40;</span>count<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">set_data</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'count'</span><span style="color: #339933;">,</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">get_data</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'count'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>上次D2上听金大为讲模板技术，当时感觉耳目一新，最近边写边考虑这些新思想，其实使用现有的自定义事件要简单的多，而且灵活性，适用性更好。</p>
<p>用过flex的同学看完这篇文章肯定会说：靠，你们写js的还真是原始社会。。</p>
]]></content:encoded>
			<wfw:commentRss>http://bluehua.org/2010/05/18/1286.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>js业务框架中对ajax的再次包装</title>
		<link>http://bluehua.org/2010/05/10/1216.html</link>
		<comments>http://bluehua.org/2010/05/10/1216.html#comments</comments>
		<pubDate>Mon, 10 May 2010 08:30:20 +0000</pubDate>
		<dc:creator>小鹿</dc:creator>
				<category><![CDATA[web dev]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://bluehua.org/?p=1216</guid>
		<description><![CDATA[一个简单的load动作，如果简单用任何一个js框架实现

startloding&#40;&#41;;
new ajax&#40;&#123;
    url : 'test.php',
    compete : function&#40;&#41;
    &#123;
         stoploading&#40;&#41;
    &#125;,
    success : function&#40;data&#41;
    &#123;
        try
       [...]]]></description>
			<content:encoded><![CDATA[<p>一个简单的load动作，如果简单用任何一个js框架实现</p>

<div class="wp_syntax"><div class="code overflow"><pre class="javascript" style="font-family:monospace;">startloding<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">new</span> ajax<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
    url <span style="color: #339933;">:</span> <span style="color: #3366CC;">'test.php'</span><span style="color: #339933;">,</span>
    compete <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
         stoploading<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
    success <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>data<span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">try</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #003366; font-weight: bold;">var</span> obj <span style="color: #339933;">=</span> json_decode<span style="color: #009900;">&#40;</span>data<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000066; font-weight: bold;">catch</span><span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #006600; font-style: italic;">//服务异常，未返回json造成异常</span>
            error<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'服务器异常'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000066; font-weight: bold;">return</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #006600; font-style: italic;">//正常的业务逻辑错误</span>
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> json<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'code'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">!==</span> <span style="color: #CC0000;">0</span> <span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            error<span style="color: #009900;">&#40;</span>json<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'desc'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000066; font-weight: bold;">return</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        ...
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
    error <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #006600; font-style: italic;">//网络请求失败造成异常</span>
        error<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'网络异常'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>而一个业务框架对ajax再次包装，成为一个action</p>

<div class="wp_syntax"><div class="code overflow"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">new</span> action<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
    action <span style="color: #339933;">:</span> <span style="color: #3366CC;">'load'</span><span style="color: #339933;">,</span>
    action_name <span style="color: #339933;">:</span> <span style="color: #3366CC;">'加载'</span><span style="color: #339933;">,</span>
    url <span style="color: #339933;">:</span> <span style="color: #3366CC;">'test.php'</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
api.<span style="color: #660066;">add_action</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'load_start'</span><span style="color: #339933;">,</span> startloading<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
api.<span style="color: #660066;">add_action</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'load_complete'</span><span style="color: #339933;">,</span> stoploading<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">//这里的成功不是ajax成功，而是判定json['code']之后action真正的成功，这就要求所有action需要有统一的成功判定标准，和json包装格式</span>
api.<span style="color: #660066;">add_action</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'load_success'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>msg<span style="color: #339933;">,</span> data<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>  .... <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">//这里没有添加异常处理，因为没有特殊需要，所以action会执行默认的错误处理，可能是一个弹窗</span></pre></div></div>

<p>不仅仅是节省了代码，后者有更好的可读性，load动作本身也具有了更好的重用性</p>
<p>具体的框架代码已经在用，还不是很完美，待贴～</p>
]]></content:encoded>
			<wfw:commentRss>http://bluehua.org/2010/05/10/1216.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>wordpress api的js实现版本</title>
		<link>http://bluehua.org/2010/04/10/1084.html</link>
		<comments>http://bluehua.org/2010/04/10/1084.html#comments</comments>
		<pubDate>Fri, 09 Apr 2010 16:43:32 +0000</pubDate>
		<dc:creator>小鹿</dc:creator>
				<category><![CDATA[web dev]]></category>
		<category><![CDATA[action]]></category>
		<category><![CDATA[filter]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://bluehua.org/?p=1084</guid>
		<description><![CDATA[上次提到的一个想法的实现版本,正在应用到偶开发的项目当中~
比wordpress的action和filter增加两个特性

能够添加一个只运行一次的action或者filter
可以通过返回{end:true}这种特殊对象来结束一个action或者filter

这两个特性在web开发里灰常有用

&#60;html&#62;
&#60;script&#62;
//2010.4.10 第一版
&#40;function&#40;ns&#41;
&#123;
    var filters = &#123;&#125;;
    var max_priority = 10;
    var default_priority = 10;
&#160;
    var array_include = function&#40;a, v&#41;
    &#123;
        for &#40; var i = 0, j = a.length; i &#60; j; i [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://bluehua.org/2009/12/22/751.html">上次提到的一个想法的实现版本</a>,正在应用到偶开发的项目当中~<br />
比wordpress的action和filter增加两个特性</p>
<ul>
<li>能够添加一个只运行一次的action或者filter</li>
<li>可以通过返回{end:true}这种特殊对象来结束一个action或者filter</li>
</ul>
<p>这两个特性在web开发里灰常有用</p>

<div class="wp_syntax"><div class="code overflow"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>html<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>script<span style="color: #339933;">&gt;</span>
<span style="color: #006600; font-style: italic;">//2010.4.10 第一版</span>
<span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>ns<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #003366; font-weight: bold;">var</span> filters <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
    <span style="color: #003366; font-weight: bold;">var</span> max_priority <span style="color: #339933;">=</span> <span style="color: #CC0000;">10</span><span style="color: #339933;">;</span>
    <span style="color: #003366; font-weight: bold;">var</span> default_priority <span style="color: #339933;">=</span> <span style="color: #CC0000;">10</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #003366; font-weight: bold;">var</span> array_include <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>a<span style="color: #339933;">,</span> v<span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span> <span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">,</span> j <span style="color: #339933;">=</span> a.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> j<span style="color: #339933;">;</span> i <span style="color: #339933;">++</span> <span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> a<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> v <span style="color: #009900;">&#41;</span> <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #003366; font-weight: bold;">var</span> to_array <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>a<span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #003366; font-weight: bold;">var</span> rt <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span> <span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">,</span> j <span style="color: #339933;">=</span> a.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> j<span style="color: #339933;">;</span> i <span style="color: #339933;">++</span> <span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
           rt.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span>a<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000066; font-weight: bold;">return</span> rt<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #003366; font-weight: bold;">function</span> _set<span style="color: #009900;">&#40;</span>func<span style="color: #339933;">,</span> tag<span style="color: #339933;">,</span> priority<span style="color: #339933;">,</span> key<span style="color: #339933;">,</span> value<span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        func<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'__filter_'</span> <span style="color: #339933;">+</span> tag <span style="color: #339933;">+</span> <span style="color: #3366CC;">'_'</span> <span style="color: #339933;">+</span> priority <span style="color: #339933;">+</span> <span style="color: #3366CC;">'_'</span> <span style="color: #339933;">+</span> key<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> value<span style="color: #339933;">;</span> 
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #003366; font-weight: bold;">function</span> _get<span style="color: #009900;">&#40;</span>func<span style="color: #339933;">,</span> tag<span style="color: #339933;">,</span> priority<span style="color: #339933;">,</span> key<span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">return</span> func<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'__filter_'</span> <span style="color: #339933;">+</span> tag <span style="color: #339933;">+</span> <span style="color: #3366CC;">'_'</span> <span style="color: #339933;">+</span> priority <span style="color: #339933;">+</span> <span style="color: #3366CC;">'_'</span> <span style="color: #339933;">+</span> key<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> 
    <span style="color: #009900;">&#125;</span>
&nbsp;
    ns.<span style="color: #660066;">add_filter</span> <span style="color: #339933;">=</span> ns.<span style="color: #660066;">add_action</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>tag<span style="color: #339933;">,</span> func<span style="color: #339933;">,</span> priority<span style="color: #339933;">,</span> run_once<span style="color: #009900;">&#41;</span> 
    <span style="color: #009900;">&#123;</span>
        run_once <span style="color: #339933;">=</span> run_once <span style="color: #339933;">===</span> undefined <span style="color: #339933;">?</span> <span style="color: #003366; font-weight: bold;">false</span> <span style="color: #339933;">:</span> run_once<span style="color: #339933;">;</span>
        priority <span style="color: #339933;">=</span> priority <span style="color: #339933;">||</span> default_priority<span style="color: #339933;">;</span> 
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span>filters<span style="color: #009900;">&#91;</span>tag<span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span> filters<span style="color: #009900;">&#91;</span>tag<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>   
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span>filters<span style="color: #009900;">&#91;</span>tag<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span>priority<span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span> filters<span style="color: #009900;">&#91;</span>tag<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span>priority<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span>array_include<span style="color: #009900;">&#40;</span>filters<span style="color: #009900;">&#91;</span>tag<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span>priority<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> func<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            filters<span style="color: #009900;">&#91;</span>tag<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span>priority<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span>func<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        _set<span style="color: #009900;">&#40;</span>func<span style="color: #339933;">,</span> tag<span style="color: #339933;">,</span> priority<span style="color: #339933;">,</span> <span style="color: #3366CC;">'run_once'</span><span style="color: #339933;">,</span> run_once<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
    ns.<span style="color: #660066;">add_once_filter</span> <span style="color: #339933;">=</span> ns.<span style="color: #660066;">add_once_action</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>tag<span style="color: #339933;">,</span> func<span style="color: #339933;">,</span> priority<span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        ns.<span style="color: #660066;">add_filter</span><span style="color: #009900;">&#40;</span>tag<span style="color: #339933;">,</span> func<span style="color: #339933;">,</span> priority<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #003366; font-weight: bold;">function</span> filter_or_action<span style="color: #009900;">&#40;</span>ac<span style="color: #339933;">,</span> tag<span style="color: #339933;">,</span> value<span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>filters<span style="color: #009900;">&#91;</span>tag<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #000066; font-weight: bold;">return</span> value<span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> ac <span style="color: #339933;">==</span> <span style="color: #3366CC;">'action'</span> <span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #003366; font-weight: bold;">var</span> args <span style="color: #339933;">=</span> to_array<span style="color: #009900;">&#40;</span>arguments<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            args.<span style="color: #660066;">shift</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            args.<span style="color: #660066;">shift</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #003366; font-weight: bold;">var</span> _cfs <span style="color: #339933;">=</span> filters<span style="color: #009900;">&#91;</span>tag<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
        <span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">1</span><span style="color: #339933;">,</span> func<span style="color: #339933;">;</span> 
        <span style="color: #003366; font-weight: bold;">var</span> rt <span style="color: #339933;">=</span> value<span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span> i <span style="color: #339933;">&lt;=</span> max_priority <span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span>_cfs<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">||</span> _cfs<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">length</span> <span style="color: #339933;">===</span> <span style="color: #CC0000;">0</span> <span style="color: #009900;">&#41;</span> 
            <span style="color: #009900;">&#123;</span>
                i <span style="color: #339933;">++;</span>
                <span style="color: #000066; font-weight: bold;">continue</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
&nbsp;
            <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span> <span style="color: #003366; font-weight: bold;">var</span> j <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">,</span> length <span style="color: #339933;">=</span> _cfs<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> j <span style="color: #339933;">&lt;</span> length<span style="color: #339933;">;</span> j <span style="color: #339933;">++</span> <span style="color: #009900;">&#41;</span>
            <span style="color: #009900;">&#123;</span>
                func <span style="color: #339933;">=</span> _cfs<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
                <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> ac <span style="color: #339933;">==</span> <span style="color: #3366CC;">'action'</span> <span style="color: #009900;">&#41;</span>
                <span style="color: #009900;">&#123;</span>
                    rt <span style="color: #339933;">=</span> func.<span style="color: #660066;">apply</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">,</span> args<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
                <span style="color: #000066; font-weight: bold;">else</span>
                <span style="color: #009900;">&#123;</span>
                    rt <span style="color: #339933;">=</span> func.<span style="color: #660066;">call</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">,</span> rt<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
&nbsp;
                <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> _get<span style="color: #009900;">&#40;</span>func<span style="color: #339933;">,</span> tag<span style="color: #339933;">,</span> i<span style="color: #339933;">,</span> <span style="color: #3366CC;">'run_once'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> 
                <span style="color: #009900;">&#123;</span>
                    _cfs<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">splice</span><span style="color: #009900;">&#40;</span>j<span style="color: #339933;">,</span> <span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    j <span style="color: #339933;">--;</span>
                    length <span style="color: #339933;">--;</span>
                <span style="color: #009900;">&#125;</span>
                <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> rt <span style="color: #339933;">&amp;&amp;</span> rt<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'end'</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span> <span style="color: #000066; font-weight: bold;">return</span> rt<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'value'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">||</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
&nbsp;
            i <span style="color: #339933;">++;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000066; font-weight: bold;">return</span> rt<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
    ns.<span style="color: #660066;">apply_filters</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>tag<span style="color: #339933;">,</span> value<span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">return</span> filter_or_action<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'fitler'</span><span style="color: #339933;">,</span> tag<span style="color: #339933;">,</span> value<span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
    ns.<span style="color: #660066;">do_action</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>tag<span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #003366; font-weight: bold;">var</span> args <span style="color: #339933;">=</span> to_array<span style="color: #009900;">&#40;</span>arguments<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        filter_or_action.<span style="color: #660066;">apply</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'action'</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">concat</span><span style="color: #009900;">&#40;</span>args<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">function</span> log<span style="color: #009900;">&#40;</span>str<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    document.<span style="color: #000066; font-weight: bold;">write</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;p&gt;'</span> <span style="color: #339933;">+</span> str <span style="color: #339933;">+</span> <span style="color: #3366CC;">'&lt;/p&gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">//普通的filter</span>
add_filter<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'status'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>text<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #000066; font-weight: bold;">return</span> text.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/orz/g</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'超人'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
log<span style="color: #009900;">&#40;</span>apply_filters<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'status'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'orzorz'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">//再添加一个filter</span>
add_filter<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'status'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>text<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #000066; font-weight: bold;">return</span> text.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'超人'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'动感'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
log<span style="color: #009900;">&#40;</span>apply_filters<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'status'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'orzorz'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">//添加一个优先级较高的filter,并通过返回包含end字段的对象结束过滤器</span>
add_filter<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'status'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>text<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #009900;">&#123;</span>end<span style="color: #339933;">:</span><span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span> value<span style="color: #339933;">:</span>text<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">5</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
log<span style="color: #009900;">&#40;</span>apply_filters<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'status'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'orzorz'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">//但是下面这个优先级较高的会执行</span>
add_filter<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'status'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>text<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #000066; font-weight: bold;">return</span> text <span style="color: #339933;">+</span> <span style="color: #3366CC;">'管不着我'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
log<span style="color: #009900;">&#40;</span>apply_filters<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'status'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'orzorz'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
log<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'-----------------------------'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
log<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'action测试'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
log<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'-----------------------------'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">//下面是action</span>
add_action<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'ac_success'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>a<span style="color: #339933;">,</span> b<span style="color: #339933;">,</span> c<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    log<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'返回数据:'</span> <span style="color: #339933;">+</span>  a <span style="color: #339933;">+</span> b <span style="color: #339933;">+</span> c<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">//添加一个只会执行一次的action回调</span>
add_once_action<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'ac_success'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>a<span style="color: #339933;">,</span> b<span style="color: #339933;">,</span> c<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    log<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'我只会执行一次的'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
add_action<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'ac_success'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>a<span style="color: #339933;">,</span> b<span style="color: #339933;">,</span> c<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    log<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'俺的优先级比较高'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">5</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
log<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'----------第一次执行----------------'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
do_action<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'ac_success'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'1'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'2'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'3'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
log<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'----------第二次执行----------------'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
do_action<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'ac_success'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'4'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'5'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'6'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
add_action<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'ac_success'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>a<span style="color: #339933;">,</span> b<span style="color: #339933;">,</span> c<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    log<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'全部屏蔽'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #009900;">&#123;</span>end<span style="color: #339933;">:</span><span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span> 
<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
log<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'----------第三次执行----------------'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
do_action<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'ac_success'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'1'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'2'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'3'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;/</span>html<span style="color: #339933;">&gt;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://bluehua.org/2010/04/10/1084.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>例举js中组装类的好处</title>
		<link>http://bluehua.org/2010/04/01/1065.html</link>
		<comments>http://bluehua.org/2010/04/01/1065.html#comments</comments>
		<pubDate>Thu, 01 Apr 2010 14:42:22 +0000</pubDate>
		<dc:creator>小鹿</dc:creator>
				<category><![CDATA[web dev]]></category>
		<category><![CDATA[augmentation]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[oo]]></category>

		<guid isPermaLink="false">http://bluehua.org/?p=1065</guid>
		<description><![CDATA[先举个简单的组装的例子

//纸
var paper = new Paper&#40;&#41;;
//处理下
enable_fire_destory&#40;paper&#41;;
//ok,可以燃烧了..
paper.fire&#40;&#41;;
//猪
var pig = new Pig&#40;&#41;;
enable_fire_destory&#40;pig&#41;;
//不管怎么着,也能着了
pig.fire&#40;&#41;;

这种组装方式用于给毫不相关的对象快速添加一些通用的方法, 用法得当将节省大量代码~
这里举个实际开发中的例子,下面的代码肯定是我们平时经常写的,用于防止一次ajax请求没有完毕就请求第二次

obj = &#123;
....
is_loading : false,
load_sth : function&#40;callback&#41;
&#123;
    if &#40; this.is_loading &#41; return;
    this.is_loading = true;
    new Ajax&#40;&#123;
        url : 'xxx.php',
        onComplete : function&#40;&#41;
 [...]]]></description>
			<content:encoded><![CDATA[<p>先举个简单的组装的例子</p>

<div class="wp_syntax"><div class="code overflow"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">//纸</span>
<span style="color: #003366; font-weight: bold;">var</span> paper <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Paper<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">//处理下</span>
enable_fire_destory<span style="color: #009900;">&#40;</span>paper<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">//ok,可以燃烧了..</span>
paper.<span style="color: #660066;">fire</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">//猪</span>
<span style="color: #003366; font-weight: bold;">var</span> pig <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Pig<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
enable_fire_destory<span style="color: #009900;">&#40;</span>pig<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">//不管怎么着,也能着了</span>
pig.<span style="color: #660066;">fire</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>这种组装方式用于给毫不相关的对象快速添加一些通用的方法, 用法得当将节省大量代码~</p>
<p>这里举个实际开发中的例子,下面的代码肯定是我们平时经常写的,用于防止一次ajax请求没有完毕就请求第二次</p>

<div class="wp_syntax"><div class="code overflow"><pre class="javascript" style="font-family:monospace;">obj <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
....
<span style="color: #660066;">is_loading</span> <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">,</span>
load_sth <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>callback<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">is_loading</span> <span style="color: #009900;">&#41;</span> <span style="color: #000066; font-weight: bold;">return</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">is_loading</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">;</span>
    <span style="color: #003366; font-weight: bold;">new</span> Ajax<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
        url <span style="color: #339933;">:</span> <span style="color: #3366CC;">'xxx.php'</span><span style="color: #339933;">,</span>
        onComplete <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
            <span style="color: #000066; font-weight: bold;">This</span>.<span style="color: #660066;">is_loading</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
....
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></div></div>

<p>使用组装的方法改写</p>

<div class="wp_syntax"><div class="code overflow"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">//组装函数</span>
<span style="color: #003366; font-weight: bold;">function</span> enable_single_thread_ajax<span style="color: #009900;">&#40;</span>obj<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    extend<span style="color: #009900;">&#40;</span>obj<span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span>
        _is_ajax_ing <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">,</span>
        is_ajax_ing <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span>._is_ajax_ing<span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
        ajax <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>params<span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">is_ajax_ing</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #000066; font-weight: bold;">return</span><span style="color: #339933;">;</span>
            <span style="color: #003366; font-weight: bold;">var</span> <span style="color: #000066; font-weight: bold;">This</span> <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">;</span>
            <span style="color: #000066; font-weight: bold;">this</span>._is_ajax_ing <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #003366; font-weight: bold;">var</span> _tmp_func <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #006600; font-style: italic;">//为了保持ajax的参数不变,要做点小牺牲</span>
            <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>params<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'onComplete'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
            <span style="color: #009900;">&#123;</span>
                _tmp_func <span style="color: #339933;">=</span> params<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'onComplete'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
&nbsp;
            params<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'onComplete'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
            <span style="color: #009900;">&#123;</span>
                <span style="color: #000066; font-weight: bold;">This</span>._is_ajax_ing <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span> 
                _tmp_func.<span style="color: #660066;">apply</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">,</span> arguments<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #000066; font-weight: bold;">return</span> Ajax<span style="color: #009900;">&#40;</span>params<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">//还是那个对象 </span>
obj <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span> 
load_sth <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #006600; font-style: italic;">//打完收工了~</span>
    <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">ajax</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
        url <span style="color: #339933;">:</span> <span style="color: #3366CC;">'xxx.php'</span>
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>   
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">//给对象扩充方法</span>
enable_single_thread_ajax<span style="color: #009900;">&#40;</span>obj<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>还可以直接扩展原型,达到扩充类的目的~,以前写过一篇自定义事件的文章,也是用的这种方法 : <a href="http://bluehua.org/2008/09/09/74.html">简单实现js里的自定义事件</a></p>
<p>今天特地翻开没怎么看的&lt;javascript设计模式&gt;,里面定义这种扩展方式为&#8221;掺元类&#8221;,感觉这么翻译不是特好理解&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://bluehua.org/2010/04/01/1065.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>一种字符串代替数组的场合</title>
		<link>http://bluehua.org/2010/02/25/982.html</link>
		<comments>http://bluehua.org/2010/02/25/982.html#comments</comments>
		<pubDate>Thu, 25 Feb 2010 09:22:57 +0000</pubDate>
		<dc:creator>小鹿</dc:creator>
				<category><![CDATA[web dev]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://bluehua.org/?p=982</guid>
		<description><![CDATA[曾经耍过一些小聪明,而且是相当然的,有人问我你做过验证吗,&#8230;.木有,然后也觉得自己很不靠普
下面是验证以前做一个选择器的时候用到的方法,主要是为了加速判断是否已选的操作

&#60;html&#62;
&#60;script&#62;
function ctime&#40;func&#41;
&#123;
    var s = new Date&#40;&#41;.getTime&#40;&#41;;
    func&#40;&#41;;
    return new Date&#40;&#41;.getTime&#40;&#41; - s;
&#125;
var time;
time = ctime&#40;function&#40;&#41;
&#123;
    var i = 0;
    astr = &#91;&#93;;
    while &#40;i &#60; 10000&#41;
    &#123;
       [...]]]></description>
			<content:encoded><![CDATA[<p>曾经耍过一些小聪明,而且是相当然的,有人问我你做过验证吗,&#8230;.木有,然后也觉得自己很不靠普</p>
<p>下面是验证以前做一个选择器的时候用到的方法,主要是为了加速判断是否已选的操作</p>

<div class="wp_syntax"><div class="code overflow"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>html<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>script<span style="color: #339933;">&gt;</span>
<span style="color: #003366; font-weight: bold;">function</span> ctime<span style="color: #009900;">&#40;</span>func<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #003366; font-weight: bold;">var</span> s <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">getTime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    func<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">getTime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> s<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #003366; font-weight: bold;">var</span> time<span style="color: #339933;">;</span>
time <span style="color: #339933;">=</span> ctime<span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>
    astr <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">&lt;</span> <span style="color: #CC0000;">10000</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        astr.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'fasdfasdf'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>         
        i <span style="color: #339933;">++;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
document.<span style="color: #000066; font-weight: bold;">write</span><span style="color: #009900;">&#40;</span>time <span style="color: #339933;">+</span> <span style="color: #3366CC;">'&lt;/br&gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
time <span style="color: #339933;">=</span> ctime<span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>
    sstr <span style="color: #339933;">=</span> <span style="color: #3366CC;">''</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">&lt;</span> <span style="color: #CC0000;">10000</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        sstr <span style="color: #339933;">=</span> sstr <span style="color: #339933;">+</span> <span style="color: #3366CC;">'fasdfasdf'</span><span style="color: #339933;">;</span>         
        i <span style="color: #339933;">++;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
document.<span style="color: #000066; font-weight: bold;">write</span><span style="color: #009900;">&#40;</span>time <span style="color: #339933;">+</span> <span style="color: #3366CC;">'&lt;/br&gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">function</span> is_include<span style="color: #009900;">&#40;</span>arr<span style="color: #339933;">,</span> v<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span> <span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">,</span> j <span style="color: #339933;">=</span> arr.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> j<span style="color: #339933;">;</span> i <span style="color: #339933;">++</span> <span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>arr<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> v<span style="color: #009900;">&#41;</span> <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
time <span style="color: #339933;">=</span> ctime<span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">&lt;</span> <span style="color: #CC0000;">1000</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>is_include<span style="color: #009900;">&#40;</span>astr<span style="color: #339933;">,</span> <span style="color: #3366CC;">'12321423'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #000066; font-weight: bold;">break</span><span style="color: #339933;">;</span>         
        i <span style="color: #339933;">++;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
document.<span style="color: #000066; font-weight: bold;">write</span><span style="color: #009900;">&#40;</span>time <span style="color: #339933;">+</span> <span style="color: #3366CC;">'&lt;/br&gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
time <span style="color: #339933;">=</span> ctime<span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">&lt;</span> <span style="color: #CC0000;">1000</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>sstr.<span style="color: #660066;">indexOf</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'12321423'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!==</span> <span style="color: #339933;">-</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #000066; font-weight: bold;">break</span><span style="color: #339933;">;</span>         
        i <span style="color: #339933;">++;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
document.<span style="color: #000066; font-weight: bold;">write</span><span style="color: #009900;">&#40;</span>time <span style="color: #339933;">+</span> <span style="color: #3366CC;">'&lt;/br&gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;/</span>html<span style="color: #339933;">&gt;</span></pre></div></div>

<p>运行结果<br />
ie6:</p>
<pre>
20
1342
5699
280
</pre>
<p>ie8:</p>
<pre>
30
30
9163
441
</pre>
<p>ff3.6:</p>
<pre>
1
2
111
97
</pre>
]]></content:encoded>
			<wfw:commentRss>http://bluehua.org/2010/02/25/982.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ie下暴力debug js</title>
		<link>http://bluehua.org/2010/02/25/976.html</link>
		<comments>http://bluehua.org/2010/02/25/976.html#comments</comments>
		<pubDate>Thu, 25 Feb 2010 09:03:43 +0000</pubDate>
		<dc:creator>小鹿</dc:creator>
				<category><![CDATA[web dev]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://bluehua.org/?p=976</guid>
		<description><![CDATA[ie下的脚本错误总是很神秘的样子,告诉你哪个行,确不告诉你哪个文件,Visual Studio带了一个调试工具倒是可以,long long ago之前用过一次,老崩溃的样子~
如果你又遇到了猜不透的bug,可以尝试下面的shell~

//现去firefox里收集一份js列表
var alljs = &#91;&#93;;
XN.array.each&#40;document.getElementsByTagName&#40;'script'&#41;,function&#40;i,v&#41;
&#123;
    if &#40;v.src&#41;
    &#123;
        alljs.push&#40;v.src&#41;;
    &#125;
&#125;&#41;;
console.log&#40;alljs.join&#40;'\n'&#41;&#41;;

把列表保存到一个文件,下面跑段shell,把所有js的报错位置的代码打印出来

// 10 100是ie里提示的错误位置
sh ~/bin/get_line.sh /tmp/jslist 10 100

附:

#!/bin/sh
LIST=&#34;$1&#34;
ROW=&#34;$2&#34;
COL=&#34;$3&#34;
&#160;
if &#91; ! -n &#34;$ROW&#34; &#93;;then
    exit
fi
&#160;
echo &#34;行:${ROW}&#34;
echo &#34;列:${COL}&#34;
&#160;
get_row&#40;&#41;
&#123;
    cat /tmp/js_debug_tmp &#124; sed -n &#34;${ROW}p&#34;
&#125;
&#160;
cat &#34;$LIST&#34; [...]]]></description>
			<content:encoded><![CDATA[<p>ie下的脚本错误总是很神秘的样子,告诉你哪个行,确不告诉你哪个文件,Visual Studio带了一个调试工具倒是可以,long long ago之前用过一次,老崩溃的样子~<br />
如果你又遇到了猜不透的bug,可以尝试下面的shell~</p>

<div class="wp_syntax"><div class="code overflow"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">//现去firefox里收集一份js列表</span>
<span style="color: #003366; font-weight: bold;">var</span> alljs <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
XN.<span style="color: #660066;">array</span>.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span>document.<span style="color: #660066;">getElementsByTagName</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'script'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">,</span>v<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>v.<span style="color: #660066;">src</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        alljs.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span>v.<span style="color: #660066;">src</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span>alljs.<span style="color: #660066;">join</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'<span style="color: #000099; font-weight: bold;">\n</span>'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>把列表保存到一个文件,下面跑段shell,把所有js的报错位置的代码打印出来</p>

<div class="wp_syntax"><div class="code overflow"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">//</span> <span style="color: #000000;">10</span> <span style="color: #000000;">100</span>是ie里提示的错误位置
<span style="color: #c20cb9; font-weight: bold;">sh</span> ~<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>get_line.sh <span style="color: #000000; font-weight: bold;">/</span>tmp<span style="color: #000000; font-weight: bold;">/</span>jslist <span style="color: #000000;">10</span> <span style="color: #000000;">100</span></pre></div></div>

<p>附:</p>

<div class="wp_syntax"><div class="code overflow"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/sh</span>
<span style="color: #007800;">LIST</span>=<span style="color: #ff0000;">&quot;$1&quot;</span>
<span style="color: #007800;">ROW</span>=<span style="color: #ff0000;">&quot;$2&quot;</span>
<span style="color: #007800;">COL</span>=<span style="color: #ff0000;">&quot;$3&quot;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #000000; font-weight: bold;">!</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$ROW</span>&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>;<span style="color: #000000; font-weight: bold;">then</span>
    <span style="color: #7a0874; font-weight: bold;">exit</span>
<span style="color: #000000; font-weight: bold;">fi</span>
&nbsp;
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;行:<span style="color: #007800;">${ROW}</span>&quot;</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;列:<span style="color: #007800;">${COL}</span>&quot;</span>
&nbsp;
get_row<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #7a0874; font-weight: bold;">&#123;</span>
    <span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #000000; font-weight: bold;">/</span>tmp<span style="color: #000000; font-weight: bold;">/</span>js_debug_tmp <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">${ROW}</span>p&quot;</span>
<span style="color: #7a0874; font-weight: bold;">&#125;</span>
&nbsp;
<span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$LIST</span>&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #000000; font-weight: bold;">while</span> <span style="color: #c20cb9; font-weight: bold;">read</span> line
<span style="color: #000000; font-weight: bold;">do</span>
    <span style="color: #c20cb9; font-weight: bold;">wget</span> <span style="color: #660033;">-q</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$line</span>&quot;</span> <span style="color: #660033;">-O</span> <span style="color: #000000; font-weight: bold;">/</span>tmp<span style="color: #000000; font-weight: bold;">/</span>js_debug_tmp 
    <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;文件:<span style="color: #007800;">${line}</span>&quot;</span>
    <span style="color: #007800;">row</span>=<span style="color: #ff0000;">&quot;<span style="color: #780078;">`get_row`</span>&quot;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">${COL}</span>&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
        <span style="color: #007800;">row</span>=<span style="color: #ff0000;">&quot;<span style="color: #780078;">`echo \&quot;${row}\&quot; | cut -c ${COL}- `</span>&quot;</span>
    <span style="color: #000000; font-weight: bold;">fi</span>
&nbsp;
    <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$row</span>&quot;</span>
<span style="color: #000000; font-weight: bold;">done</span>
<span style="color: #c20cb9; font-weight: bold;">rm</span> <span style="color: #000000; font-weight: bold;">/</span>tmp<span style="color: #000000; font-weight: bold;">/</span>js_debug_tmp</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://bluehua.org/2010/02/25/976.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>javascript做html字符串的截断</title>
		<link>http://bluehua.org/2010/02/01/927.html</link>
		<comments>http://bluehua.org/2010/02/01/927.html#comments</comments>
		<pubDate>Mon, 01 Feb 2010 12:46:46 +0000</pubDate>
		<dc:creator>小鹿</dc:creator>
				<category><![CDATA[web dev]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[substr]]></category>

		<guid isPermaLink="false">http://bluehua.org/?p=927</guid>
		<description><![CDATA[2010.2.6 日修正
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;
2010.2.3 日修正

&#60;html&#62;
&#60;!-- html字符截断第二版 bug修正 + 2.6日修正--&#62;
&#60;script&#62;
function sub_html_str&#40;str, num&#41;
&#123;
    var reg = new RegExp&#40; '&#60;[^&#62;]+&#62;' , 'g' &#41;;
    var rt, rts = &#91;&#93;, indexs = &#91;&#93;, tstr, endstr, rstr, sstr, endtag, rtstr;
&#160;
    //提取所有的html标签和标签在字符串中的位置 
    while &#40; &#40; rt = reg.exec&#40;str&#41; &#41; != null [...]]]></description>
			<content:encoded><![CDATA[<p>2010.2.6 日修正<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
2010.2.3 日修正</p>

<div class="wp_syntax"><div class="code overflow"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>html<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;!--</span> html字符截断第二版 bug修正 <span style="color: #339933;">+</span> <span style="color: #CC0000;">2.6</span>日修正<span style="color: #339933;">--&gt;</span>
<span style="color: #339933;">&lt;</span>script<span style="color: #339933;">&gt;</span>
<span style="color: #003366; font-weight: bold;">function</span> sub_html_str<span style="color: #009900;">&#40;</span>str<span style="color: #339933;">,</span> num<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #003366; font-weight: bold;">var</span> reg <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> RegExp<span style="color: #009900;">&#40;</span> <span style="color: #3366CC;">'&lt;[^&gt;]+&gt;'</span> <span style="color: #339933;">,</span> <span style="color: #3366CC;">'g'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #003366; font-weight: bold;">var</span> rt<span style="color: #339933;">,</span> rts <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> indexs <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> tstr<span style="color: #339933;">,</span> endstr<span style="color: #339933;">,</span> rstr<span style="color: #339933;">,</span> sstr<span style="color: #339933;">,</span> endtag<span style="color: #339933;">,</span> rtstr<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #006600; font-style: italic;">//提取所有的html标签和标签在字符串中的位置 </span>
    <span style="color: #000066; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span> <span style="color: #009900;">&#40;</span> rt <span style="color: #339933;">=</span> reg.<span style="color: #660066;">exec</span><span style="color: #009900;">&#40;</span>str<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> <span style="color: #003366; font-weight: bold;">null</span> <span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        rts.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span>rt<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        indexs.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span>rt<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'index'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #006600; font-style: italic;">//删除字符串中所有的html标签</span>
    tstr <span style="color: #339933;">=</span> str.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span>reg<span style="color: #339933;">,</span> <span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #006600; font-style: italic;">//对剩余的纯字符串进行substr</span>
&nbsp;
    sstr <span style="color: #339933;">=</span> tstr.<span style="color: #660066;">substr</span><span style="color: #009900;">&#40;</span>num<span style="color: #339933;">,</span> tstr.<span style="color: #660066;">length</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    tstr <span style="color: #339933;">=</span> tstr.<span style="color: #660066;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span> num<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
&nbsp;
    <span style="color: #006600; font-style: italic;">//判断有没有把实体腰斩，如果有腰斩的就再接上 </span>
    endstr <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/&amp;[^&amp;]*$/</span>.<span style="color: #660066;">exec</span><span style="color: #009900;">&#40;</span>tstr<span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> endstr <span style="color: #339933;">!==</span> <span style="color: #3366CC;">''</span> <span style="color: #009900;">&#41;</span> endstr <span style="color: #339933;">+=</span> <span style="color: #3366CC;">''</span> <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/^[^;]*;/</span>.<span style="color: #660066;">exec</span><span style="color: #009900;">&#40;</span>sstr<span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/^(&amp;\w{1,10};|&amp;#\d+;)$/</span>.<span style="color: #660066;">test</span><span style="color: #009900;">&#40;</span>endstr<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        rtstr <span style="color: #339933;">=</span> tstr.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/&amp;[^&amp;]*$/</span><span style="color: #339933;">,</span> endstr<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066; font-weight: bold;">else</span>
    <span style="color: #009900;">&#123;</span>
        rtstr <span style="color: #339933;">=</span> tstr<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #006600; font-style: italic;">//把html标签放回到截断完毕的字符串中，当然有的html标签这时候已经无家可归了</span>
&nbsp;
    <span style="color: #003366; font-weight: bold;">var</span> index <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> rts.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> i <span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        index <span style="color: #339933;">=</span> indexs<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>rtstr.<span style="color: #660066;">length</span> <span style="color: #339933;">&gt;=</span> index<span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            rtstr <span style="color: #339933;">=</span> rtstr.<span style="color: #660066;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span> index<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> rts<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">+</span> rtstr.<span style="color: #660066;">substr</span><span style="color: #009900;">&#40;</span>index<span style="color: #339933;">,</span> rtstr.<span style="color: #660066;">length</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> 
        <span style="color: #000066; font-weight: bold;">else</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #000066; font-weight: bold;">break</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #003366; font-weight: bold;">var</span> lastindex <span style="color: #339933;">=</span> i <span style="color: #339933;">;</span>
    <span style="color: #006600; font-style: italic;">//下面的代码用来闭合没有闭合的标签</span>
    tstr <span style="color: #339933;">=</span> rtstr<span style="color: #339933;">;</span>
    rstr <span style="color: #339933;">=</span> <span style="color: #3366CC;">''</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #006600; font-style: italic;">//把闭合的标签全部删除，sstr包含了没有闭合的标签</span>
    <span style="color: #000066; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span> rstr <span style="color: #339933;">!=</span> tstr <span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        rstr <span style="color: #339933;">=</span> tstr<span style="color: #339933;">;</span>
        tstr <span style="color: #339933;">=</span> tstr.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/&lt;[^\/][^&gt;]*&gt;[^&lt;]*&lt;\/[^&gt;]+&gt;/g</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/&lt;[^&gt;]+ \/&gt;/g</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    sstr <span style="color: #339933;">=</span> tstr<span style="color: #339933;">;</span>
    <span style="color: #006600; font-style: italic;">//在剩余的部分查找没有闭合的标签</span>
    tstr <span style="color: #339933;">=</span> str.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span>rtstr<span style="color: #339933;">,</span> <span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    rstr <span style="color: #339933;">=</span> <span style="color: #3366CC;">''</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span> rstr <span style="color: #339933;">!=</span> tstr <span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        rstr <span style="color: #339933;">=</span> tstr<span style="color: #339933;">;</span>
        tstr <span style="color: #339933;">=</span> tstr.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/&lt;[^\/][^&gt;]*&gt;[^&lt;]*&lt;\/[^&gt;]+&gt;/g</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/&lt;[^&gt;]+ \/&gt;/g</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    reg.<span style="color: #660066;">lastIndex</span> <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>
    <span style="color: #003366; font-weight: bold;">var</span> endreg <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> RegExp<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;<span style="color: #000099; font-weight: bold;">\/</span>[^&gt;]+&gt;'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'g'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #006600; font-style: italic;">//如果存在没有闭合的标签，从无家可归的标签里找下半身</span>
    <span style="color: #000066; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span> reg.<span style="color: #660066;">exec</span><span style="color: #009900;">&#40;</span>sstr<span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> <span style="color: #003366; font-weight: bold;">null</span> <span style="color: #009900;">&#41;</span> 
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #009900;">&#40;</span>rt <span style="color: #339933;">=</span> endreg.<span style="color: #660066;">exec</span><span style="color: #009900;">&#40;</span>tstr<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
             rtstr <span style="color: #339933;">+=</span> rt<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000066; font-weight: bold;">else</span>
        <span style="color: #009900;">&#123;</span>
             <span style="color: #000066; font-weight: bold;">break</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000066; font-weight: bold;">return</span> rtstr<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>script<span style="color: #339933;">&gt;</span>
document.<span style="color: #660066;">writeln</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;textarea cols=&quot;100&quot; rows=&quot;10&quot;&gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
document.<span style="color: #660066;">writeln</span><span style="color: #009900;">&#40;</span>sub_html_str<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;xx&gt;&lt;oo&gt;嵌套标签截断测试&lt;/oo&gt;&lt;fk&gt;&lt;test&gt;lala&lt;/test&gt;&lt;/fk&gt;&lt;/xx&gt;'</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">5</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
document.<span style="color: #660066;">writeln</span><span style="color: #009900;">&#40;</span>sub_html_str<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'正常字符串测试'</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">5</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
document.<span style="color: #660066;">writeln</span><span style="color: #009900;">&#40;</span>sub_html_str<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;xx&gt;带标签的字符串截断&lt;/xx&gt;'</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">5</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
document.<span style="color: #660066;">writeln</span><span style="color: #009900;">&#40;</span>sub_html_str<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;xx&gt;&lt;oo&gt;嵌套标签截断测试&lt;/oo&gt;&lt;fk&gt;lala&lt;/fk&gt;&lt;/xx&gt;'</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">5</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
document.<span style="color: #660066;">writeln</span><span style="color: #009900;">&#40;</span>sub_html_str<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;xx&gt;&lt;oo&gt;嵌套标签&lt;img src=&quot;http://www.google.com/logo.gif&quot; /&gt;截断测试&lt;/oo&gt;&lt;/xx&gt;'</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">5</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
document.<span style="color: #660066;">writeln</span><span style="color: #009900;">&#40;</span>sub_html_str<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;xx&gt;&lt;oo&gt;实体截断&amp;nbsp;测试测试&lt;/oo&gt;&lt;/xx&gt;'</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">5</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
document.<span style="color: #660066;">writeln</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;/textarea&gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span>
&nbsp;
<span style="color: #339933;">&lt;/</span>html<span style="color: #339933;">&gt;</span></pre></div></div>

<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
最近各位弟兄都很忙的样子，俺则已经沦为做活动页面的了。。html字符的截断一般都会放到后台技术们做，但是春节的这个东西比较紧，偶就前端代劳一下。<br />
运气不错，这么长的函数没调几次就过了。也是按照自己的思路来。。。<br />
这个函数仅能做到</p>
<ul>
<li>截取除了html标签之外的前n个字符，一般的需求都是这样的。。</li>
<li>不会截断html实体</li>
<li>查找并闭合被截断的html标签,但是如果给的html就存在没有闭合的就不管了</li>
</ul>

<div class="wp_syntax"><div class="code overflow"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>html<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;!--</span> html字符截断第一版 <span style="color: #339933;">--&gt;</span>
<span style="color: #339933;">&lt;</span>script<span style="color: #339933;">&gt;</span>
<span style="color: #003366; font-weight: bold;">function</span> sub_html_str<span style="color: #009900;">&#40;</span>str<span style="color: #339933;">,</span> num<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #003366; font-weight: bold;">var</span> reg <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> RegExp<span style="color: #009900;">&#40;</span> <span style="color: #3366CC;">'&lt;[^&gt;]+&gt;'</span> <span style="color: #339933;">,</span> <span style="color: #3366CC;">'g'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #003366; font-weight: bold;">var</span> rt<span style="color: #339933;">,</span> rts <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> indexs <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> tstr<span style="color: #339933;">,</span> endstr<span style="color: #339933;">,</span> rstr<span style="color: #339933;">,</span> endtag<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #006600; font-style: italic;">//提取所有的html标签和标签在字符串中的位置 </span>
    <span style="color: #000066; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span> <span style="color: #009900;">&#40;</span> rt <span style="color: #339933;">=</span> reg.<span style="color: #660066;">exec</span><span style="color: #009900;">&#40;</span>str<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> <span style="color: #003366; font-weight: bold;">null</span> <span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        rts.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span>rt<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        indexs.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span>rt<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'index'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #006600; font-style: italic;">//删除字符串中所有的html标签</span>
    str <span style="color: #339933;">=</span> str.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span>reg<span style="color: #339933;">,</span> <span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #006600; font-style: italic;">//对剩余的纯字符串进行substr</span>
    tstr <span style="color: #339933;">=</span> str.<span style="color: #660066;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span> num<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #006600; font-style: italic;">//判断有没有把实体腰斩，如果有腰斩的就再接上 </span>
    endstr <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/&amp;[^&amp;]*$/</span>.<span style="color: #660066;">exec</span><span style="color: #009900;">&#40;</span>tstr<span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> endstr <span style="color: #339933;">!==</span> <span style="color: #3366CC;">''</span> <span style="color: #009900;">&#41;</span> endstr <span style="color: #339933;">+=</span> <span style="color: #3366CC;">''</span> <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/^[^;]*;/</span>.<span style="color: #660066;">exec</span><span style="color: #009900;">&#40;</span>str.<span style="color: #660066;">substr</span><span style="color: #009900;">&#40;</span>num<span style="color: #339933;">,</span> str.<span style="color: #660066;">length</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/^(&amp;\w{1,10};|&amp;#\d+;)$/</span>.<span style="color: #660066;">test</span><span style="color: #009900;">&#40;</span>endstr<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        str <span style="color: #339933;">=</span> tstr.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/&amp;[^&amp;]*$/</span><span style="color: #339933;">,</span> endstr<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066; font-weight: bold;">else</span>
    <span style="color: #009900;">&#123;</span>
        str <span style="color: #339933;">=</span> tstr<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #006600; font-style: italic;">//把html标签放回到截断完毕的字符串中，当然有的html标签这时候已经无家可归了</span>
&nbsp;
    <span style="color: #003366; font-weight: bold;">var</span> index <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> rts.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> i <span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        index <span style="color: #339933;">=</span> indexs<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>str.<span style="color: #660066;">length</span> <span style="color: #339933;">&gt;=</span> index<span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            str <span style="color: #339933;">=</span> str.<span style="color: #660066;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span> index<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> rts<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">+</span> str.<span style="color: #660066;">substr</span><span style="color: #009900;">&#40;</span>index<span style="color: #339933;">,</span> str.<span style="color: #660066;">length</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> 
        <span style="color: #000066; font-weight: bold;">else</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #000066; font-weight: bold;">break</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #003366; font-weight: bold;">var</span> lastindex <span style="color: #339933;">=</span> i <span style="color: #339933;">;</span>
    <span style="color: #006600; font-style: italic;">//下面的代码用来闭合没有闭合的标签</span>
    tstr <span style="color: #339933;">=</span> str<span style="color: #339933;">;</span>
    rstr <span style="color: #339933;">=</span> <span style="color: #3366CC;">''</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #006600; font-style: italic;">//把闭合的标签全部删除，tstr包含了没有闭合的标签</span>
    <span style="color: #000066; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span> rstr <span style="color: #339933;">!=</span> tstr <span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        rstr <span style="color: #339933;">=</span> tstr<span style="color: #339933;">;</span>
        tstr <span style="color: #339933;">=</span> tstr.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/&lt;[^&gt;]+&gt;[^&lt;]*&lt;\/[^&gt;]+&gt;/g</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/&lt;[^&gt;]+ \/&gt;/g</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    reg.<span style="color: #660066;">lastIndex</span> <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>
    <span style="color: #006600; font-style: italic;">//如果存在没有闭合的标签，从无家可归的标签里找下半身</span>
    <span style="color: #000066; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span> reg.<span style="color: #660066;">exec</span><span style="color: #009900;">&#40;</span>rstr<span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> <span style="color: #003366; font-weight: bold;">null</span> <span style="color: #009900;">&#41;</span> 
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span> lastindex <span style="color: #339933;">&lt;</span> rts.<span style="color: #660066;">length</span> <span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            endtag <span style="color: #339933;">=</span> rts<span style="color: #009900;">&#91;</span>lastindex<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
            <span style="color: #006600; font-style: italic;">//如果它是一个用来闭合的标签,就把它追加到字符串</span>
            <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #009966; font-style: italic;">/^&lt;[ ]*\//</span>.<span style="color: #660066;">test</span><span style="color: #009900;">&#40;</span>endtag<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> 
            <span style="color: #009900;">&#123;</span>
                str <span style="color: #339933;">=</span> str <span style="color: #339933;">+</span> endtag<span style="color: #339933;">;</span>
                lastindex <span style="color: #339933;">++;</span>
                <span style="color: #000066; font-weight: bold;">break</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
            <span style="color: #006600; font-style: italic;">//如果它是自闭合的标签</span>
            <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #009966; font-style: italic;">/&lt;[^&gt;]+ \/&gt;/</span>.<span style="color: #660066;">test</span><span style="color: #009900;">&#40;</span>endtag<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
            <span style="color: #009900;">&#123;</span>
                lastindex <span style="color: #339933;">++;</span>
            <span style="color: #009900;">&#125;</span>
            <span style="color: #006600; font-style: italic;">//如果它是一个起始标签</span>
            <span style="color: #000066; font-weight: bold;">else</span>
            <span style="color: #009900;">&#123;</span>
                lastindex <span style="color: #339933;">+=</span> <span style="color: #CC0000;">2</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000066; font-weight: bold;">return</span> str<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>script<span style="color: #339933;">&gt;</span>
document.<span style="color: #660066;">writeln</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;textarea cols=&quot;100&quot; rows=&quot;10&quot;&gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
document.<span style="color: #660066;">writeln</span><span style="color: #009900;">&#40;</span>sub_html_str<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'正常字符串测试'</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">5</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
document.<span style="color: #660066;">writeln</span><span style="color: #009900;">&#40;</span>sub_html_str<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;xx&gt;带标签的字符串截断&lt;/xx&gt;'</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">5</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
document.<span style="color: #660066;">writeln</span><span style="color: #009900;">&#40;</span>sub_html_str<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;xx&gt;&lt;oo&gt;嵌套标签截断测试&lt;/oo&gt;&lt;fk&gt;lala&lt;/fk&gt;&lt;/xx&gt;'</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">5</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
document.<span style="color: #660066;">writeln</span><span style="color: #009900;">&#40;</span>sub_html_str<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;xx&gt;&lt;oo&gt;嵌套标签&lt;img src=&quot;http://www.google.com/logo.gif&quot; /&gt;截断测试&lt;/oo&gt;&lt;/xx&gt;'</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">5</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
document.<span style="color: #660066;">writeln</span><span style="color: #009900;">&#40;</span>sub_html_str<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;xx&gt;&lt;oo&gt;实体截断&amp;nbsp;测试测试&lt;/oo&gt;&lt;/xx&gt;'</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">5</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
document.<span style="color: #660066;">writeln</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;/textarea&gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span>
&nbsp;
<span style="color: #339933;">&lt;/</span>html<span style="color: #339933;">&gt;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://bluehua.org/2010/02/01/927.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>wordpress的插件机制用于产品js代码的解耦</title>
		<link>http://bluehua.org/2009/12/22/751.html</link>
		<comments>http://bluehua.org/2009/12/22/751.html#comments</comments>
		<pubDate>Tue, 22 Dec 2009 13:43:26 +0000</pubDate>
		<dc:creator>小鹿</dc:creator>
				<category><![CDATA[web dev]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://bluehua.org/?p=751</guid>
		<description><![CDATA[由于半路出家，设计模式几乎没有接触，一直为产品代码的耦合头疼，前两天忽然想到，wordpress区区数行代码便实现了强大的插件接口，何不借鉴一下呢，于是便有了下面的假想代码(不了解wordpress插件机制的同学可以先了解一下)：

/*
* 以一个相册浏览的产品为例
* 该应用可以实现无刷新的图片浏览，附加功能:新用户引导，图片评论，对图片处理的第三方应用，圈人
*/
//产品引导开始
addAction&#40;'photo_browser_init',function&#40;&#41;
&#123;
     guideManager.init&#40;&#41;;
&#125;&#41;;
addAction&#40;'photo_load_sucess',function&#40;photo&#41;
&#123;
    guideManager.step&#40;3, photo&#41;;
&#125;&#41;;
addAction&#40;'photo_change',function&#40;photo&#41;
&#123;
    guideManager.step&#40;4&#41;;
&#125;&#41;;
//产品引导结束
&#160;
//管理员ui开始
addAction&#40;'photo_browser_init',function&#40;&#41;
&#123;
    if &#40; !currentUser.isAdmin &#41; return;
    ......
&#125;&#41;;
//管理员ui结束
&#160;
//相册圈人开始
addAction&#40;'photo_browser_init', function&#40;&#41;
&#123;
    photo_tag.init&#40;&#41;;
&#125;&#41;;
addAction&#40;'photo_load&#124;photo_change', function&#40;photo&#41;
&#123;
    photo_tag.update&#40;photo&#41;;
&#125;&#41;;
//相册圈人结束
&#160;
//相片app
addAction&#40;'photo_browser_init',function&#40;photo&#41;
&#123;
    photo_apps.init&#40;photo&#41;;
&#125;&#41;;
addAction&#40;'photo_load&#124;photo_change',function&#40;photo&#41;
&#123;
    photo_apps.update&#40;photo&#41;;
&#125;&#41;;
//相片app结束
&#160;
//相片评论开始
addAction&#40;'photo_browser_init',function&#40;photo&#41;
&#123;
    photo_comment.init&#40;photo&#41;;
&#125;&#41;;
addAction&#40;'photo_load&#124;photo_change',function&#40;photo&#41;
&#123;
    photo_comment.update&#40;photo&#41;;
&#125;&#41;;
//相片评论结束
&#160;
//相片浏览核心功能开始
var [...]]]></description>
			<content:encoded><![CDATA[<p>由于半路出家，设计模式几乎没有接触，一直为产品代码的耦合头疼，前两天忽然想到，wordpress区区数行代码便实现了强大的插件接口，何不借鉴一下呢，于是便有了下面的假想代码(<a href="http://www.google.cn/search?hl=zh-CN&amp;q=wordpress+%E6%8F%92%E4%BB%B6%E6%9C%BA%E5%88%B6&amp;sourceid=navclient-ff&amp;rlz=1B6_____zh-CNCN346CN346&amp;ie=UTF-8" target="_blank">不了解wordpress插件机制的同学可以先了解一下</a>)：</p>

<div class="wp_syntax"><div class="code overflow"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">/*
* 以一个相册浏览的产品为例
* 该应用可以实现无刷新的图片浏览，附加功能:新用户引导，图片评论，对图片处理的第三方应用，圈人
*/</span>
<span style="color: #006600; font-style: italic;">//产品引导开始</span>
addAction<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'photo_browser_init'</span><span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
     guideManager.<span style="color: #660066;">init</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
addAction<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'photo_load_sucess'</span><span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>photo<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    guideManager.<span style="color: #660066;">step</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">3</span><span style="color: #339933;">,</span> photo<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
addAction<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'photo_change'</span><span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>photo<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    guideManager.<span style="color: #660066;">step</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">4</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">//产品引导结束</span>
&nbsp;
<span style="color: #006600; font-style: italic;">//管理员ui开始</span>
addAction<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'photo_browser_init'</span><span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span>currentUser.<span style="color: #660066;">isAdmin</span> <span style="color: #009900;">&#41;</span> <span style="color: #000066; font-weight: bold;">return</span><span style="color: #339933;">;</span>
    ......
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">//管理员ui结束</span>
&nbsp;
<span style="color: #006600; font-style: italic;">//相册圈人开始</span>
addAction<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'photo_browser_init'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    photo_tag.<span style="color: #660066;">init</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
addAction<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'photo_load|photo_change'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>photo<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    photo_tag.<span style="color: #660066;">update</span><span style="color: #009900;">&#40;</span>photo<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">//相册圈人结束</span>
&nbsp;
<span style="color: #006600; font-style: italic;">//相片app</span>
addAction<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'photo_browser_init'</span><span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>photo<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    photo_apps.<span style="color: #660066;">init</span><span style="color: #009900;">&#40;</span>photo<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
addAction<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'photo_load|photo_change'</span><span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>photo<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    photo_apps.<span style="color: #660066;">update</span><span style="color: #009900;">&#40;</span>photo<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">//相片app结束</span>
&nbsp;
<span style="color: #006600; font-style: italic;">//相片评论开始</span>
addAction<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'photo_browser_init'</span><span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>photo<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    photo_comment.<span style="color: #660066;">init</span><span style="color: #009900;">&#40;</span>photo<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
addAction<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'photo_load|photo_change'</span><span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>photo<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    photo_comment.<span style="color: #660066;">update</span><span style="color: #009900;">&#40;</span>photo<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">//相片评论结束</span>
&nbsp;
<span style="color: #006600; font-style: italic;">//相片浏览核心功能开始</span>
<span style="color: #003366; font-weight: bold;">var</span> photo_browser <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>...<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
photo_browser.<span style="color: #660066;">init</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">//相片浏览核心功能结束</span></pre></div></div>

<p>其实跟自定义事件有点类似，但是比自定义事件更强大：</p>
<ul>
<li> 自定义依赖于对象，对脚本的加载顺序会有要求，而wordpress里的addFilter和addAction可以完美解决这个缺点。</li>
<li> filter可以实现数据过滤，而自定义事件不能</li>
</ul>
<p>经过解耦之后的产品更方便多人协作开发，代码块清晰，有效避免svn冲突，还有种种其他好处。。</p>
<p>仅仅是个想法，未经实践，实践ing~</p>
]]></content:encoded>
			<wfw:commentRss>http://bluehua.org/2009/12/22/751.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>getAttribute(&#8216;onclick&#8217;) in IE</title>
		<link>http://bluehua.org/2009/09/11/550.html</link>
		<comments>http://bluehua.org/2009/09/11/550.html#comments</comments>
		<pubDate>Fri, 11 Sep 2009 09:05:31 +0000</pubDate>
		<dc:creator>小鹿</dc:creator>
				<category><![CDATA[web dev]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://bluehua.org/?p=550</guid>
		<description><![CDATA[第n次火星了,可是依然没去过火星.
这个是最近用到才知道,需求是替换onclick属性中的关键字,但是俺单纯的以为geAttribute都会返回一个字符串给我,没想到ie又一次显示了它独到的见解~

&#60;html&#62;
&#60;p id=&#34;test&#34; onclick=&#34;alert('click');&#34;&#62;click me~&#60;/p&#62;
&#60;script&#62;
document.write&#40;'&#60;pre' + '&#62;'&#41;;
var el = document.getElementById&#40;'test'&#41;;
var at = el.getAttribute&#40;'onclick'&#41;;
document.writeln&#40;at&#41;;
document.writeln&#40;typeof at&#41;;
document.write&#40;'&#60;/' + 'pre&#62;'&#41;;
&#60;/script&#62;
&#60;/html&#62;

ff下输出

alert('click');
string

ie6和ie7下输出:

function anonymous()
{
alert('click');
}
function

ie8下输出:

function onclick()
{
alert('click');
}
function

其他事件属性肯定也会有同样表现,ie8十分搞笑,换了一个函数名&#8230;
最后对于ie我只有这样了:

&#60;html&#62;
&#60;p id=&#34;test&#34; onclick=&#34;alert('click');&#34;&#62;click me~&#60;/p&#62;
&#60;script&#62;
var el = document.getElementById&#40;'test'&#41;;
var at = el.getAttribute&#40;'onclick'&#41;;
//函数换成字符串
at = at.toString&#40;&#41;.replace&#40;/^function (anonymous&#124;onclick)\(\)\n\{\n(.*)\n\}$/m, '$2'&#41;;
//替换关键词
at = at.replace&#40;'click', 'wahaha'&#41;;
//再变成函数放回去
el.setAttribute&#40;'onclick', new Function&#40;at&#41;&#41;;
&#60;/script&#62;
&#60;/html&#62;

]]></description>
			<content:encoded><![CDATA[<p>第n次火星了,可是依然没去过火星.<br />
这个是最近用到才知道,需求是替换onclick属性中的关键字,但是俺单纯的以为geAttribute都会返回一个字符串给我,没想到ie又一次显示了它独到的见解~</p>

<div class="wp_syntax"><div class="code overflow"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>html<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>p id<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;test&quot;</span> onclick<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;alert('click');&quot;</span><span style="color: #339933;">&gt;</span>click me~<span style="color: #339933;">&lt;/</span>p<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>script<span style="color: #339933;">&gt;</span>
document.<span style="color: #000066; font-weight: bold;">write</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;pre'</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">'&gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> el <span style="color: #339933;">=</span> document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'test'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> at <span style="color: #339933;">=</span> el.<span style="color: #660066;">getAttribute</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'onclick'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
document.<span style="color: #660066;">writeln</span><span style="color: #009900;">&#40;</span>at<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
document.<span style="color: #660066;">writeln</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">typeof</span> at<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
document.<span style="color: #000066; font-weight: bold;">write</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;/'</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">'pre&gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;/</span>html<span style="color: #339933;">&gt;</span></pre></div></div>

<p>ff下输出</p>
<pre>
alert('click');
string
</pre>
<p>ie6和ie7下输出:</p>
<pre>
function anonymous()
{
alert('click');
}
function
</pre>
<p>ie8下输出:</p>
<pre>
function onclick()
{
alert('click');
}
function
</pre>
<p>其他事件属性肯定也会有同样表现,ie8十分搞笑,换了一个函数名&#8230;</p>
<p>最后对于ie我只有这样了:</p>

<div class="wp_syntax"><div class="code overflow"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>html<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>p id<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;test&quot;</span> onclick<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;alert('click');&quot;</span><span style="color: #339933;">&gt;</span>click me~<span style="color: #339933;">&lt;/</span>p<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>script<span style="color: #339933;">&gt;</span>
<span style="color: #003366; font-weight: bold;">var</span> el <span style="color: #339933;">=</span> document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'test'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> at <span style="color: #339933;">=</span> el.<span style="color: #660066;">getAttribute</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'onclick'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">//函数换成字符串</span>
at <span style="color: #339933;">=</span> at.<span style="color: #660066;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/^function (anonymous|onclick)\(\)\n\{\n(.*)\n\}$/m</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'$2'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">//替换关键词</span>
at <span style="color: #339933;">=</span> at.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'click'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'wahaha'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">//再变成函数放回去</span>
el.<span style="color: #660066;">setAttribute</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'onclick'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">new</span> <span style="color: #003366; font-weight: bold;">Function</span><span style="color: #009900;">&#40;</span>at<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;/</span>html<span style="color: #339933;">&gt;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://bluehua.org/2009/09/11/550.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 0.530 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2010-09-10 17:45:31 -->
