<?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; substr</title>
	<atom:link href="http://bluehua.org/tag/substr/feed" rel="self" type="application/rss+xml" />
	<link>http://bluehua.org</link>
	<description>分享所学,backup一切~</description>
	<lastBuildDate>Wed, 23 Nov 2011 08:43:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<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>冥王星2011</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 &#41; &#123; rts.push&#40;rt&#91;0&#93;&#41;; indexs.push&#40;rt&#91;'index'&#93;&#41;; &#125; [...]]]></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>
	</channel>
</rss>

<!-- Dynamic page generated in 0.447 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2012-02-05 03:28:53 -->

