﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Open my eyes , Open my mind-文章分类-java相关的乱七八糟的东西</title><link>http://www.blogjava.net/123xxx/category/7296.html</link><description>just for java</description><language>zh-cn</language><lastBuildDate>Sat, 11 Aug 2007 21:18:42 GMT</lastBuildDate><pubDate>Sat, 11 Aug 2007 21:18:42 GMT</pubDate><ttl>60</ttl><item><title>java编码问题</title><link>http://www.blogjava.net/123xxx/articles/java_encoding.html</link><dc:creator>OO</dc:creator><author>OO</author><pubDate>Tue, 03 Apr 2007 02:25:00 GMT</pubDate><guid>http://www.blogjava.net/123xxx/articles/java_encoding.html</guid><wfw:comment>http://www.blogjava.net/123xxx/comments/108137.html</wfw:comment><comments>http://www.blogjava.net/123xxx/articles/java_encoding.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/123xxx/comments/commentRss/108137.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/123xxx/services/trackbacks/108137.html</trackback:ping><description><![CDATA[<h2>字符，字节和编码</h2>
<p><font size=1>[原创文章，转载请保留或注明出处：<a href="http://www.regexlab.com/zh/encoding.htm"><u><font color=#0000ff>http://www.regexlab.com/zh/encoding.htm</font></u></a>]</font></p>
<p>级别：中级</p>
<blockquote>
<p>摘要：本文介绍了字符与编码的发展过程，相关概念的正确理解。举例说明了一些实际应用中，编码的实现方法。然后，本文讲述了通常对字符与编码的几种误解，由于这些误解而导致乱码产生的原因，以及消除乱码的办法。本文的内容涵盖了&#8220;中文问题&#8221;，&#8220;乱码问题&#8221;。</p>
<p>掌握编码问题的关键是正确地理解相关概念，编码所涉及的技术其实是很简单的。因此，阅读本文时需要慢读多想，多思考。</p>
</blockquote>
<h4>引言</h4>
<p>&#8220;字符与编码&#8221;是一个被经常讨论的话题。即使这样，时常出现的乱码仍然困扰着大家。虽然我们有很多的办法可以用来消除乱码，但我们并不一定理解这些办法的内在原理。而有的乱码产生的原因，实际上由于底层代码本身有问题所导致的。因此，不仅是初学者会对字符编码感到模糊，有的底层开发人员同样对字符编码缺乏准确的理解。</p>
<h4>1. 编码问题的由来，相关概念的理解</h4>
<h5>1.1 字符与编码的发展</h5>
<p>从计算机对多国语言的支持角度看，大致可以分为三个阶段：</p>
<table cellSpacing=0 cellPadding=3 border=0>
    <tbody>
        <tr>
            <td class=top_1>　</td>
            <td class=top_2 noWrap align=middle><strong>系统内码</strong></td>
            <td class=top_2 align=middle><strong>说明</strong></td>
            <td class=top_2 align=middle><strong>系统</strong></td>
        </tr>
        <tr>
            <td class=con_1 noWrap>阶段一</td>
            <td class=con_2 noWrap align=middle>ASCII</td>
            <td class=con_2>计算机刚开始只支持英语，其它语言不能够在计算机上存储和显示。</td>
            <td class=con_2>英文 DOS</td>
        </tr>
        <tr>
            <td class=con_1 noWrap>阶段二</td>
            <td class=con_2 noWrap align=middle>ANSI编码<br>（本地化）</td>
            <td class=con_2>为使计算机支持更多语言，通常使用 0x80~0xFF 范围的 2 个字节来表示 1 个字符。比如：汉字 '中' 在中文操作系统中，使用 [0xD6,0xD0] 这两个字节存储。<br><br>不同的国家和地区制定了不同的标准，由此产生了 GB2312, BIG5, JIS 等各自的编码标准。这些使用 2 个字节来代表一个字符的各种汉字延伸编码方式，称为<strong> ANSI 编码</strong>。在简体中文系统下，ANSI 编码代表 GB2312 编码，在日文操作系统下，ANSI 编码代表 JIS 编码。<br><br>不同 ANSI 编码之间互不兼容，当信息在国际间交流时，无法将属于两种语言的文字，存储在同一段<strong> ANSI 编码</strong>的文本中。</td>
            <td class=con_2>中文 DOS，中文 Windows 95/98，日文 Windows 95/98</td>
        </tr>
        <tr>
            <td class=bot_1 noWrap>阶段三</td>
            <td class=bot_2 noWrap align=middle>UNICODE<br>（国际化）</td>
            <td class=bot_2>为了使国际间信息交流更加方便，国际组织制定了 <strong>UNICODE 字符集</strong>，为各种语言中的每一个字符设定了统一并且唯一的数字编号，以满足跨语言、跨平台进行文本转换、处理的要求。</td>
            <td class=bot_2>Windows NT/2000/XP，Linux，Java</td>
        </tr>
    </tbody>
</table>
<p>字符串在内存中的存放方法：</p>
<p>在 ASCII 阶段，<strong>单字节字符串</strong>使用一个字节存放一个字符（SBCS）。比如，"Bob123" 在内存中为：</p>
<table style="FONT-SIZE: 80%; COLOR: rgb(0,0,128)" cellSpacing=5 cellPadding=0 border=0>
    <tbody>
        <tr>
            <td>42</td>
            <td>6F</td>
            <td>62</td>
            <td>31</td>
            <td>32</td>
            <td>33</td>
            <td>00</td>
        </tr>
        <tr>
            <td bgColor=#000080><img height=1 src="http://www.nk975.com/images/spacer.gif" width=1 border=0></td>
            <td bgColor=#000080><img height=1 src="http://www.nk975.com/images/spacer.gif" width=1 border=0></td>
            <td bgColor=#000080><img height=1 src="http://www.nk975.com/images/spacer.gif" width=1 border=0></td>
            <td bgColor=#000080><img height=1 src="http://www.nk975.com/images/spacer.gif" width=1 border=0></td>
            <td bgColor=#000080><img height=1 src="http://www.nk975.com/images/spacer.gif" width=1 border=0></td>
            <td bgColor=#000080><img height=1 src="http://www.nk975.com/images/spacer.gif" width=1 border=0></td>
            <td bgColor=#000080><img height=1 src="http://www.nk975.com/images/spacer.gif" width=1 border=0></td>
        </tr>
        <tr>
            <td align=middle>B</td>
            <td align=middle>o</td>
            <td align=middle>b</td>
            <td align=middle>1</td>
            <td align=middle>2</td>
            <td align=middle>3</td>
            <td align=middle>\0</td>
        </tr>
    </tbody>
</table>
<p>在使用 ANSI 编码支持多种语言阶段，每个字符使用一个字节或多个字节来表示（MBCS），因此，这种方式存放的字符也被称作<strong>多字节字符</strong>。比如，"中文123" 在中文 Windows 95 内存中为7个字节，每个汉字占2个字节，每个英文和数字字符占1个字节：</p>
<table style="FONT-SIZE: 80%; COLOR: rgb(0,0,128)" cellSpacing=5 cellPadding=0 border=0>
    <tbody>
        <tr>
            <td>D6</td>
            <td>D0</td>
            <td>CE</td>
            <td>C4</td>
            <td>31</td>
            <td>32</td>
            <td>33</td>
            <td>00</td>
        </tr>
        <tr>
            <td bgColor=#ff0000 colSpan=2><img height=1 src="http://www.nk975.com/images/spacer.gif" width=1 border=0></td>
            <td bgColor=#ff0000 colSpan=2><img height=1 src="http://www.nk975.com/images/spacer.gif" width=1 border=0></td>
            <td bgColor=#000080><img height=1 src="http://www.nk975.com/images/spacer.gif" width=1 border=0></td>
            <td bgColor=#000080><img height=1 src="http://www.nk975.com/images/spacer.gif" width=1 border=0></td>
            <td bgColor=#000080><img height=1 src="http://www.nk975.com/images/spacer.gif" width=1 border=0></td>
            <td bgColor=#000080><img height=1 src="http://www.nk975.com/images/spacer.gif" width=1 border=0></td>
        </tr>
        <tr>
            <td align=middle colSpan=2>中</td>
            <td align=middle colSpan=2>文</td>
            <td align=middle>1</td>
            <td align=middle>2</td>
            <td align=middle>3</td>
            <td align=middle>\0</td>
        </tr>
    </tbody>
</table>
<p>在 UNICODE 被采用之后，计算机存放字符串时，改为存放每个字符在 UNICODE 字符集中的序号。目前计算机一般使用 2 个字节（16 位）来存放一个序号（DBCS），因此，这种方式存放的字符也被称作<strong>宽字节字符</strong>。比如，字符串 "中文123" 在 Windows 2000 下，内存中实际存放的是 5 个序号：</p>
<table style="FONT-SIZE: 80%; COLOR: rgb(0,0,128)" cellSpacing=5 cellPadding=0 border=0>
    <tbody>
        <tr>
            <td vAlign=bottom>2D</td>
            <td vAlign=bottom>4E</td>
            <td vAlign=bottom>87</td>
            <td vAlign=bottom>65</td>
            <td vAlign=bottom>31</td>
            <td vAlign=bottom>00</td>
            <td vAlign=bottom>32</td>
            <td vAlign=bottom>00</td>
            <td vAlign=bottom>33</td>
            <td vAlign=bottom>00</td>
            <td vAlign=bottom>00</td>
            <td vAlign=bottom>00</td>
            <td><font color=#808080>&nbsp;&nbsp;&nbsp;&nbsp; &#8592; 在 x86 CPU 中，低字节在前</font></td>
        </tr>
        <tr>
            <td bgColor=#ff0000 colSpan=2><img height=1 src="http://www.nk975.com/images/spacer.gif" width=1 border=0></td>
            <td bgColor=#ff0000 colSpan=2><img height=1 src="http://www.nk975.com/images/spacer.gif" width=1 border=0></td>
            <td bgColor=#ff0000 colSpan=2><img height=1 src="http://www.nk975.com/images/spacer.gif" width=1 border=0></td>
            <td bgColor=#ff0000 colSpan=2><img height=1 src="http://www.nk975.com/images/spacer.gif" width=1 border=0></td>
            <td bgColor=#ff0000 colSpan=2><img height=1 src="http://www.nk975.com/images/spacer.gif" width=1 border=0></td>
            <td bgColor=#ff0000 colSpan=2><img height=1 src="http://www.nk975.com/images/spacer.gif" width=1 border=0></td>
            <td><img height=1 src="http://www.nk975.com/images/spacer.gif" width=1 border=0></td>
        </tr>
        <tr>
            <td align=middle colSpan=2>中</td>
            <td align=middle colSpan=2>文</td>
            <td align=middle colSpan=2>1</td>
            <td align=middle colSpan=2>2</td>
            <td align=middle colSpan=2>3</td>
            <td align=middle colSpan=2>\0</td>
            <td align=middle>　</td>
        </tr>
    </tbody>
</table>
<p>一共占 10 个字节。</p>
<h5>1.2 字符，字节，字符串</h5>
<p>理解编码的关键，是要把字符的概念和字节的概念理解准确。这两个概念容易混淆，我们在此做一下区分：</p>
<table cellSpacing=0 cellPadding=3 border=0>
    <tbody>
        <tr>
            <td class=top_1>　</td>
            <td class=top_2 align=middle><strong>概念描述</strong></td>
            <td class=top_2 align=middle><strong>举例</strong></td>
        </tr>
        <tr>
            <td class=con_1 noWrap align=middle>字符</td>
            <td class=con_2>人们使用的记号，抽象意义上的一个符号。</td>
            <td class=con_2>'1', '中', 'a', '$', '￥', &#8230;&#8230;</td>
        </tr>
        <tr>
            <td class=con_1 noWrap align=middle>字节</td>
            <td class=con_2>计算机中存储数据的单元，一个8位的二进制数，是一个很具体的存储空间。</td>
            <td class=con_2>0x01, 0x45, 0xFA, &#8230;&#8230;</td>
        </tr>
        <tr>
            <td class=con_1 noWrap align=middle>ANSI<br>字符串</td>
            <td class=con_2>在内存中，如果&#8220;字符&#8221;是以 <strong>ANSI 编码</strong>形式存在的，一个字符可能使用一个字节或多个字节来表示，那么我们称这种字符串为 <strong>ANSI 字符串</strong>或者<strong>多字节字符串</strong>。</td>
            <td class=con_2>"中文123"<br><span class=rem>（占7字节）</span></td>
        </tr>
        <tr>
            <td class=bot_1 noWrap align=middle>UNICODE<br>字符串</td>
            <td class=bot_2>在内存中，如果&#8220;字符&#8221;是以在 UNICODE 中的序号存在的，那么我们称这种字符串为 <strong>UNICODE 字符串</strong>或者<strong>宽字节字符串</strong>。</td>
            <td class=bot_2>L"中文123"<br><span class=rem>（占10字节）</span></td>
        </tr>
    </tbody>
</table>
<p>由于不同 ANSI 编码所规定的标准是不相同的，因此，对于一个给定的<strong>多字节字符串</strong>，我们必须知道它采用的是哪一种编码规则，才能够知道它包含了哪些&#8220;字符&#8221;。而对于 <strong>UNICODE 字符串</strong>来说，不管在什么环境下，它所代表的&#8220;字符&#8221;内容总是不变的。</p>
<h5>1.3 字符集与编码</h5>
<p>各个国家和地区所制定的不同 ANSI 编码标准中，都只规定了各自语言所需的&#8220;字符&#8221;。比如：汉字标准（GB2312）中没有规定韩国语字符怎样存储。这些 ANSI 编码标准所规定的内容包含两层含义：</p>
<ol>
    <li>使用哪些字符。也就是说哪些汉字，字母和符号会被收入标准中。所包含&#8220;字符&#8221;的集合就叫做&#8220;<strong>字符集</strong>&#8221;。 </li>
    <li>规定每个&#8220;字符&#8221;分别用一个字节还是多个字节存储，用哪些字节来存储，这个规定就叫做&#8220;<strong>编码</strong>&#8221;。 </li>
</ol>
<p>各个国家和地区在制定编码标准的时候，&#8220;字符的集合&#8221;和&#8220;编码&#8221;一般都是同时制定的。因此，平常我们所说的&#8220;字符集&#8221;，比如：GB2312, GBK, JIS 等，除了有&#8220;字符的集合&#8221;这层含义外，同时也包含了&#8220;编码&#8221;的含义。</p>
<p>&#8220;<strong>UNICODE 字符集</strong>&#8221;包含了各种语言中使用到的所有&#8220;字符&#8221;。用来给 UNICODE 字符集编码的标准有很多种，比如：UTF-8, UTF-7, UTF-16, UnicodeLittle, UnicodeBig 等。</p>
<h5>1.4 常用的编码简介</h5>
<p>简单介绍一下常用的编码规则，为后边的章节做一个准备。在这里，我们根据编码规则的特点，把所有的编码分成三类：</p>
<table cellSpacing=0 cellPadding=3 border=0>
    <tbody>
        <tr>
            <td class=top_1 align=middle><strong>分类</strong></td>
            <td class=top_2 align=middle><strong>编码标准</strong></td>
            <td class=top_2 align=middle><strong>说明</strong></td>
        </tr>
        <tr>
            <td class=con_1 noWrap align=middle>单字节字符编码</td>
            <td class=con_2>ISO-8859-1</td>
            <td class=con_2>最简单的编码规则，每一个字节直接作为一个 UNICODE 字符。比如，[0xD6, 0xD0] 这两个字节，通过 iso-8859-1 转化为字符串时，将直接得到 [0x00D6, 0x00D0] 两个 UNICODE 字符，即 "&#214;&#208;"。<br><br>反之，将 UNICODE 字符串通过 iso-8859-1 转化为字节串时，只能正常转化 0~255 范围的字符。</td>
        </tr>
        <tr>
            <td class=con_1 noWrap align=middle>ANSI 编码</td>
            <td class=con_2>GB2312,<br>BIG5,<br>Shift_JIS,<br>ISO-8859-2 &#8230;&#8230;</td>
            <td class=con_2>把 UNICODE 字符串通过 ANSI 编码转化为&#8220;字节串&#8221;时，根据各自编码的规定，一个 UNICODE 字符可能转化成一个字节或多个字节。<br><br>反之，将字节串转化成字符串时，也可能多个字节转化成一个字符。比如，[0xD6, 0xD0] 这两个字节，通过 GB2312 转化为字符串时，将得到 [0x4E2D] 一个字符，即 '中' 字。<br><br>&#8220;ANSI 编码&#8221;的特点：<br>1. 这些&#8220;ANSI 编码标准&#8221;都只能处理各自语言范围之内的 UNICODE 字符。<br>2. &#8220;UNICODE 字符&#8221;与&#8220;转换出来的字节&#8221;之间的关系是人为规定的。</td>
        </tr>
        <tr>
            <td class=bot_1 noWrap align=middle>UNICODE 编码</td>
            <td class=bot_2>UTF-8,<br>UTF-16, UnicodeBig &#8230;&#8230;</td>
            <td class=bot_2>与&#8220;ANSI 编码&#8221;类似的，把字符串通过 UNICODE 编码转化成&#8220;字节串&#8221;时，一个 UNICODE 字符可能转化成一个字节或多个字节。<br><br>与&#8220;ANSI 编码&#8221;不同的是：<br>1. 这些&#8220;UNICODE 编码&#8221;能够处理所有的 UNICODE 字符。<br>2. &#8220;UNICODE 字符&#8221;与&#8220;转换出来的字节&#8221;之间是可以通过计算得到的。</td>
        </tr>
    </tbody>
</table>
<p>我们实际上没有必要去深究每一种编码具体把某一个字符编码成了哪几个字节，我们只需要知道&#8220;编码&#8221;的概念就是把&#8220;字符&#8221;转化成&#8220;字节&#8221;就可以了。对于 &#8220;UNICODE 编码&#8221;，由于它们是可以通过计算得到的，因此，在特殊的场合，我们可以去了解某一种&#8220;UNICODE 编码&#8221;是怎样的规则。</p>
<h4>2. 字符与编码在程序中的实现</h4>
<h5>2.1 程序中的字符与字节</h5>
<p>在 C++ 和 Java 中，用来代表&#8220;字符&#8221;和&#8220;字节&#8221;的数据类型，以及进行编码的方法：</p>
<table cellSpacing=0 cellPadding=3 border=0>
    <tbody>
        <tr>
            <td class=top_1 align=middle><strong>类型或操作</strong></td>
            <td class=top_2 align=middle><strong>C++</strong></td>
            <td class=top_2 align=middle><strong>Java</strong></td>
        </tr>
        <tr>
            <td class=con_1 noWrap align=middle>字符</td>
            <td class=con_2>wchar_t</td>
            <td class=con_2>char</td>
        </tr>
        <tr>
            <td class=con_1 noWrap align=middle>字节</td>
            <td class=con_2>char</td>
            <td class=con_2>byte</td>
        </tr>
        <tr>
            <td class=con_1 noWrap align=middle>ANSI 字符串</td>
            <td class=con_2>char[]</td>
            <td class=con_2>byte[]</td>
        </tr>
        <tr>
            <td class=con_1 noWrap align=middle>UNICODE 字符串</td>
            <td class=con_2>wchar_t[]</td>
            <td class=con_2>String</td>
        </tr>
        <tr>
            <td class=con_1 noWrap align=middle>字节串&#8594;字符串</td>
            <td class=con_2>mbstowcs(), MultiByteToWideChar()</td>
            <td class=con_2>string = new String(bytes, "encoding")</td>
        </tr>
        <tr>
            <td class=bot_1 noWrap align=middle>字符串&#8594;字节串</td>
            <td class=bot_2>wcstombs(), WideCharToMultiByte()</td>
            <td class=bot_2>bytes = string.getBytes("encoding")</td>
        </tr>
    </tbody>
</table>
<p>以上需要注意几点：</p>
<ol>
    <li>Java 中的 char 代表一个&#8220;UNICODE 字符（宽字节字符）&#8221;，而 C++ 中的 char 代表一个字节。</li>
    <li>MultiByteToWideChar() 和 WideCharToMultiByte() 是 Windows API 函数。</li>
</ol>
<h5>2.2 C++ 中相关实现方法</h5>
<p>声明一段字符串常量：</p>
<table cellSpacing=0 cellPadding=6 bgColor=#eeeeee border=1>
    <tbody>
        <tr>
            <td class=code><span class=rem>// ANSI 字符串，内容长度 7 字节</span><span class=key><br>char</span>&nbsp;&nbsp;&nbsp;&nbsp; sz[<span class=number>20</span>] = <span class=string>"中文123"</span>;<br><br><span class=rem>// UNICODE 字符串，内容长度 5 个 wchar_t（10 字节）</span><br>wchar_t wsz[<span class=number>20</span>] = L<span class=string>"\x4E2D\x6587\x0031\x0032\x0033"</span>;</td>
        </tr>
    </tbody>
</table>
<p>UNICODE 字符串的 I/O 操作，字符与字节的转换操作：</p>
<table cellSpacing=0 cellPadding=6 bgColor=#eeeeee border=1>
    <tbody>
        <tr>
            <td class=code><span class=rem>// 运行时设定当前 ANSI 编码，VC 格式<br></span>setlocale(LC_ALL, <span class=string>".936"</span>);<br><br><span class=rem>// GCC 中格式</span><br>setlocale(LC_ALL, <span class=string>"zh_CN.GBK"</span>);<br><br><span class=rem>// Visual C++ 中使用小写 %s，按照 setlocale 指定编码输出到文件<br>// GCC 中使用大写 %S</span><br>fwprintf(fp, L<span class=string>"%s\n"</span>, wsz);<br><br><span class=rem>// 把 UNICODE 字符串按照 setlocale 指定的编码转换成字节</span><br>wcstombs(sz, wsz, <span class=number>20</span>);<span class=rem><br>// 把字节串按照 setlocale 指定的编码转换成 UNICODE 字符串<br></span>mbstowcs(wsz, sz, <span class=number>20</span>);</td>
        </tr>
    </tbody>
</table>
<p>在 Visual C++ 中，UNICODE 字符串常量有更简单的表示方法。如果源程序的编码与当前默认 ANSI 编码不符，则需要使用 #pragma setlocale，告诉编译器源程序使用的编码：</p>
<table cellSpacing=0 cellPadding=6 bgColor=#eeeeee border=1>
    <tbody>
        <tr>
            <td class=code><span class=rem>// 如果源程序的编码与当前默认 ANSI 编码不一致，<br>// 则需要此行，编译时用来指明当前源程序使用的编码</span><span class=key><br>#pragma setlocale</span>(<span class=string>".936"</span>)<br><br><span class=rem>// UNICODE 字符串常量，内容长度 10 字节</span><br>wchar_t wsz[<span class=number>20</span>] = L<span class=string>"中文123"</span>;</td>
        </tr>
    </tbody>
</table>
<p>以上需要注意 #pragma setlocale 与 setlocale(LC_ALL, "") 的作用是不同的，#pragma setlocale 在编译时起作用，setlocale() 在运行时起作用。</p>
<h5>2.3 Java 中相关实现方法</h5>
<p>字符串类 String 中的内容是 UNICODE 字符串：</p>
<table cellSpacing=0 cellPadding=6 bgColor=#eeeeee border=1>
    <tbody>
        <tr>
            <td class=code><span class=rem>// Java 代码，直接写中文</span><span class=pw><br>String</span> string = <span class=string>"中文123"</span>;<br><br><span class=rem>// 得到长度为 5，因为是 5 个字符</span><br><span class=pw>System</span>.out.println(string.length());</td>
        </tr>
    </tbody>
</table>
<p>字符串 I/O 操作，字符与字节转换操作。在 Java 包 java.io.* 中，以&#8220;Stream&#8221;结尾的类一般是用来操作&#8220;字节串&#8221;的类，以&#8220;Reader&#8221;，&#8220;Writer&#8221;结尾的类一般是用来操作&#8220;字符串&#8221;的类。</p>
<table cellSpacing=0 cellPadding=6 bgColor=#eeeeee border=1>
    <tbody>
        <tr>
            <td class=code><span class=rem>// 字符串与字节串间相互转化<br><br>// 按照 GB2312 得到字节（得到多字节字符串）</span><span class=key><br>byte</span> [] bytes = string.getBytes(<span class=string>"GB2312"</span>);<br><br><span class=rem>// 从字节按照 GB2312 得到 UNICODE 字符串</span><br>string = <span class=key>new</span> <span class=pw>String</span>(bytes, <span class=string>"GB2312"</span>);<br><br><span class=rem>// 要将 String 按照某种编码写入文本文件，有两种方法：<br><br>// 第一种办法：用 Stream 类写入已经按照指定编码转化好的字节串</span><br>OutputStream os = <span class=key>new</span> FileOutputStream(<span class=string>"1.txt"</span>);<br>os.write(bytes);<br>os.close();<br><br><span class=rem>// 第二种办法：构造指定编码的 Writer 来写入字符串</span><br>Writer ow = <span class=key>new</span> OutputStreamWriter(<span class=key>new</span> FileOutputStream(<span class=string>"2.txt"</span>), <span class=string>"GB2312"</span>);<br>ow.write(string);<br>ow.close();<br><br><span class=rem>/* 最后得到的 1.txt 和 2.txt 都是 7 个字节 */</span></td>
        </tr>
    </tbody>
</table>
<p>如果 java 的源程序编码与当前默认 ANSI 编码不符，则在编译的时候，需要指明一下源程序的编码。比如：</p>
<table cellSpacing=0 cellPadding=6 bgColor=#eeeeee border=1>
    <tbody>
        <tr>
            <td class=code>E:\&gt;javac <font color=#ff0000>-encoding BIG5</font> Hello.java</td>
        </tr>
    </tbody>
</table>
<p>以上需要注意区分源程序的编码与 I/O 操作的编码，前者是在编译时起作用，后者是在运行时起作用。</p>
<h4>3. 几种误解，以及乱码产生的原因和解决办法</h4>
<h5>3.1 容易产生的误解</h5>
<table cellSpacing=0 cellPadding=3 border=0>
    <tbody>
        <tr>
            <td class=top_1>　</td>
            <td class=top_2 align=middle><strong>对编码的误解</strong></td>
        </tr>
        <tr>
            <td class=con_1 noWrap align=middle>误解一</td>
            <td class=con_2>在将&#8220;字节串&#8221;转化成&#8220;UNICODE 字符串&#8221;时，比如在读取文本文件时，或者通过网络传输文本时，容易将&#8220;字节串&#8221;简单地作为<strong>单字节字符串</strong>，采用每&#8220;一个字节&#8221;就是&#8220;一个字符&#8221;的方法进行转化。<br><br>而实际上，在非英文的环境中，应该将&#8220;字节串&#8221;作为 ANSI 字符串，采用适当的编码来得到 UNICODE 字符串，有可能&#8220;多个字节&#8221;才能得到&#8220;一个字符&#8221;。<br><br>通常，一直在英文环境下做开发的程序员们，容易有这种误解。</td>
        </tr>
        <tr>
            <td class=bot_1 noWrap align=middle>误解二</td>
            <td class=bot_2>在 DOS，Windows 98 等非 UNICODE 环境下，字符串都是以 ANSI 编码的字节形式存在的。这种以字节形式存在的字符串，必须知道是哪种编码才能被正确地使用。这使我们形成了一个惯性思维：&#8220;字符串的编码&#8221;。<br><br>当 UNICODE 被支持后，Java 中的 String 是以字符的&#8220;序号&#8221;来存储的，不是以&#8220;某种编码的字节&#8221;来存储的，因此已经不存在&#8220;字符串的编码&#8221;这个概念了。只有在&#8220;字符串&#8221;与&#8220;字节串&#8221;转化时，或者，将一个&#8220;字节串&#8221;当成一个 ANSI 字符串时，才有编码的概念。<br><br>不少的人都有这个误解。</td>
        </tr>
    </tbody>
</table>
<p>第一种误解，往往是导致乱码产生的原因。第二种误解，往往导致本来容易纠正的乱码问题变得更复杂。</p>
<p>在这里，我们可以看到，其中所讲的&#8220;误解一&#8221;，即采用每&#8220;一个字节&#8221;就是&#8220;一个字符&#8221;的转化方法，实际上也就等同于采用 iso-8859-1 进行转化。因此，我们常常使用 bytes = string.getBytes("iso-8859-1") 来进行逆向操作，得到原始的&#8220;字节串&#8221;。然后再使用正确的 ANSI 编码，比如 string = new String(bytes, "GB2312")，来得到正确的&#8220;UNICODE 字符串&#8221;。</p>
<h5>3.2 非 UNICODE 程序在不同语言环境间移植时的乱码</h5>
<p>非 UNICODE 程序中的字符串，都是以某种 ANSI 编码形式存在的。如果程序运行时的语言环境与开发时的语言环境不同，将会导致 ANSI 字符串的显示失败。</p>
<p>比如，在日文环境下开发的非 UNICODE 的日文程序界面，拿到中文环境下运行时，界面上将显示乱码。如果这个日文程序界面改为采用 UNICODE 来记录字符串，那么当在中文环境下运行时，界面上将可以显示正常的日文。</p>
<p>由于客观原因，有时候我们必须在中文操作系统下运行非 UNICODE 的日文软件，这时我们可以采用一些工具，比如，南极星，AppLocale 等，暂时的模拟不同的语言环境。</p>
<h5>3.3 网页提交字符串</h5>
<p>当页面中的表单提交字符串时，首先把字符串按照当前页面的编码，转化成字节串。然后再将每个字节转化成 "%XX" 的格式提交到 Web 服务器。比如，一个编码为 GB2312 的页面，提交 "中" 这个字符串时，提交给服务器的内容为 "%D6%D0"。</p>
<p>在服务器端，Web 服务器把收到的 "%D6%D0" 转化成 [0xD6, 0xD0] 两个字节，然后再根据 GB2312 编码规则得到 "中" 字。</p>
<p>在 Tomcat 服务器中，request.getParameter() 得到乱码时，常常是因为前面提到的&#8220;误解一&#8221;造成的。默认情况下，当提交 "%D6%D0" 给 Tomcat 服务器时，request.getParameter() 将返回 [0x00D6, 0x00D0] 两个 UNICODE 字符，而不是返回一个 "中" 字符。因此，我们需要使用 bytes = string.getBytes("iso-8859-1") 得到原始的字节串，再用 string = new String(bytes, "GB2312") 重新得到正确的字符串 "中"。</p>
<h5>3.4 从数据库读取字符串</h5>
<p>通过数据库客户端（比如 ODBC 或 JDBC）从数据库服务器中读取字符串时，客户端需要从服务器获知所使用的 ANSI 编码。当数据库服务器发送字节流给客户端时，客户端负责将字节流按照正确的编码转化成 UNICODE 字符串。</p>
<p>如果从数据库读取字符串时得到乱码，而数据库中存放的数据又是正确的，那么往往还是因为前面提到的&#8220;误解一&#8221;造成的。解决的办法还是通过 string = new String( string.getBytes("iso-8859-1"), "GB2312") 的方法，重新得到原始的字节串，再重新使用正确的编码转化成字符串。</p>
<h5>3.5 电子邮件中的字符串</h5>
<p>当一段 Text 或者 HTML 通过电子邮件传送时，发送的内容首先通过一种指定的<strong>字符编码</strong>转化成&#8220;字节串&#8221;，然后再把&#8220;字节串&#8221;通过一种指定的<strong>传输编码</strong>（Content-Transfer-Encoding）进行转化得到另一串&#8220;字节串&#8221;。比如，打开一封电子邮件源代码，可以看到类似的内容：</p>
<table cellSpacing=0 cellPadding=6 width="100%" bgColor=#eeeeee border=1>
    <tbody>
        <tr>
            <td class=code>Content-Type: text/plain;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#ff0000>charset="gb2312"</font><br><font color=#ff0000>Content-Transfer-Encoding: base64</font><br><br>sbG+qcrQuqO17cf4yee74bGjz9W7+b3wudzA7dbQ0MQNCg0KvPKzxqO6uqO17cnnsaPW0NDEDQoNCg==</td>
        </tr>
    </tbody>
</table>
<p>最常用的 Content-Transfer-Encoding 有 Base64 和 Quoted-Printable 两种。在对二进制文件或者中文文本进行转化时，Base64 得到的&#8220;字节串&#8221;比 Quoted-Printable 更短。在对英文文本进行转化时，Quoted-Printable 得到的&#8220;字节串&#8221;比 Base64 更短。</p>
<p>邮件的标题，用了一种更简短的格式来标注&#8220;字符编码&#8221;和&#8220;传输编码&#8221;。比如，标题内容为 "中"，则在邮件源代码中表示为：</p>
<table cellSpacing=0 cellPadding=6 width="100%" bgColor=#eeeeee border=1>
    <tbody>
        <tr>
            <td class=code><span class=rem>// 正确的标题格式</span><br>Subject: <span style="BACKGROUND-COLOR: rgb(255,255,0)">=?</span>GB2312<span style="BACKGROUND-COLOR: rgb(255,255,0)">?B?</span>1tA=<span style="BACKGROUND-COLOR: rgb(255,255,0)">?=</span></td>
        </tr>
    </tbody>
</table>
<p>其中，</p>
<ul>
    <li>第一个&#8220;=?&#8221;与&#8220;?&#8221;中间的部分指定了字符编码，在这个例子中指定的是 GB2312。</li>
    <li>&#8220;?&#8221;与&#8220;?&#8221;中间的&#8220;B&#8221;代表 Base64。如果是&#8220;Q&#8221;则代表 Quoted-Printable。</li>
    <li>最后&#8220;?&#8221;与&#8220;?=&#8221;之间的部分，就是经过 GB2312 转化成字节串，再经过 Base64 转化后的标题内容。</li>
</ul>
<p>如果&#8220;传输编码&#8221;改为 Quoted-Printable，同样，如果标题内容为 "中"：</p>
<table cellSpacing=0 cellPadding=6 width="100%" bgColor=#eeeeee border=1>
    <tbody>
        <tr>
            <td class=code><span class=rem>// 正确的标题格式</span><br>Subject: <span style="BACKGROUND-COLOR: rgb(255,255,0)">=?</span>GB2312<span style="BACKGROUND-COLOR: rgb(255,255,0)">?Q?</span>=D6=D0<span style="BACKGROUND-COLOR: rgb(255,255,0)">?=</span></td>
        </tr>
    </tbody>
</table>
<p>如果阅读邮件时出现乱码，一般是因为&#8220;字符编码&#8221;或&#8220;传输编码&#8221;指定有误，或者是没有指定。比如，有的发邮件组件在发送邮件时，标题 "中"：</p>
<table cellSpacing=0 cellPadding=6 width="100%" bgColor=#eeeeee border=1>
    <tbody>
        <tr>
            <td class=code><span class=rem>// 错误的标题格式</span><br>Subject: <span style="BACKGROUND-COLOR: rgb(255,255,0)">=?</span><font color=#ff0000>ISO-8859-1</font><span style="BACKGROUND-COLOR: rgb(255,255,0)">?Q?</span>=D6=D0<span style="BACKGROUND-COLOR: rgb(255,255,0)">?=</span></td>
        </tr>
    </tbody>
</table>
<p>这样的表示，实际上是明确指明了标题为 [0x00D6, 0x00D0]，即 "&#214;&#208;"，而不是 "中"。</p>
<h4>4. 几种错误理解的纠正</h4>
<h5>误解：&#8220;ISO-8859-1 是国际编码？&#8221;</h5>
<p>非也。iso-8859-1 只是单字节字符集中最简单的一种，也就是&#8220;字节编号&#8221;与&#8220;UNICODE 字符编号&#8221;一致的那种编码规则。当我们要把一个&#8220;字节串&#8221;转化成&#8220;字符串&#8221;，而又不知道它是哪一种 ANSI 编码时，先暂时地把&#8220;每一个字节&#8221;作为&#8220;一个字符&#8221;进行转化，不会造成信息丢失。然后再使用 bytes = string.getBytes("iso-8859-1") 的方法可恢复到原始的字节串。</p>
<h5>误解：&#8220;Java 中，怎样知道某个字符串的内码？&#8221;</h5>
<p>Java 中，字符串类 java.lang.String 处理的是 UNICODE 字符串，不是 ANSI 字符串。我们只需要把字符串作为&#8220;抽象的符号的串&#8221;来看待。因此不存在字符串的内码的问题。</p>
<img src ="http://www.blogjava.net/123xxx/aggbug/108137.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/123xxx/" target="_blank">OO</a> 2007-04-03 10:25 <a href="http://www.blogjava.net/123xxx/articles/java_encoding.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使java服务器端支持断点续传</title><link>http://www.blogjava.net/123xxx/articles/108116.html</link><dc:creator>OO</dc:creator><author>OO</author><pubDate>Tue, 03 Apr 2007 01:04:00 GMT</pubDate><guid>http://www.blogjava.net/123xxx/articles/108116.html</guid><wfw:comment>http://www.blogjava.net/123xxx/comments/108116.html</wfw:comment><comments>http://www.blogjava.net/123xxx/articles/108116.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/123xxx/comments/commentRss/108116.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/123xxx/services/trackbacks/108116.html</trackback:ping><description><![CDATA[<div style="BORDER-RIGHT: rgb(204,204,204) 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: rgb(204,204,204) 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: rgb(204,204,204) 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: rgb(204,204,204) 1px solid; BACKGROUND-COLOR: rgb(238,238,238)"><span style="COLOR: rgb(0,128,128)">1</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,128,0)">/**</span><span style="COLOR: rgb(0,128,0)"><br></span><span style="COLOR: rgb(0,128,128)">&nbsp;2</span>&nbsp;<span style="COLOR: rgb(0,128,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;重新设置http&nbsp;response参数，使之支持断点续传.<br></span><span style="COLOR: rgb(0,128,128)">&nbsp;3</span>&nbsp;<span style="COLOR: rgb(0,128,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br></span><span style="COLOR: rgb(0,128,128)">&nbsp;4</span>&nbsp;<span style="COLOR: rgb(0,128,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="COLOR: rgb(128,128,128)">@param</span><span style="COLOR: rgb(0,128,0)">&nbsp;fileLength<br></span><span style="COLOR: rgb(0,128,128)">&nbsp;5</span>&nbsp;<span style="COLOR: rgb(0,128,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;文件长度.<br></span><span style="COLOR: rgb(0,128,128)">&nbsp;6</span>&nbsp;<span style="COLOR: rgb(0,128,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="COLOR: rgb(128,128,128)">@throws</span><span style="COLOR: rgb(0,128,0)">&nbsp;IOException<br></span><span style="COLOR: rgb(0,128,128)">&nbsp;7</span>&nbsp;<span style="COLOR: rgb(0,128,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br></span><span style="COLOR: rgb(0,128,128)">&nbsp;8</span>&nbsp;<span style="COLOR: rgb(0,128,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,128,0)">*/</span><span style="COLOR: rgb(0,0,0)"><br></span><span style="COLOR: rgb(0,128,128)">&nbsp;9</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">private</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(0,0,255)">void</span><span style="COLOR: rgb(0,0,0)">&nbsp;resetResponse(</span><span style="COLOR: rgb(0,0,255)">long</span><span style="COLOR: rgb(0,0,0)">&nbsp;fileLength)&nbsp;</span><span style="COLOR: rgb(0,0,255)">throws</span><span style="COLOR: rgb(0,0,0)">&nbsp;IOException&nbsp;{<br></span><span style="COLOR: rgb(0,128,128)">10</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">long</span><span style="COLOR: rgb(0,0,0)">&nbsp;p&nbsp;</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(0,0,0)">0</span><span style="COLOR: rgb(0,0,0)">;<br></span><span style="COLOR: rgb(0,128,128)">11</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">long</span><span style="COLOR: rgb(0,0,0)">&nbsp;l&nbsp;</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">&nbsp;fileLength;<br></span><span style="COLOR: rgb(0,128,128)">12</span>&nbsp;<span style="COLOR: rgb(0,0,0)"><br></span><span style="COLOR: rgb(0,128,128)">13</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServletActionContext.getResponse().reset();<br></span><span style="COLOR: rgb(0,128,128)">14</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,128,0)">//</span><span style="COLOR: rgb(0,128,0)">&nbsp;告诉客户端允许断点续传多线程连接下载<br></span><span style="COLOR: rgb(0,128,128)">15</span>&nbsp;<span style="COLOR: rgb(0,128,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,128,0)">//</span><span style="COLOR: rgb(0,128,0)">&nbsp;响应的格式是:<br></span><span style="COLOR: rgb(0,128,128)">16</span>&nbsp;<span style="COLOR: rgb(0,128,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,128,0)">//</span><span style="COLOR: rgb(0,128,0)">&nbsp;Accept-Ranges:&nbsp;bytes</span><span style="COLOR: rgb(0,128,0)"><br></span><span style="COLOR: rgb(0,128,128)">17</span>&nbsp;<span style="COLOR: rgb(0,128,0)"></span><span style="COLOR: rgb(0,0,0)"><br></span><span style="COLOR: rgb(0,128,128)">18</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServletActionContext.getResponse().setHeader(</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">Accept-Ranges</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">,&nbsp;</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">bytes</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">);<br></span><span style="COLOR: rgb(0,128,128)">19</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,128,0)">//</span><span style="COLOR: rgb(0,128,0)">&nbsp;如果是第一次下,还没有断点续传,状态是默认的&nbsp;200,无需显式设置<br></span><span style="COLOR: rgb(0,128,128)">20</span>&nbsp;<span style="COLOR: rgb(0,128,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,128,0)">//</span><span style="COLOR: rgb(0,128,0)">&nbsp;响应的格式是:<br></span><span style="COLOR: rgb(0,128,128)">21</span>&nbsp;<span style="COLOR: rgb(0,128,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,128,0)">//</span><span style="COLOR: rgb(0,128,0)">&nbsp;HTTP/1.1&nbsp;200&nbsp;OK</span><span style="COLOR: rgb(0,128,0)"><br></span><span style="COLOR: rgb(0,128,128)">22</span>&nbsp;<span style="COLOR: rgb(0,128,0)"></span><span style="COLOR: rgb(0,0,0)"><br></span><span style="COLOR: rgb(0,128,128)">23</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">if</span><span style="COLOR: rgb(0,0,0)">&nbsp;(ServletActionContext.getRequest().getHeader(</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">Range</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">)&nbsp;</span><span style="COLOR: rgb(0,0,0)">!=</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(0,0,255)">null</span><span style="COLOR: rgb(0,0,0)">)&nbsp;</span><span style="COLOR: rgb(0,128,0)">//</span><span style="COLOR: rgb(0,128,0)">&nbsp;客户端请求的下载的文件块的开始字节</span><span style="COLOR: rgb(0,128,0)"><br></span><span style="COLOR: rgb(0,128,128)">24</span>&nbsp;<span style="COLOR: rgb(0,128,0)"></span><span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: rgb(0,128,128)">25</span>&nbsp;<span style="COLOR: rgb(0,0,0)"><br></span><span style="COLOR: rgb(0,128,128)">26</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServletActionContext.getResponse().setStatus(<br></span><span style="COLOR: rgb(0,128,128)">27</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;javax.servlet.http.HttpServletResponse.SC_PARTIAL_CONTENT);<br></span><span style="COLOR: rgb(0,128,128)">28</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">&nbsp;Long.parseLong(ServletActionContext.getRequest().getHeader(<br></span><span style="COLOR: rgb(0,128,128)">29</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">Range</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">).replaceAll(</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">bytes=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">,&nbsp;</span><span style="COLOR: rgb(0,0,0)">""</span><span style="COLOR: rgb(0,0,0)">).replaceAll(</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">-</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">,&nbsp;</span><span style="COLOR: rgb(0,0,0)">""</span><span style="COLOR: rgb(0,0,0)">));<br></span><span style="COLOR: rgb(0,128,128)">30</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: rgb(0,128,128)">31</span>&nbsp;<span style="COLOR: rgb(0,0,0)"><br></span><span style="COLOR: rgb(0,128,128)">32&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; </span><span style="COLOR: rgb(0,128,0)">//如果设设置了</span><span style="COLOR: rgb(0,128,0)">Content-Length，则客户端会自动进行多线程下载。如果不希望支持多线程，则不要设置这个参数。</span><span style="COLOR: rgb(0,128,0)"><br></span><span style="COLOR: rgb(0,128,128)">33</span>&nbsp;<span style="COLOR: rgb(0,128,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,128,0)">//</span><span style="COLOR: rgb(0,128,0)">&nbsp;响应的格式是:<br></span><span style="COLOR: rgb(0,128,128)">34</span>&nbsp;<span style="COLOR: rgb(0,128,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,128,0)">//</span><span style="COLOR: rgb(0,128,0)">&nbsp;Content-Length:&nbsp;[文件的总大小]&nbsp;-&nbsp;[客户端请求的下载的文件块的开始字节]<br></span><span style="COLOR: rgb(0,128,128)">35</span>&nbsp;<span style="COLOR: rgb(0,128,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,128,0)">//</span><span style="COLOR: rgb(0,128,0)">&nbsp;ServletActionContext.getResponse().setHeader("Content-Length",<br></span><span style="COLOR: rgb(0,128,128)">36</span>&nbsp;<span style="COLOR: rgb(0,128,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,128,0)">//</span><span style="COLOR: rgb(0,128,0)">&nbsp;new&nbsp;Long(file.length()&nbsp;-&nbsp;p).toString());</span><span style="COLOR: rgb(0,128,0)"><br></span><span style="COLOR: rgb(0,128,128)">37</span>&nbsp;<span style="COLOR: rgb(0,128,0)"></span><span style="COLOR: rgb(0,0,0)"><br></span><span style="COLOR: rgb(0,128,128)">38</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">if</span><span style="COLOR: rgb(0,0,0)">&nbsp;(p&nbsp;</span><span style="COLOR: rgb(0,0,0)">!=</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(0,0,0)">0</span><span style="COLOR: rgb(0,0,0)">)&nbsp;{<br></span><span style="COLOR: rgb(0,128,128)">39</span>&nbsp;<span style="COLOR: rgb(0,0,0)"><br></span><span style="COLOR: rgb(0,128,128)">40</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,128,0)">//</span><span style="COLOR: rgb(0,128,0)">&nbsp;不是从最开始下载,<br></span><span style="COLOR: rgb(0,128,128)">41</span>&nbsp;<span style="COLOR: rgb(0,128,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,128,0)">//</span><span style="COLOR: rgb(0,128,0)">&nbsp;响应的格式是:<br></span><span style="COLOR: rgb(0,128,128)">42</span>&nbsp;<span style="COLOR: rgb(0,128,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,128,0)">//</span><span style="COLOR: rgb(0,128,0)">&nbsp;Content-Range:&nbsp;bytes&nbsp;[文件块的开始字节]-[文件的总大小&nbsp;-&nbsp;1]/[文件的总大小]</span><span style="COLOR: rgb(0,128,0)"><br></span><span style="COLOR: rgb(0,128,128)">43</span>&nbsp;<span style="COLOR: rgb(0,128,0)"></span><span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;contentRange&nbsp;</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(0,0,255)">new</span><span style="COLOR: rgb(0,0,0)">&nbsp;StringBuffer(</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">bytes&nbsp;</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">)<br></span><span style="COLOR: rgb(0,128,128)">44</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.append(</span><span style="COLOR: rgb(0,0,255)">new</span><span style="COLOR: rgb(0,0,0)">&nbsp;Long(p).toString())<br></span><span style="COLOR: rgb(0,128,128)">45</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.append(</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">-</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">)<br></span><span style="COLOR: rgb(0,128,128)">46</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.append(</span><span style="COLOR: rgb(0,0,255)">new</span><span style="COLOR: rgb(0,0,0)">&nbsp;Long(l&nbsp;</span><span style="COLOR: rgb(0,0,0)">-</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">).toString())<br></span><span style="COLOR: rgb(0,128,128)">47</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.append(</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">/</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">)<br></span><span style="COLOR: rgb(0,128,128)">48</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.append(</span><span style="COLOR: rgb(0,0,255)">new</span><span style="COLOR: rgb(0,0,0)">&nbsp;Long(l).toString())<br></span><span style="COLOR: rgb(0,128,128)">49</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.toString();<br></span><span style="COLOR: rgb(0,128,128)">50</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServletActionContext.getResponse().setHeader(</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">Content-Range</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">,<br></span><span style="COLOR: rgb(0,128,128)">51</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;contentRange);<br></span><span style="COLOR: rgb(0,128,128)">52</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LogService.info(</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">Content-Range&nbsp;is&nbsp;:&nbsp;</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)">&nbsp;contentRange);<br></span><span style="COLOR: rgb(0,128,128)">53</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: rgb(0,128,128)">54</span>&nbsp;<span style="COLOR: rgb(0,0,0)"><br></span><span style="COLOR: rgb(0,128,128)">55</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_fileStream.skip(p);<br></span><span style="COLOR: rgb(0,128,128)">56</span>&nbsp;<span style="COLOR: rgb(0,0,0)"><br></span><span style="COLOR: rgb(0,128,128)">57</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;}</span><br>正如代码所示，实现断点续传和多线程下载的关键在于对response的参数进行设置。</div>
<br><br>
<img src ="http://www.blogjava.net/123xxx/aggbug/108116.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/123xxx/" target="_blank">OO</a> 2007-04-03 09:04 <a href="http://www.blogjava.net/123xxx/articles/108116.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>为javascript增加import方法，用来导入需要的js文件.</title><link>http://www.blogjava.net/123xxx/articles/88578.html</link><dc:creator>OO</dc:creator><author>OO</author><pubDate>Mon, 18 Dec 2006 08:45:00 GMT</pubDate><guid>http://www.blogjava.net/123xxx/articles/88578.html</guid><wfw:comment>http://www.blogjava.net/123xxx/comments/88578.html</wfw:comment><comments>http://www.blogjava.net/123xxx/articles/88578.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/123xxx/comments/commentRss/88578.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/123xxx/services/trackbacks/88578.html</trackback:ping><description><![CDATA[<br>为javascript增加import方法，用于引入需要的js文件。通过增加element的方法进行添加的方法是从网上得来的。我将原来作为参数传进来的type改成了根据文件名后缀来判断，看起来更加直观一些。<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img id=Codehighlighter1_0_734_Open_Image onclick="this.style.display='none'; Codehighlighter1_0_734_Open_Text.style.display='none'; Codehighlighter1_0_734_Closed_Image.style.display='inline'; Codehighlighter1_0_734_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_0_734_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_734_Closed_Text.style.display='none'; Codehighlighter1_0_734_Open_Image.style.display='inline'; Codehighlighter1_0_734_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top><span id=Codehighlighter1_0_734_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_0_734_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">--------------------------------------------------------------------------+<br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;|&nbsp;JSLoad&nbsp;(url&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;String&nbsp;&nbsp;-&nbsp;Scripts&nbsp;location&nbsp;(i.e.&nbsp;http://<img src="http://www.blogjava.net/Images/dot.gif">/a.js)<br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[,&nbsp;container]&nbsp;//&nbsp;Object&nbsp;&nbsp;-&nbsp;Window&nbsp;with&nbsp;script&nbsp;loading&nbsp;capability<br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[,&nbsp;type]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;String&nbsp;&nbsp;-&nbsp;Type&nbsp;of&nbsp;script&nbsp;(i.e.&nbsp;text/javascript)<br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[,&nbsp;defer]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Boolean&nbsp;-&nbsp;Flag&nbsp;for&nbsp;delaying&nbsp;script&nbsp;processing<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[,&nbsp;language]&nbsp;&nbsp;//&nbsp;String&nbsp;&nbsp;-&nbsp;Language&nbsp;script&nbsp;is&nbsp;written&nbsp;in.<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[,&nbsp;title])&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;String&nbsp;&nbsp;-&nbsp;Title&nbsp;for&nbsp;loaded&nbsp;script<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;|+--------------------------------------------------------------------------+<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;|&nbsp;Loads&nbsp;external&nbsp;JavaScripts;&nbsp;used&nbsp;by&nbsp;Import.<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;*--------------------------------------------------------------------------</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;JSLoad(url,&nbsp;container,&nbsp;type,&nbsp;defer,&nbsp;language,&nbsp;title)<br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img id=Codehighlighter1_804_2082_Open_Image onclick="this.style.display='none'; Codehighlighter1_804_2082_Open_Text.style.display='none'; Codehighlighter1_804_2082_Closed_Image.style.display='inline'; Codehighlighter1_804_2082_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_804_2082_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_804_2082_Closed_Text.style.display='none'; Codehighlighter1_804_2082_Open_Image.style.display='inline'; Codehighlighter1_804_2082_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_804_2082_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_804_2082_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;verify&nbsp;/&nbsp;attain&nbsp;container</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">14</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(container&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;undefined&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;container&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">)&nbsp;container&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;setup&nbsp;container</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">17</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">typeof</span><span style="COLOR: #000000">&nbsp;container.write&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">undefined</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">typeof</span><span style="COLOR: #000000">&nbsp;container.document&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">undefined</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;container&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;container.document;<br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">throw</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Invalid&nbsp;container.&nbsp;Unable&nbsp;to&nbsp;load&nbsp;[</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;url&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;no&nbsp;type&nbsp;set</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">23</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(type&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;undefined&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;type&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img id=Codehighlighter1_1228_1450_Open_Image onclick="this.style.display='none'; Codehighlighter1_1228_1450_Open_Text.style.display='none'; Codehighlighter1_1228_1450_Closed_Image.style.display='inline'; Codehighlighter1_1228_1450_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1228_1450_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1228_1450_Closed_Text.style.display='none'; Codehighlighter1_1228_1450_Open_Image.style.display='inline'; Codehighlighter1_1228_1450_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1228_1450_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_1228_1450_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;'';<br></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;no&nbsp;language&nbsp;so&nbsp;set&nbsp;default&nbsp;type</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">28</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(language&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;undefined&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;language&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img id=Codehighlighter1_1359_1442_Open_Image onclick="this.style.display='none'; Codehighlighter1_1359_1442_Open_Text.style.display='none'; Codehighlighter1_1359_1442_Closed_Image.style.display='inline'; Codehighlighter1_1359_1442_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1359_1442_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1359_1442_Closed_Text.style.display='none'; Codehighlighter1_1359_1442_Open_Image.style.display='inline'; Codehighlighter1_1359_1442_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1359_1442_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_1359_1442_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;language&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;undefined;<br></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">text/javascript</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">35</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;set&nbsp;default&nbsp;language</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">36</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(language&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;undefined&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;language&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">)&nbsp;language&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">JavaScript</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">38</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;set&nbsp;title</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">39</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(title&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;undefined&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;title&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">)&nbsp;title&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;'';<br></span><span style="COLOR: #008080">40</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">41</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;set&nbsp;defer</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">42</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(defer&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;undefined)&nbsp;defer&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">43</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">44</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;build&nbsp;the&nbsp;script&nbsp;object</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">45</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;script&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;container.createElement(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">script</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">46</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;script.defer&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;defer;<br></span><span style="COLOR: #008080">47</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;script.language&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;language;<br></span><span style="COLOR: #008080">48</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;script.title&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;title;<br></span><span style="COLOR: #008080">49</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;script.type&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;type;<br></span><span style="COLOR: #008080">50</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;script.src&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;url;<br></span><span style="COLOR: #008080">51</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">52</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;dynamically&nbsp;load&nbsp;the&nbsp;script&nbsp;via&nbsp;it's&nbsp;container</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">53</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;head&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;container.getElementsByTagName(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">head</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #008080">54</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;head.appendChild(script);<br></span><span style="COLOR: #008080">55</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;}</span></span></div>
<br>使用方法：$import("test.js");<br>
<img src ="http://www.blogjava.net/123xxx/aggbug/88578.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/123xxx/" target="_blank">OO</a> 2006-12-18 16:45 <a href="http://www.blogjava.net/123xxx/articles/88578.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript Element拖拽功能</title><link>http://www.blogjava.net/123xxx/articles/87313.html</link><dc:creator>OO</dc:creator><author>OO</author><pubDate>Tue, 12 Dec 2006 09:34:00 GMT</pubDate><guid>http://www.blogjava.net/123xxx/articles/87313.html</guid><wfw:comment>http://www.blogjava.net/123xxx/comments/87313.html</wfw:comment><comments>http://www.blogjava.net/123xxx/articles/87313.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/123xxx/comments/commentRss/87313.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/123xxx/services/trackbacks/87313.html</trackback:ping><description><![CDATA[<br>在页面中包含如下代码之后，使用<span style="COLOR: rgb(0,0,0)">makeDraggable(</span><span style="COLOR: rgb(0,0,0)">item</span><span style="COLOR: rgb(0,0,0)">)来使页面元素可以拖拽</span> <br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>document.onmousemove&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;mouseMove;<br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>document.onmouseup&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;mouseUp;<br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;dragObject&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;mouseOffset&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;maxTop&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;maxWidth&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img id=Codehighlighter1_196_366_Open_Image onclick="this.style.display='none'; Codehighlighter1_196_366_Open_Text.style.display='none'; Codehighlighter1_196_366_Closed_Image.style.display='inline'; Codehighlighter1_196_366_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_196_366_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_196_366_Closed_Text.style.display='none'; Codehighlighter1_196_366_Open_Image.style.display='inline'; Codehighlighter1_196_366_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;getMouseOffset(target,&nbsp;event)</span><span id=Codehighlighter1_196_366_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_196_366_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;event&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;event&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;window.event;<br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;docPos&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;getPosition(target);<br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;mousePos&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;mouseCoords(event);<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img id=Codehighlighter1_314_363_Open_Image onclick="this.style.display='none'; Codehighlighter1_314_363_Open_Text.style.display='none'; Codehighlighter1_314_363_Closed_Image.style.display='inline'; Codehighlighter1_314_363_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_314_363_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_314_363_Closed_Text.style.display='none'; Codehighlighter1_314_363_Open_Image.style.display='inline'; Codehighlighter1_314_363_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_314_363_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_314_363_Open_Text><span style="COLOR: #000000">{x:mousePos.x&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;docPos.x,&nbsp;y:mousePos.y&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;docPos.y}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img id=Codehighlighter1_392_598_Open_Image onclick="this.style.display='none'; Codehighlighter1_392_598_Open_Text.style.display='none'; Codehighlighter1_392_598_Closed_Image.style.display='inline'; Codehighlighter1_392_598_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_392_598_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_392_598_Closed_Text.style.display='none'; Codehighlighter1_392_598_Open_Image.style.display='inline'; Codehighlighter1_392_598_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;getPosition(e)</span><span id=Codehighlighter1_392_598_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_392_598_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;left&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;top&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img id=Codehighlighter1_448_524_Open_Image onclick="this.style.display='none'; Codehighlighter1_448_524_Open_Text.style.display='none'; Codehighlighter1_448_524_Closed_Image.style.display='inline'; Codehighlighter1_448_524_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_448_524_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_448_524_Closed_Text.style.display='none'; Codehighlighter1_448_524_Open_Image.style.display='inline'; Codehighlighter1_448_524_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(e.offsetParent)</span><span id=Codehighlighter1_448_524_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_448_524_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;left&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;e.offsetLeft;<br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;top&nbsp;&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;e.offsetTop;<br></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;e.offsetParent;<br></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;left&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;e.offsetLeft;<br></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;top&nbsp;&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;e.offsetTop;<br></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img id=Codehighlighter1_581_595_Open_Image onclick="this.style.display='none'; Codehighlighter1_581_595_Open_Text.style.display='none'; Codehighlighter1_581_595_Closed_Image.style.display='inline'; Codehighlighter1_581_595_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_581_595_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_581_595_Closed_Text.style.display='none'; Codehighlighter1_581_595_Open_Image.style.display='inline'; Codehighlighter1_581_595_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_581_595_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_581_595_Open_Text><span style="COLOR: #000000">{x:left,&nbsp;y:top}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img id=Codehighlighter1_626_1126_Open_Image onclick="this.style.display='none'; Codehighlighter1_626_1126_Open_Text.style.display='none'; Codehighlighter1_626_1126_Closed_Image.style.display='inline'; Codehighlighter1_626_1126_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_626_1126_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_626_1126_Closed_Text.style.display='none'; Codehighlighter1_626_1126_Open_Image.style.display='inline'; Codehighlighter1_626_1126_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;mouseMove(event)</span><span id=Codehighlighter1_626_1126_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_626_1126_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">35</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;event&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;event&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;window.event;<br></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;mousePos&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;mouseCoords(event);<br></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">38</span><span style="COLOR: #000000"><img id=Codehighlighter1_722_1124_Open_Image onclick="this.style.display='none'; Codehighlighter1_722_1124_Open_Text.style.display='none'; Codehighlighter1_722_1124_Closed_Image.style.display='inline'; Codehighlighter1_722_1124_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_722_1124_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_722_1124_Closed_Text.style.display='none'; Codehighlighter1_722_1124_Open_Image.style.display='inline'; Codehighlighter1_722_1124_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(dragObject)</span><span id=Codehighlighter1_722_1124_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_722_1124_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">39</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dragObject.style.position&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;'absolute';<br></span><span style="COLOR: #008080">40</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;tmpTop&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;mousePos.y&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;mouseOffset.y;<br></span><span style="COLOR: #008080">41</span><span style="COLOR: #000000"><img id=Codehighlighter1_824_844_Open_Image onclick="this.style.display='none'; Codehighlighter1_824_844_Open_Text.style.display='none'; Codehighlighter1_824_844_Closed_Image.style.display='inline'; Codehighlighter1_824_844_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_824_844_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_824_844_Closed_Text.style.display='none'; Codehighlighter1_824_844_Open_Image.style.display='inline'; Codehighlighter1_824_844_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(tmpTop</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">)</span><span id=Codehighlighter1_824_844_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_824_844_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">42</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpTop&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">43</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">44</span><span style="COLOR: #000000"><img id=Codehighlighter1_865_889_Open_Image onclick="this.style.display='none'; Codehighlighter1_865_889_Open_Text.style.display='none'; Codehighlighter1_865_889_Closed_Image.style.display='inline'; Codehighlighter1_865_889_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_865_889_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_865_889_Closed_Text.style.display='none'; Codehighlighter1_865_889_Open_Image.style.display='inline'; Codehighlighter1_865_889_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(tmpTop</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">maxTop)</span><span id=Codehighlighter1_865_889_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_865_889_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">45</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpTop&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;maxTop;<br></span><span style="COLOR: #008080">46</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">47</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;tmpLeft&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;mousePos.x&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;mouseOffset.x;<br></span><span style="COLOR: #008080">48</span><span style="COLOR: #000000"><img id=Codehighlighter1_951_972_Open_Image onclick="this.style.display='none'; Codehighlighter1_951_972_Open_Text.style.display='none'; Codehighlighter1_951_972_Closed_Image.style.display='inline'; Codehighlighter1_951_972_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_951_972_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_951_972_Closed_Text.style.display='none'; Codehighlighter1_951_972_Open_Image.style.display='inline'; Codehighlighter1_951_972_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(tmpLeft</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">)</span><span id=Codehighlighter1_951_972_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_951_972_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">49</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpLeft&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">50</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">51</span><span style="COLOR: #000000"><img id=Codehighlighter1_996_1023_Open_Image onclick="this.style.display='none'; Codehighlighter1_996_1023_Open_Text.style.display='none'; Codehighlighter1_996_1023_Closed_Image.style.display='inline'; Codehighlighter1_996_1023_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_996_1023_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_996_1023_Closed_Text.style.display='none'; Codehighlighter1_996_1023_Open_Image.style.display='inline'; Codehighlighter1_996_1023_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(tmpLeft</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">maxWidth)</span><span id=Codehighlighter1_996_1023_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_996_1023_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">52</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpLeft&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;maxWidth;<br></span><span style="COLOR: #008080">53</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">54</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dragObject.style.top&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;tmpTop&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">px</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">55</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dragObject.style.left&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;tmpLeft&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">px</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">56</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">57</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">58</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">59</span><span style="COLOR: #000000"><img id=Codehighlighter1_1146_1168_Open_Image onclick="this.style.display='none'; Codehighlighter1_1146_1168_Open_Text.style.display='none'; Codehighlighter1_1146_1168_Closed_Image.style.display='inline'; Codehighlighter1_1146_1168_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_1146_1168_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1146_1168_Closed_Text.style.display='none'; Codehighlighter1_1146_1168_Open_Image.style.display='inline'; Codehighlighter1_1146_1168_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;mouseUp()</span><span id=Codehighlighter1_1146_1168_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_1146_1168_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">60</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;dragObject&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">61</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">62</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">63</span><span style="COLOR: #000000"><img id=Codehighlighter1_1198_1435_Open_Image onclick="this.style.display='none'; Codehighlighter1_1198_1435_Open_Text.style.display='none'; Codehighlighter1_1198_1435_Closed_Image.style.display='inline'; Codehighlighter1_1198_1435_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_1198_1435_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1198_1435_Closed_Text.style.display='none'; Codehighlighter1_1198_1435_Open_Image.style.display='inline'; Codehighlighter1_1198_1435_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;mouseCoords(event)</span><span id=Codehighlighter1_1198_1435_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_1198_1435_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">64</span><span style="COLOR: #000000"><img id=Codehighlighter1_1231_1275_Open_Image onclick="this.style.display='none'; Codehighlighter1_1231_1275_Open_Text.style.display='none'; Codehighlighter1_1231_1275_Closed_Image.style.display='inline'; Codehighlighter1_1231_1275_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1231_1275_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1231_1275_Closed_Text.style.display='none'; Codehighlighter1_1231_1275_Open_Image.style.display='inline'; Codehighlighter1_1231_1275_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(event.pageX&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;event.pageY)</span><span id=Codehighlighter1_1231_1275_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_1231_1275_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">65</span><span style="COLOR: #000000"><img id=Codehighlighter1_1242_1271_Open_Image onclick="this.style.display='none'; Codehighlighter1_1242_1271_Open_Text.style.display='none'; Codehighlighter1_1242_1271_Closed_Image.style.display='inline'; Codehighlighter1_1242_1271_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1242_1271_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1242_1271_Closed_Text.style.display='none'; Codehighlighter1_1242_1271_Open_Image.style.display='inline'; Codehighlighter1_1242_1271_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_1242_1271_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_1242_1271_Open_Text><span style="COLOR: #000000">{x:event.pageX,&nbsp;y:event.pageY}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">66</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">67</span><span style="COLOR: #000000"><img id=Codehighlighter1_1285_1432_Open_Image onclick="this.style.display='none'; Codehighlighter1_1285_1432_Open_Text.style.display='none'; Codehighlighter1_1285_1432_Closed_Image.style.display='inline'; Codehighlighter1_1285_1432_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1285_1432_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1285_1432_Closed_Text.style.display='none'; Codehighlighter1_1285_1432_Open_Image.style.display='inline'; Codehighlighter1_1285_1432_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_1285_1432_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_1285_1432_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">68</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x:event.clientX&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;document.body.scrollLeft&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;document.body.clientLeft,<br></span><span style="COLOR: #008080">69</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y:event.clientY&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;document.body.scrollTop&nbsp;&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;document.body.clientTop<br></span><span style="COLOR: #008080">70</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">71</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">72</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">73</span><span style="COLOR: #000000"><img id=Codehighlighter1_1466_1878_Open_Image onclick="this.style.display='none'; Codehighlighter1_1466_1878_Open_Text.style.display='none'; Codehighlighter1_1466_1878_Closed_Image.style.display='inline'; Codehighlighter1_1466_1878_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_1466_1878_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1466_1878_Closed_Text.style.display='none'; Codehighlighter1_1466_1878_Open_Image.style.display='inline'; Codehighlighter1_1466_1878_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;makeDraggable(item)</span><span id=Codehighlighter1_1466_1878_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_1466_1878_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">74</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">item)&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">75</span><span style="COLOR: #000000"><img id=Codehighlighter1_1522_1876_Open_Image onclick="this.style.display='none'; Codehighlighter1_1522_1876_Open_Text.style.display='none'; Codehighlighter1_1522_1876_Closed_Image.style.display='inline'; Codehighlighter1_1522_1876_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1522_1876_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1522_1876_Closed_Text.style.display='none'; Codehighlighter1_1522_1876_Open_Image.style.display='inline'; Codehighlighter1_1522_1876_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;item.onmousedown&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(event)</span><span id=Codehighlighter1_1522_1876_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_1522_1876_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">76</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dragObject&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.parentNode;<br></span><span style="COLOR: #008080">77</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mouseOffset&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;getMouseOffset(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">,&nbsp;event);<br></span><span style="COLOR: #008080">78</span><span style="COLOR: #000000"><img id=Codehighlighter1_1653_1716_Open_Image onclick="this.style.display='none'; Codehighlighter1_1653_1716_Open_Text.style.display='none'; Codehighlighter1_1653_1716_Closed_Image.style.display='inline'; Codehighlighter1_1653_1716_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1653_1716_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1653_1716_Closed_Text.style.display='none'; Codehighlighter1_1653_1716_Open_Image.style.display='inline'; Codehighlighter1_1653_1716_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(window.innerHeight</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">document.body.clientHeight)</span><span id=Codehighlighter1_1653_1716_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_1653_1716_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">79</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxTop&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;window.innerHeight</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">dragObject.offsetHeight</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">50</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">80</span><span style="COLOR: #000000"><img id=Codehighlighter1_1721_1792_Open_Image onclick="this.style.display='none'; Codehighlighter1_1721_1792_Open_Text.style.display='none'; Codehighlighter1_1721_1792_Closed_Image.style.display='inline'; Codehighlighter1_1721_1792_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1721_1792_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1721_1792_Closed_Text.style.display='none'; Codehighlighter1_1721_1792_Open_Image.style.display='inline'; Codehighlighter1_1721_1792_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #0000ff">else</span><span id=Codehighlighter1_1721_1792_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_1721_1792_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">81</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxTop&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;document.body.clientHeight</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">dragObject.offsetHeight</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">82</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">83</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxWidth&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;document.body.clientWidth</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">dragObject.offsetWidth</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">84</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">85</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">86</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<img src ="http://www.blogjava.net/123xxx/aggbug/87313.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/123xxx/" target="_blank">OO</a> 2006-12-12 17:34 <a href="http://www.blogjava.net/123xxx/articles/87313.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常用javascript正则表达式</title><link>http://www.blogjava.net/123xxx/articles/80903.html</link><dc:creator>OO</dc:creator><author>OO</author><pubDate>Mon, 13 Nov 2006 07:34:00 GMT</pubDate><guid>http://www.blogjava.net/123xxx/articles/80903.html</guid><wfw:comment>http://www.blogjava.net/123xxx/comments/80903.html</wfw:comment><comments>http://www.blogjava.net/123xxx/articles/80903.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/123xxx/comments/commentRss/80903.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/123xxx/services/trackbacks/80903.html</trackback:ping><description><![CDATA[
		<div dragover="true" class="storytext">
				<p dragover="true">
						<span class="javascript" id="text5738509" style="font-size: 12px;" twffan="done">
								<font face="Verdana" size="2">
										<a dragover="true" href="http://www.itpub.net/showthread.php?s=&amp;postid=5738725#post5738725">http://www.itpub.net/showthread.php?s=&amp;postid=5738725#post5738725</a>
								</font>
						</span>
				</p>
				<p>
						<span class="javascript" style="font-size: 12px;" twffan="done">
								<font face="Verdana" size="2">下面都是我收集的一些比较常用的正则表达式，因为平常可能在表单验证的时候，用到的比较多。特发出来，让各位朋友共同使用。呵呵。<br /><br />匹配中文字符的正则表达式： [u4e00-u9fa5]<br />评注：匹配中文还真是个头疼的事，有了这个表达式就好办了<br /><br />匹配双字节字符(包括汉字在内)：[^x00-xff]<br />评注：可以用来计算字符串的长度（一个双字节字符长度计2，ASCII字符计1）<br /><br />匹配空白行的正则表达式：ns*r<br />评注：可以用来删除空白行<br /><br />匹配HTML标记的正则表达式：&lt;(S*?)[^&gt;]*&gt;.*?|&lt;.*? /&gt;<br />评注：网上流传的版本太糟糕，上面这个也仅仅能匹配部分，对于复杂的嵌套标记依旧无能为力<br /><br />匹配首尾空白字符的正则表达式：^s*|s*$<br />评注：可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等)，非常有用的表达式<br /><br />匹配Email地址的正则表达式：w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*<br />评注：表单验证时很实用<br /><br />匹配网址URL的正则表达式：[a-zA-z]+://[^s]*<br />评注：网上流传的版本功能很有限，上面这个基本可以满足需求<br /><br />匹配帐号是否合法(字母开头，允许5-16字节，允许字母数字下划线)：^[a-zA-Z][a-zA-Z0-9_]{4,15}$<br />评注：表单验证时很实用<br /><br />匹配国内电话号码：d{3}-d{8}|d{4}-d{7}<br />评注：匹配形式如 0511-4405222 或 021-87888822<br /><br />匹配腾讯QQ号：[1-9][0-9]{4,}<br />评注：腾讯QQ号从10000开始<br /><br />匹配中国邮政编码：[1-9]d{5}(?!d)<br />评注：中国邮政编码为6位数字<br /><br />匹配身份证：d{15}|d{18}<br />评注：中国的身份证为15位或18位<br /><br />匹配ip地址：d+.d+.d+.d+<br />评注：提取ip地址时有用</font>
						</span>
				</p>
				<br />
				<span class="javascript" id="text5738509" style="font-size: 12px;" twffan="done">
						<font face="Verdana" size="2">
								<br />匹配特定数字：<br />^[1-9]d*$　 　 //匹配正整数<br />^-[1-9]d*$ 　 //匹配负整数<br />^-?[1-9]d*$　　 //匹配整数<br />^[1-9]d*|0$　 //匹配非负整数（正整数 + 0）<br />^-[1-9]d*|0$　　 //匹配非正整数（负整数 + 0）<br />^[1-9]d*.d*|0.d*[1-9]d*$　　 //匹配正浮点数<br />^-([1-9]d*.d*|0.d*[1-9]d*)$　 //匹配负浮点数<br />^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$　 //匹配浮点数<br />^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0$　　 //匹配非负浮点数（正浮点数 + 0）<br />^(-([1-9]d*.d*|0.d*[1-9]d*))|0?.0+|0$　　//匹配非正浮点数（负浮点数 + 0）<br />评注：处理大量数据时有用，具体应用时注意修正<br /><br />匹配特定字符串：<br />^[A-Za-z]+$　　//匹配由26个英文字母组成的字符串<br />^[A-Z]+$　　//匹配由26个英文字母的大写组成的字符串<br />^[a-z]+$　　//匹配由26个英文字母的小写组成的字符串<br />^[A-Za-z0-9]+$　　//匹配由数字和26个英文字母组成的字符串<br />^w+$　　//匹配由数字、26个英文字母或者下划线组成的字符串<br /><br /><br />在使用RegularExpressionValidator验证控件时的验证功能及其验证表达式介绍如下:<br /><br /><br />只能输入数字：“^[0-9]*$”<br />只能输入n位的数字：“^d{n}$”<br />只能输入至少n位数字：“^d{n,}$”<br />只能输入m-n位的数字：“^d{m,n}$”<br />只能输入零和非零开头的数字：“^(0|[1-9][0-9]*)$”<br />只能输入有两位小数的正实数：“^[0-9]+(.[0-9]{2})?$”<br />只能输入有1-3位小数的正实数：“^[0-9]+(.[0-9]{1,3})?$”<br />只能输入非零的正整数：“^+?[1-9][0-9]*$”<br />只能输入非零的负整数：“^-[1-9][0-9]*$”<br />只能输入长度为3的字符：“^.{3}$”<br />只能输入由26个英文字母组成的字符串：“^[A-Za-z]+$”<br />只能输入由26个大写英文字母组成的字符串：“^[A-Z]+$”<br />只能输入由26个小写英文字母组成的字符串：“^[a-z]+$”<br />只能输入由数字和26个英文字母组成的字符串：“^[A-Za-z0-9]+$”<br />只能输入由数字、26个英文字母或者下划线组成的字符串：“^w+$”<br />验证用户密码:“^[a-zA-Z]w{5,17}$”正确格式为：以字母开头，长度在6-18之间，<br /><br /><br />只能包含字符、数字和下划线。<br />验证是否含有^%&amp;',;=?$"等字符：“[^%&amp;',;=?$x22]+”<br />只能输入汉字：“^[u4e00-u9fa5],{0,}$”<br />验证Email地址：“^w+[-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$”<br />验证InternetURL：“^</font>
						<a href="http:///" target="_blank">
								<font face="Verdana" size="2">http://</font>
						</a>
						<font face="Verdana" size="2">([w-]+.)+[w-]+(/[w-./?%&amp;=]*)?$”<br />验证电话号码：“^((d{3,4})|d{3,4}-)?d{7,8}$”<br /><br /><br />正确格式为：“XXXX-XXXXXXX”，“XXXX-XXXXXXXX”，“XXX-XXXXXXX”，<br /><br /><br />“XXX-XXXXXXXX”，“XXXXXXX”，“XXXXXXXX”。<br />验证身份证号（15位或18位数字）：“^d{15}|d{}18$”<br />验证一年的12个月：“^(0?[1-9]|1[0-2])$”正确格式为：“01”-“09”和“1”“12”<br />验证一个月的31天：“^((0?[1-9])|((1|2)[0-9])|30|31)$”<br /><br /><br />正确格式为：“01”“09”和“1”“31”。<br /><br /><br />匹配中文字符的正则表达式： [u4e00-u9fa5]<br />匹配双字节字符(包括汉字在内)：[^x00-xff]<br />匹配空行的正则表达式：n[s| ]*r<br />匹配HTML标记的正则表达式：/&lt;(.*)&gt;.*&lt;/1&gt;|&lt;(.*) /&gt;/ <br />匹配首尾空格的正则表达式：(^s*)|(s*$)<br />匹配Email地址的正则表达式：w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*<br />匹配网址URL的正则表达式：</font>
						<a href="http:///" target="_blank">
								<font face="Verdana" size="2">http://</font>
						</a>
						<font face="Verdana" size="2">([w-]+.)+[w-]+(/[w- ./?%&amp;=]*)?<br /><br />(1)应用：计算字符串的长度（一个双字节字符长度计2，ASCII字符计1） <br />String.prototype.len=function(){return this.replace([^x00-xff]/g,"aa").length;}<br /><br />(2)应用：javascript中没有像vbscript那样的trim函数，我们就可以利用这个表达式来实现<br />String.prototype.trim = function()<br />{<br />return this.replace(/(^s*)|(s*$)/g, "");<br />}<br />(3)应用：利用正则表达式分解和转换IP地址<br />function IP2V(ip) //IP地址转换成对应数值<br />{<br />re=/(d+).(d+).(d+).(d+)/g //匹配IP地址的正则表达式<br />if(re.test(ip))<br />{<br />return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1<br />}<br />else<br />{<br />throw new Error("Not a valid IP address!")<br />}<br />}<br />(4)应用：从URL地址中提取文件名的javascript程序<br />s="http://www.9499.net/page1.htm";<br />s=s.replace(/(.*/){0,}([^.]+).*/ig,"$2") ; //Page1.htm<br />(5)应用：利用正则表达式限制网页表单里的文本框输入内容<br />用
正则表达式限制只能输入中文：onkeyup="value=value.replace(/[^u4E00-u9FA5]/g,'') "
onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^u4E00-u9FA5]/g,''))"<br />用
正则表达式限制只能输入全角字符： onkeyup="value=value.replace(/[^uFF00-uFFFF]/g,'') "
onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^uFF00-uFFFF]/g,''))"<br />用
正则表达式限制只能输入数字：onkeyup="value=value.replace(/[^d]/g,'') "onbeforepaste=
"clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))"<br />用
正则表达式限制只能输入数字和英文：onkeyup="value=value.replace(/[W]/g,'')
"onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''</font>
				</span>
		</div>
<img src ="http://www.blogjava.net/123xxx/aggbug/80903.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/123xxx/" target="_blank">OO</a> 2006-11-13 15:34 <a href="http://www.blogjava.net/123xxx/articles/80903.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>web程序中使用javascript进行数据校验</title><link>http://www.blogjava.net/123xxx/articles/45498.html</link><dc:creator>OO</dc:creator><author>OO</author><pubDate>Wed, 10 May 2006 08:50:00 GMT</pubDate><guid>http://www.blogjava.net/123xxx/articles/45498.html</guid><wfw:comment>http://www.blogjava.net/123xxx/comments/45498.html</wfw:comment><comments>http://www.blogjava.net/123xxx/articles/45498.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/123xxx/comments/commentRss/45498.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/123xxx/services/trackbacks/45498.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 初步实现。Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->  1 &lt;!--  2     /**********************************************************  3      * validato...&nbsp;&nbsp;<a href='http://www.blogjava.net/123xxx/articles/45498.html'>阅读全文</a><img src ="http://www.blogjava.net/123xxx/aggbug/45498.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/123xxx/" target="_blank">OO</a> 2006-05-10 16:50 <a href="http://www.blogjava.net/123xxx/articles/45498.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>从一个小例子看正则表达式的执行步骤</title><link>http://www.blogjava.net/123xxx/articles/29910.html</link><dc:creator>OO</dc:creator><author>OO</author><pubDate>Wed, 08 Feb 2006 04:04:00 GMT</pubDate><guid>http://www.blogjava.net/123xxx/articles/29910.html</guid><wfw:comment>http://www.blogjava.net/123xxx/comments/29910.html</wfw:comment><comments>http://www.blogjava.net/123xxx/articles/29910.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/123xxx/comments/commentRss/29910.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/123xxx/services/trackbacks/29910.html</trackback:ping><description><![CDATA[<br>
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><span id="Code_Open_Text" style="display: inline;"><span style="color: rgb(0, 128, 128);">1</span>&nbsp;<span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">script&nbsp;language</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">javascript</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br></span><span style="color: rgb(0, 128, 128);">2</span>&nbsp;<span style="color: rgb(0, 0, 0);">function&nbsp;format(){<br></span><span style="color: rgb(0, 128, 128);">3</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;r&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">\S[</span><span style="color: rgb(0, 0, 0);">^</span><span style="color: rgb(0, 0, 0);">\r\n]</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">\S</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">;<br></span><span style="color: rgb(0, 128, 128);">4</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;name</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;username__&nbsp;&nbsp;nn&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br></span><span style="color: rgb(0, 128, 128);">5</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;rName</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">name.match(r);<br></span><span style="color: rgb(0, 128, 128);">6</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;rName;<br></span><span style="color: rgb(0, 128, 128);">7</span>&nbsp;<span style="color: rgb(0, 0, 0);">}<br></span><span style="color: rgb(0, 128, 128);">8</span>&nbsp;<span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 0);">&lt;/</span><span style="color: rgb(0, 0, 0);">script</span><span style="color: rgb(0, 0, 0);">&gt;<br>
</span></span></div><br>&nbsp;&nbsp;&nbsp;
这两天被正则表达式搞得云里雾里的。很快就得出了自己想要的结果，但是却连自己都不知道自己的正则表达式应该怎么解释。以前虽然也用过正则表达式写一些东
西，但是却没仔细理解过它的执行步骤。借此机会对正则表达式进行了一下学习，才发现原来知道了正则表达式的执行步骤之后，要对它进行解释也是很容易的。<br>
&nbsp;&nbsp;&nbsp; 以上面的代码为例，目标是要取出“<span id="Code_Open_Text" style="display: inline;"><span style="color: rgb(0, 0, 0);">username__&nbsp;&nbsp;nn</span></span>”这个字符串。<br>
&nbsp;&nbsp;&nbsp; 我原来的错误理解是这样的：一开始就拿整个正则表达式“<span id="Code_Open_Text" style="display: inline;"><span style="color: rgb(0, 0, 0);">\S[</span><span style="color: rgb(0, 0, 0);">^</span><span style="color: rgb(0, 0, 0);">\r\n]</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">\S</span><span style="color: rgb(0, 0, 0);"></span></span>”去对name字符串从左到右进行匹配，那么以“非空字符(\S)”开头，以“非空字符(\S)”结尾，中间是非"\r\n"的字符串，第一个匹配的结果应该是“<span id="Code_Open_Text" style="display: inline;"><span style="color: rgb(0, 0, 0);">username__</span></span>”啊，怎么会是“<span id="Code_Open_Text" style="display: inline;"><span style="color: rgb(0, 0, 0);">username__&nbsp;&nbsp;nn</span></span>”呢？后来google了一些资料看了之后才明白，是我把执行的步骤搞错的。<br>
&nbsp;&nbsp;&nbsp; 正确的解释应该是这样的：首先用正则表达式的第一个匹配符“\S”去对name进行匹配,得到结果"<span id="Code_Open_Text" style="display: inline;"><span style="color: rgb(0, 0, 0);">username__&nbsp;&nbsp;nn&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 0);"></span></span>"，然后用"[^\r\n]*"从"<font color="#ff0000">s</font>"开始进行匹配，得到结果"<span id="Code_Open_Text" style="display: inline;"><span style="color: rgb(0, 0, 0);">u<font color="#ff0000">sername__&nbsp;&nbsp;nn空格</font></span></span>"，由于最后用"\S"对前面得出的结果"<span id="Code_Open_Text" style="display: inline;"><span style="color: rgb(0, 0, 0);">u<font color="#ff0000">sername__&nbsp;&nbsp;nn空格</font></span></span>"进行匹配（由于[^\r\n]<font color="#ff0000">*</font>中的<font color="#ff0000">*</font>的存在，所以匹配"\S[^\r\n]*"的其实是一组结果--从"<span id="Code_Open_Text" style="display: inline;"><span style="color: rgb(0, 0, 0);">u<font color="#ff0000">s</font></span></span>"一直到"<span id="Code_Open_Text" style="display: inline;"><span style="color: rgb(0, 0, 0);">u<font color="#ff0000">sername__&nbsp;&nbsp;nn空格</font></span></span>"，而最后那个"\S"则是对一组结果都进行匹配，匹配后也会得到一组结果--从"<span id="Code_Open_Text" style="display: inline;"><span style="color: rgb(0, 0, 0);">u<font color="#ff0000">s</font></span></span>"一直到"<span id="Code_Open_Text" style="display: inline;"><span style="color: rgb(0, 0, 0);">u<font color="#ff0000">sername__</font></span></span>",再加上"<span id="Code_Open_Text" style="display: inline;"><span style="color: rgb(0, 0, 0);">u<font color="#ff0000">sername__&nbsp;&nbsp;n</font></span></span>"和"<span id="Code_Open_Text" style="display: inline;"><span style="color: rgb(0, 0, 0);">u<font color="#ff0000">sername__&nbsp;&nbsp;nn</font></span></span>"），返回最大匹配结果，得到正确的结果"<span id="Code_Open_Text" style="display: inline;"><span style="color: rgb(0, 0, 0);">username__&nbsp;&nbsp;nn</span></span>"。<br>
&nbsp;&nbsp;&nbsp; 写得好像有点乱，要是看完理解不了的话，按照上面说的可能结果对原始字符串name进行一下修改，做一下测试就会明白了。<br>

<img src ="http://www.blogjava.net/123xxx/aggbug/29910.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/123xxx/" target="_blank">OO</a> 2006-02-08 12:04 <a href="http://www.blogjava.net/123xxx/articles/29910.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>