<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_龙的天空</title><subtitle type="text">天将降大任于斯人也，必先苦其心志，劳其筋骨，饿其体肤，空乏其身，行拂乱其所为，所以动心忍性，曾益其所不能。</subtitle><id>http://feed.cnblogs.com/blog/u/31197/rss</id><updated>2011-09-20T05:53:57Z</updated><author><name>John Liu</name><uri>http://www.cnblogs.com/longer/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/longer/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/31197/rss"/><entry><id>http://www.cnblogs.com/longer/archive/2011/01/22/1941899.html</id><title type="text">C#中处理SQL Server中的空的DateTime型字段</title><summary type="text">SQL Server中的DateTime型字段，如果为空值，则在C#中获取到后是不能直接转换为DateTime型变量的。当然也不能用是否等于null进行判断，应该使用是否等于DBNull.Value进行判断。对于使用实体类的情况，可以将指定的属性设为允许为空的形式，及类似public DateTime? LastLoginDate的方式定义。这样在处理时，我们只在结果集中对应的日期字段不等于DBNull.Value时为LastLoginDate属性赋值。在使用DateTime?型变量的时候，使用其HasValue属性进行判断处理。例如：</summary><published>2011-01-22T03:33:00Z</published><updated>2011-01-22T03:33:00Z</updated><author><name>John Liu</name><uri>http://www.cnblogs.com/longer/</uri></author><link rel="alternate" href="http://www.cnblogs.com/longer/archive/2011/01/22/1941899.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/longer/archive/2011/01/22/1941899.html"/><content type="html">&lt;p&gt;SQL Server中的DateTime型字段，如果为空值，则在C#中获取到后是不能直接转换为DateTime型变量的。当然也不能用是否等于&lt;span style="color: #ff0000;"&gt;null&lt;/span&gt;进行判断，应该使用是否等于&lt;span style="color: #ff0000;"&gt;DBNull.Value&lt;/span&gt;进行判断。对于使用实体类的情况，可以将指定的属性设为允许为空的形式，及类似&lt;span style="color: #ff0000;"&gt;public DateTime?&amp;nbsp; LastLoginDate&lt;/span&gt;的方式定义。&lt;span style="color: #000000;"&gt;这样在处理时，我们只在结果集中对应的日期字段不等于DBNull.Value时为LastLoginDate属性赋值。在使用DateTime?型变量的时候，使用其HasValue属性进行判断处理。例如：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;//此例中user为实体类对象&#xD;
if(user.LastLoginDate.HasValue)&#xD;
{&#xD;
     lblInfo.Text = user.LastLoginDate.Value.ToString("yyyy-MM-dd");&#xD;
}&#xD;
else&#xD;
{&#xD;
     lblInfo.Text = "从未登录过！";&#xD;
}&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/longer/aggbug/1941899.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/longer/archive/2011/01/22/1941899.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/longer/archive/2010/10/01/1840694.html</id><title type="text">推荐一个不错的国外html5模板网站</title><summary type="text">http://blog.templatemonster.com/该网站有好多新的html5模板，强烈推荐一看。</summary><published>2010-10-01T14:34:00Z</published><updated>2010-10-01T14:34:00Z</updated><author><name>John Liu</name><uri>http://www.cnblogs.com/longer/</uri></author><link rel="alternate" href="http://www.cnblogs.com/longer/archive/2010/10/01/1840694.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/longer/archive/2010/10/01/1840694.html"/><content type="html">&lt;p&gt;&lt;a href="http://blog.templatemonster.com/" target="_blank"&gt;http://blog.templatemonster.com/&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;该网站有好多新的html5模板，强烈推荐一看。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/longer/aggbug/1840694.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/longer/archive/2010/10/01/1840694.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/longer/archive/2010/09/13/1825352.html</id><title type="text">SQL SERVERR中未公开的存储过程sp_MSforeachtable</title><summary type="text">该存储过程用来遍历数据库中的每个表，常见用法如下： 1. 统计数据库中每个表的空间使用情况，返回各表的行数，数据大小，索引大小，未使用空间等。 exec sp_MSforeachtable @command1="sp_spaceused '?'"2.-查询数据库所有表的记录总数CREATETABLE#temp(TableNameVARCHAR(255),RowCntINT)EXECsp_MSfor...</summary><published>2010-09-13T15:33:00Z</published><updated>2010-09-13T15:33:00Z</updated><author><name>John Liu</name><uri>http://www.cnblogs.com/longer/</uri></author><link rel="alternate" href="http://www.cnblogs.com/longer/archive/2010/09/13/1825352.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/longer/archive/2010/09/13/1825352.html"/><content type="html">&lt;p&gt;该存储过程用来遍历数据库中的每个表，常见用法如下：&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; 1.&amp;nbsp;&lt;span style="color: #00ccff;"&gt; 统计数据库中每个表的空间使用情况，返回各表的行数，数据大小，索引大小，未使用空间等。&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exec sp_MSforeachtable @command1="sp_spaceused '?'"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.&lt;span  style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px;"&gt;&lt;span  style="text-align: left; line-height: 21px; font-family: verdana, sans-serif; font-size: 14px;"&gt;&lt;span style="color: #008080;"&gt;-&lt;/span&gt;&lt;span style="color: #008080;"&gt;查询数据库所有表的记录总数&lt;/span&gt;&lt;span style="color: #008080;"&gt;&lt;br /&gt;&lt;img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" style="border-width: 0px;" /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;CREATE&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;TABLE&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;#&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;temp&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;(TableName&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;VARCHAR&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;255&lt;/span&gt;&lt;span style="color: #000000;"&gt;),&amp;nbsp;RowCnt&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;INT&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" style="border-width: 0px;" /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;EXEC&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;sp_MSforeachtable&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;INSERT&amp;nbsp;INTO&amp;nbsp;#temp&amp;nbsp;SELECT&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;?&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;,&amp;nbsp;COUNT(*)&amp;nbsp;FROM&amp;nbsp;?&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" style="border-width: 0px;" /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;TableName,&amp;nbsp;RowCnt&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;#&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;temp&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;ORDER&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;BY&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;TableName&lt;br /&gt;&lt;img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" style="border-width: 0px;" /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;DROP&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;TABLE&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;#&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;temp&lt;br /&gt;&amp;nbsp;&amp;nbsp; 3.删除所有表&lt;br /&gt;&amp;nbsp;&amp;nbsp; exec sp_MSforeachtable @command1="drop table ?";&lt;br /&gt;&amp;nbsp;&amp;nbsp; 4.清除所有表中数据&lt;br /&gt;&amp;nbsp;&amp;nbsp; exec sp_MSforeachtable @command1="TRUNCATE TABLE ?"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/longer/aggbug/1825352.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/longer/archive/2010/09/13/1825352.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/longer/archive/2010/09/09/1822537.html</id><title type="text">.net 4.0 ValidateRequest=&amp;quot;false&amp;quot; 无效</title><summary type="text">昨天一客户的后台中的在线编辑器中的内容提交时，报错。客户的操作系统是韩文的，不过基本上看出错误是&amp;ldquo;提交的代码中包含危险字符"，根据以前的经验，直接在页面上加了个validateRequest="false"，结果再次提交还是报错。在本地测试没问题的，为什么到了服务器上就不好用了呢？难道和文件编码有问题，中文的东西在韩文系统下有问题？编码重置为utf-8编码，还是不行。别的区别也就只有客...</summary><published>2010-09-09T10:04:00Z</published><updated>2010-09-09T10:04:00Z</updated><author><name>John Liu</name><uri>http://www.cnblogs.com/longer/</uri></author><link rel="alternate" href="http://www.cnblogs.com/longer/archive/2010/09/09/1822537.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/longer/archive/2010/09/09/1822537.html"/><content type="html">&lt;p&gt;昨天一客户的后台中的在线编辑器中的内容提交时，报错。客户的操作系统是韩文的，不过基本上看出错误是&amp;ldquo;提交的代码中包含危险字符"，根据以前的经验，直接在页面上加了个validateRequest="false"，结果再次提交还是报错。在本地测试没问题的，为什么到了服务器上就不好用了呢？难道和文件编码有问题，中文的东西在韩文系统下有问题？编码重置为utf-8编码，还是不行。别的区别也就只有客户的服务器上的Framework版本是4.0，开发的机器上是vs2008带的Framework3.5，难道和这个有关系？&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 查了一下，一试，还真是和这个有关系。&lt;span&gt;&lt;strong&gt;当你在安装了.NET Framework 4.0以上版本后，当你的应用程序以.NET Framework 4.0为框架版本，你的任意服务器请求，都将被进行服务器请求验证（ValidationRequest），这不仅包括ASP.NET，同时也包括Web Services等各种HTTP请求，不仅仅针对aspx页面，也针对HTTP Handler，HTTP Module等，因为这个验证（Valify）的过程，将会发生在BeginRequest事件之前。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 问题的解决方案就是&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;在全局级别（Web.config中）设置&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;configuration&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;system.web&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;httpRuntime&lt;/span&gt;  &lt;span style="color: red;"&gt;requestValidationMode&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;2.0&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 就是使用2.0版本的请求验证模式，就不会再报这个错了。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 网上原文地址：&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;http://apps.hi.baidu.com/share/detail/10878963&lt;/p&gt;&lt;img src="http://www.cnblogs.com/longer/aggbug/1822537.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/longer/archive/2010/09/09/1822537.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/longer/archive/2010/09/08/1821783.html</id><title type="text">《数据库设计指南》学习笔记一：设计数据库之前</title><summary type="text">考察现有环境定义标准的对象命名规范预先计划获取数据模式资源手册畅想未来，但别忘了过去的教训在物理实践之前进行逻辑设计了解你的业务创建数据字典和E-R图表创建模式从输入输出下手报表技巧了解客户需求。 主要知识点有这些，具体的内容仔细看书了。</summary><published>2010-09-08T13:58:00Z</published><updated>2010-09-08T13:58:00Z</updated><author><name>John Liu</name><uri>http://www.cnblogs.com/longer/</uri></author><link rel="alternate" href="http://www.cnblogs.com/longer/archive/2010/09/08/1821783.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/longer/archive/2010/09/08/1821783.html"/><content type="html">&lt;ol&gt;&#xD;
&lt;li&gt;考察现有环境&lt;/li&gt;&#xD;
&lt;li&gt;定义标准的对象命名规范&lt;/li&gt;&#xD;
&lt;li&gt;预先计划&lt;/li&gt;&#xD;
&lt;li&gt;获取数据模式资源手册&lt;/li&gt;&#xD;
&lt;li&gt;畅想未来，但别忘了过去的教训&lt;/li&gt;&#xD;
&lt;li&gt;在物理实践之前进行逻辑设计&lt;/li&gt;&#xD;
&lt;li&gt;了解你的业务&lt;/li&gt;&#xD;
&lt;li&gt;创建数据字典和E-R图表&lt;/li&gt;&#xD;
&lt;li&gt;创建模式&lt;/li&gt;&#xD;
&lt;li&gt;从输入输出下手&lt;/li&gt;&#xD;
&lt;li&gt;报表技巧&lt;/li&gt;&#xD;
&lt;li&gt;了解客户需求。&lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p&gt;主要知识点有这些，具体的内容仔细看书了。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/longer/aggbug/1821783.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/longer/archive/2010/09/08/1821783.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/longer/archive/2010/08/26/1809603.html</id><title type="text">巧用case when 解决多条件模糊查询问题</title><summary type="text">我们在进行项目开发中，经常会遇到多条件模糊查询的需求。对此，我们常见的解决方案有两种：一是在程序端拼接SQL字符串，根据是否选择了某个条件，构造相应的SQL字符串；二是在数据库的存储过程中使用动态的SQL语句。其本质也是拼接SQL字符串，不过是从程序端转移到数据库端而已。 这两种方式的缺点是显而易见的：一是当多个条件每个都可为空时，要使用多个if语句进行判断；二是拼接的SQL语句容易产生SQL注入...</summary><published>2010-08-26T15:23:00Z</published><updated>2010-08-26T15:23:00Z</updated><author><name>John Liu</name><uri>http://www.cnblogs.com/longer/</uri></author><link rel="alternate" href="http://www.cnblogs.com/longer/archive/2010/08/26/1809603.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/longer/archive/2010/08/26/1809603.html"/><content type="html">&lt;p&gt;我们在进行项目开发中，经常会遇到多条件模糊查询的需求。对此，我们常见的解决方案有两种：一是在程序端拼接SQL字符串，根据是否选择了某个条件，构造相应的SQL字符串；二是在数据库的存储过程中使用动态的SQL语句。其本质也是拼接SQL字符串，不过是从程序端转移到数据库端而已。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 这两种方式的缺点是显而易见的：一是当多个条件每个都可为空时，要使用多个if语句进行判断；二是拼接的SQL语句容易产生SQL注入漏洞。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 最近写数据库存储过程的时候经常使用case when 语句，正好可以用这个语句解决一下以上问题。以SQL中的NorthWind数据库为例，我要操作的是其中的Employees表，该表中默认数据如下：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;img src="http://pic002.cnblogs.com/img/longer/201008/2010082623102253.jpg" /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; 使用如下脚本来查询表中数据：&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;/p&gt;&#xD;
&lt;div onclick="cnblogs_code_show('17c29345-cb40-4bff-acfd-e253daecddad')" style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div id="cnblogs_code_open_17c29345-cb40-4bff-acfd-e253daecddad"&gt;&#xD;
&lt;pre&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #008080;"&gt; 1&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;DECLARE&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@FirstName&lt;/span&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;10&lt;/span&gt;&lt;span style="color: #000000;"&gt;),&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 2&lt;/span&gt; &lt;span style="color: #000000;"&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;@LastName&lt;/span&gt;&lt;span style="color: #000000;"&gt;   &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;20&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 3&lt;/span&gt; &lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@FirstName&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 4&lt;/span&gt; &lt;span style="color: #000000;"&gt;       &lt;/span&gt;&lt;span style="color: #008000;"&gt;@LastName&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 5&lt;/span&gt; &lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;*&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 6&lt;/span&gt; &lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000;"&gt;   Employees c&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 7&lt;/span&gt; &lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;CHARINDEX&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 8&lt;/span&gt; &lt;span style="color: #000000;"&gt;           (&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 9&lt;/span&gt; &lt;span style="color: #000000;"&gt;               &lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;CASE&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;10&lt;/span&gt; &lt;span style="color: #000000;"&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;WHEN&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@FirstName&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;THEN&lt;/span&gt;&lt;span style="color: #000000;"&gt; FirstName&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;11&lt;/span&gt; &lt;span style="color: #000000;"&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;ELSE&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@FirstName&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;12&lt;/span&gt; &lt;span style="color: #000000;"&gt;               &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;END&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;13&lt;/span&gt; &lt;span style="color: #000000;"&gt;           ),&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;14&lt;/span&gt; &lt;span style="color: #000000;"&gt;           FirstName&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;15&lt;/span&gt; &lt;span style="color: #000000;"&gt;       ) &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;16&lt;/span&gt; &lt;span style="color: #000000;"&gt;       &lt;/span&gt;&lt;span style="color: #808080;"&gt;AND&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;CHARINDEX&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;17&lt;/span&gt; &lt;span style="color: #000000;"&gt;               (&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;CASE&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;WHEN&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@LastName&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;THEN&lt;/span&gt;&lt;span style="color: #000000;"&gt; LastName &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;ELSE&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@LastName&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;END&lt;/span&gt;&lt;span style="color: #000000;"&gt;),&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;18&lt;/span&gt; &lt;span style="color: #000000;"&gt;               LastName&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;19&lt;/span&gt; &lt;span style="color: #000000;"&gt;           ) &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;执行后会发现查出的结果和图1一样。&lt;br /&gt;我们把第二行的@FirstName变量赋值为'n'试试，会把所有FirstName字段中包含字符串'n'的记录查出来，如下图：&lt;br /&gt;&lt;img src="http://pic002.cnblogs.com/img/longer/201008/2010082623163730.jpg" /&gt;&lt;br /&gt;如果我们再把第三行的@LastName变量赋值为'd'试试，结果会把所有FirstName字段包含'n'并且LastName字段包含'd'的记录查出来，如下图：&lt;br /&gt;&lt;img src="http://pic002.cnblogs.com/img/longer/201008/2010082623240655.jpg" /&gt;&lt;br /&gt;通过以上例子我们可以看到，通过给两个变量传递不同的值，就可以根据多条件进行模糊查询了，如果把上面的语句写在存储过程中，就可以不必再拼接SQL语句了，也不会出现注入式问题了。&lt;/p&gt;&#xD;
&lt;p&gt;以上脚本的简单说明：用charindex函数替换like，避免拼接sql语句；使用case when 语句，当传递的参数值为空字符串时让条件始终为真，即等于忽略该条件，不为空串时按参数值模糊查询。&lt;/p&gt;&#xD;
&lt;p&gt;以上是工作中的经验总结，希望对大家有帮助。有关case when还有一些比较实用的用法，有时间的话再写写。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/longer/aggbug/1809603.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/longer/archive/2010/08/26/1809603.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/longer/archive/2010/08/26/1809559.html</id><title type="text">安装vs2010后新建项目FrameWork版本选择只有4.0的解决方案</title><summary type="text">新买的笔记本上安装了2003系统，直接安装的vs2010的评估版，安装完后，新建项目的时候发现没有vs2008中习惯的Framework版本选择，只有Framework4.0。那我想建立基于Framework2.0的程序不是不行了。解决方案是下载Framework3.5的sp1补丁包，重新重新安装一下就OK了。上个截图吧：</summary><published>2010-08-26T14:24:00Z</published><updated>2010-08-26T14:24:00Z</updated><author><name>John Liu</name><uri>http://www.cnblogs.com/longer/</uri></author><link rel="alternate" href="http://www.cnblogs.com/longer/archive/2010/08/26/1809559.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/longer/archive/2010/08/26/1809559.html"/><content type="html">&lt;p&gt;新买的笔记本上安装了2003系统，直接安装的vs2010的评估版，安装完后，新建项目的时候发现没有vs2008中习惯的Framework版本选择，只有Framework4.0。那我想建立基于Framework2.0的程序不是不行了。解决方案是下载Framework3.5的sp1补丁包，重新重新安装一下就OK了。上个截图吧：&lt;br /&gt;&lt;img src="http://pic002.cnblogs.com/img/longer/201008/2010082622234286.jpg" /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/longer/aggbug/1809559.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/longer/archive/2010/08/26/1809559.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/longer/archive/2010/05/15/1735940.html</id><title type="text">SQL Server直接执行.sql文件</title><summary type="text">客户的数据库数据被篡改，利用Log Explorer工具根据日志生成的回滚脚本有200多M，不可能一下子扔到查询分析器里去执行，于是想是否SQL Server是否可以像Oracle那样直接执行.sql文件。讲过查资料，测试，发现可以在cmd窗口中执行如下命令执行Sql文件： osql -S 127.0.0.1 -U sa -P sa -i d:\test.sql 简单说明：osql为SQL Ser...</summary><published>2010-05-15T01:29:00Z</published><updated>2010-05-15T01:29:00Z</updated><author><name>John Liu</name><uri>http://www.cnblogs.com/longer/</uri></author><link rel="alternate" href="http://www.cnblogs.com/longer/archive/2010/05/15/1735940.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/longer/archive/2010/05/15/1735940.html"/><content type="html">&lt;p&gt;客户的数据库数据被篡改，利用Log Explorer工具根据日志生成的回滚脚本有200多M，不可能一下子扔到查询分析器里去执行，于是想是否SQL Server是否可以像Oracle那样直接执行.sql文件。讲过查资料，测试，发现可以在cmd窗口中执行如下命令执行Sql文件：&lt;/p&gt;&#xD;
&lt;p&gt;osql -S 127.0.0.1 -U sa -P sa -i d:\test.sql&lt;/p&gt;&#xD;
&lt;p&gt;简单说明：osql为SQL Server的命令，要在cmd中执行该命令，一般安装完SQL Server后该命令对应的路径会自动添加到系统环境变量中。 -S 表示要连接的数据库服务器 -U表示登录的用户ID，-P表示登录密码 -i表示要执行的脚本文件路径。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/longer/aggbug/1735940.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/longer/archive/2010/05/15/1735940.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/longer/archive/2010/02/25/1673884.html</id><title type="text">【转自大家论坛】jQuery 1.4: 15个你应该知道的新特性</title><summary type="text">jQuery 1.4 最近刚刚发布. 这个版本可不是一个简单的改进,它不仅包含了很多新的特性，还改进了很多功能, 更在性能优化方面下了很大功夫, 本文将对这些新的特性和增强的部分进行讨论,希望能对你有所帮助.首先现在你可以从这里下载最新的1.4的版本了: http://code.jquery.com/jquery-1.4.js1. 传递属性给jQuery1.4之前的版本中jQuery就通过"att...</summary><published>2010-02-25T15:34:00Z</published><updated>2010-02-25T15:34:00Z</updated><author><name>John Liu</name><uri>http://www.cnblogs.com/longer/</uri></author><link rel="alternate" href="http://www.cnblogs.com/longer/archive/2010/02/25/1673884.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/longer/archive/2010/02/25/1673884.html"/><content type="html">&lt;table cellspacing="0" cellpadding="0"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td  id="postmessage_4094584"&gt;&#xD;
&lt;div id="ad_thread3_0"&gt;&lt;/div&gt;&#xD;
&lt;div id="ad_thread4_0"&gt;&lt;/div&gt;jQuery 1.4 最近刚刚发布. 这个版本可不是一个简单的改进,它不仅包含了很多新的特性，还改进了很多功能, 更在性能优化方面下了很大功夫, 本文将对这些新的特性和增强的部分进行讨论,希望能对你有所帮助.&lt;br /&gt;&lt;br /&gt;首先现在你可以从这里下载最新的1.4的版本了: &lt;a href="http://code.jquery.com/jquery-1.4.js" target="_blank"&gt;http://code.jquery.com/jquery-1.4.js&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;1. 传递属性给jQuery&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1.4之前的版本中jQuery就通过"attr&amp;#8221;方法支持了添加属性到元素集合中，"attr&amp;#8221;方法不仅可以传递属性名和值，也可以传递包含有多个属性的对象集合。在1.4中，除了可以创建新的对象，现在它更能将属性对象作为参数传递给jQuery函数或对象自身。如你可以创建一个含有多个属性的链接元素，通过1.4代码如下： &#xD;
&lt;div &gt;&#xD;
&lt;div id="code0"&gt;&#xD;
&lt;ol&gt;&lt;li&gt;jQuery('&amp;lt;a/&amp;gt;', {&lt;br /&gt;&lt;/li&gt;&lt;li&gt;id: 'gid',&lt;br /&gt;&lt;/li&gt;&lt;li&gt;href: 'http://www.&lt;span  onclick="tagshow(event)" href="tag.php?name=google"&gt;google&lt;/span&gt;.com',&lt;br /&gt;&lt;/li&gt;&lt;li&gt;title: 'google非和谐版',&lt;br /&gt;&lt;/li&gt;&lt;li&gt;rel: 'external',&lt;br /&gt;&lt;/li&gt;&lt;li&gt;text: '进入Google!'&lt;br /&gt;&lt;/li&gt;&lt;li&gt;});&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;em onclick="copycode($('code0'));"&gt;复制代码&lt;/em&gt;&lt;/div&gt;你可能会注意到"text&amp;#8221;属性并且猜测它是干吗的，因为a标签是没有"text&amp;#8221;属性的。呵呵，当你传递某些属性时，jquery 1.4同样会检查并使用它自己的方法。因此上面的"text&amp;#8221;属性可以让jQuery调用它的".text()&amp;#8221;方法并将"进入Google!&amp;#8220;作为它的唯一参数。&lt;br /&gt;&lt;br /&gt;这里给出一个更好的例子： &#xD;
&lt;div &gt;&#xD;
&lt;div id="code1"&gt;&#xD;
&lt;ol&gt;&lt;li&gt;jQuery('&amp;lt;div/&amp;gt;', {&lt;br /&gt;&lt;/li&gt;&lt;li&gt;id: 'foo',&lt;br /&gt;&lt;/li&gt;&lt;li&gt;css: {&lt;br /&gt;&lt;/li&gt;&lt;li&gt;fontWeight: 700,&lt;br /&gt;&lt;/li&gt;&lt;li&gt;color: 'green'&lt;br /&gt;&lt;/li&gt;&lt;li&gt;},&lt;br /&gt;&lt;/li&gt;&lt;li&gt;click: function(){&lt;br /&gt;&lt;/li&gt;&lt;li&gt;alert('Foo被点击过!');&lt;br /&gt;&lt;/li&gt;&lt;li&gt;}&lt;br /&gt;&lt;/li&gt;&lt;li&gt;});&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;em onclick="copycode($('code1'));"&gt;复制代码&lt;/em&gt;&lt;/div&gt;"id&amp;#8221;属性是作为一个普通属性被添加的。但"css&amp;#8221;和"click&amp;#8221;属性则对应特定的jQuery方法。上面的代码在1.4之前一种写法如下： &#xD;
&lt;div &gt;&#xD;
&lt;div id="code2"&gt;&#xD;
&lt;ol&gt;&lt;li&gt;jQuery('&amp;lt;div/&amp;gt;')&lt;br /&gt;&lt;/li&gt;&lt;li&gt;.attr('id', 'foo')&lt;br /&gt;&lt;/li&gt;&lt;li&gt;.css({&lt;br /&gt;&lt;/li&gt;&lt;li&gt;fontWeight: 700,&lt;br /&gt;&lt;/li&gt;&lt;li&gt;color: 'green'&lt;br /&gt;&lt;/li&gt;&lt;li&gt;})&lt;br /&gt;&lt;/li&gt;&lt;li&gt;.click(function(){&lt;br /&gt;&lt;/li&gt;&lt;li&gt;alert('Foo被点击过!');&lt;br /&gt;&lt;/li&gt;&lt;li&gt;}); &lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;em onclick="copycode($('code2'));"&gt;复制代码&lt;/em&gt;&lt;/div&gt;&lt;strong&gt;2. 所有的东西都可以"until&amp;#8220;了&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1.4新增了三个对DOM操作的方法，他们分别是"nextUntil",&amp;nbsp;&amp;nbsp;"prevUntil"&amp;nbsp;&amp;nbsp;和&amp;nbsp;&amp;nbsp;"parentsUntil"。 这些方法会按照某个顺序去遍历DOM对象直到满足指定的筛选条件。假设我们有一个水果列表： &#xD;
&lt;div &gt;&#xD;
&lt;div id="code3"&gt;&#xD;
&lt;ol&gt;&lt;li&gt;&amp;lt;ul&amp;gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&amp;lt;li&amp;gt;苹果&amp;lt;/li&amp;gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&amp;lt;li&amp;gt;香蕉&amp;lt;/li&amp;gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&amp;lt;li&amp;gt;葡萄&amp;lt;/li&amp;gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&amp;lt;li&amp;gt;草莓&amp;lt;/li&amp;gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&amp;lt;li&amp;gt;例子&amp;lt;/li&amp;gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&amp;lt;li&amp;gt;桃子&amp;lt;/li&amp;gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&amp;lt;/ul&amp;gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;em onclick="copycode($('code3'));"&gt;复制代码&lt;/em&gt;&lt;/div&gt;如果你想选择所有在"Apple&amp;#8221;和"Strawberry&amp;#8221;之间的元素。代码可以这样写： &#xD;
&lt;div &gt;&#xD;
&lt;div id="code4"&gt;&#xD;
&lt;ol&gt;&lt;li&gt;jQuery('ul li:contains(苹果)').nextUntil(':contains(梨子)');&lt;br /&gt;&lt;/li&gt;&lt;li&gt;// 得到 香蕉，葡萄，草莓&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;em onclick="copycode($('code4'));"&gt;复制代码&lt;/em&gt;&lt;/div&gt;&lt;strong&gt;3. 绑定多个事件&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;与通过jquery链绑定多个方法到一起相比，现在你可以通过一次调用来绑定所有这些事件，如： &#xD;
&lt;div &gt;&#xD;
&lt;div id="code5"&gt;&#xD;
&lt;ol&gt;&lt;li&gt;jQuery('#foo).bind({&lt;br /&gt;&lt;/li&gt;&lt;li&gt;click: function() {&lt;br /&gt;&lt;/li&gt;&lt;li&gt;// 具体代码&lt;br /&gt;&lt;/li&gt;&lt;li&gt;},&lt;br /&gt;&lt;/li&gt;&lt;li&gt;mouseover: function() {&lt;br /&gt;&lt;/li&gt;&lt;li&gt;// 具体代码&lt;br /&gt;&lt;/li&gt;&lt;li&gt;},&lt;br /&gt;&lt;/li&gt;&lt;li&gt;mouseout: function() {&lt;br /&gt;&lt;/li&gt;&lt;li&gt;// 具体代码&lt;br /&gt;&lt;/li&gt;&lt;li&gt;}&lt;br /&gt;&lt;/li&gt;&lt;li&gt;})&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;em onclick="copycode($('code5'));"&gt;复制代码&lt;/em&gt;&lt;/div&gt;你也可以通过 ".one()"方法操作。 &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;4. Per-Property Easing&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;与给一个动画仅仅定义一个缓动效果相比，现在你可以给你想要添加动画效果的属性定义不同的缓动函数了。jQuery包含两个缓动函数，旋转(默认)和线性移动。如果你需要其他的效果的话，你需要去单独下载它们 !&lt;br /&gt;&lt;br /&gt;要给每个属性指定一个缓动函数的话，你可以简单的通过属性数组来达到目的，在数组中，第一个值是你想要实现的效果值，第二个参数则是使用的缓动函数，如： &#xD;
&lt;div &gt;&#xD;
&lt;div id="code6"&gt;&#xD;
&lt;ol&gt;&lt;li&gt;jQuery('#foo').animate({&lt;br /&gt;&lt;/li&gt;&lt;li&gt;left: 500,&lt;br /&gt;&lt;/li&gt;&lt;li&gt;top: [500, 'easeOutBounce']&lt;br /&gt;&lt;/li&gt;&lt;li&gt;}, 2000);&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;em onclick="copycode($('code6'));"&gt;复制代码&lt;/em&gt;&lt;/div&gt;你也可以以键值对的形式在那些可选设置项中单独指定属性缓动函数： &#xD;
&lt;div &gt;&#xD;
&lt;div id="code7"&gt;&#xD;
&lt;ol&gt;&lt;li&gt;jQuery('#foo').animate({&lt;br /&gt;&lt;/li&gt;&lt;li&gt;left: 500,&lt;br /&gt;&lt;/li&gt;&lt;li&gt;top: 500&lt;br /&gt;&lt;/li&gt;&lt;li&gt;}, {&lt;br /&gt;&lt;/li&gt;&lt;li&gt;duration: 2000,&lt;br /&gt;&lt;/li&gt;&lt;li&gt;specialEasing: {&lt;br /&gt;&lt;/li&gt;&lt;li&gt;top: 'easeOutBounce'&lt;br /&gt;&lt;/li&gt;&lt;li&gt;}&lt;br /&gt;&lt;/li&gt;&lt;li&gt;});&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;em onclick="copycode($('code7'));"&gt;复制代码&lt;/em&gt;&lt;/div&gt;&lt;strong&gt;5. 新的Live事件!&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1.4添加了对"submit&amp;#8221;,"change&amp;#8221;,"focus&amp;#8221;, 和"blur&amp;#8221;事件的委托支持。在jQuery中，我们可以使用".live()&amp;#8221;方法去委托事件。这在你需要注册事件到大量元素中或新的元素需要不断的被添加(使用".live()&amp;#8221;会比不断的重新绑定事件更高效)将会很有用。&lt;br /&gt;&lt;br /&gt;但是，注意！如果你需要委托"focus&amp;#8221;和"blur&amp;#8221;事件的时候，你必须使用"focusin&amp;#8221;和"focusout&amp;#8221;事件名称！ &#xD;
&lt;div &gt;&#xD;
&lt;div id="code8"&gt;&#xD;
&lt;ol&gt;&lt;li&gt;jQuery('input').live('focusin', function(){&lt;br /&gt;&lt;/li&gt;&lt;li&gt;//具体操作&lt;br /&gt;&lt;/li&gt;&lt;li&gt;});&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;em onclick="copycode($('code8'));"&gt;复制代码&lt;/em&gt;&lt;/div&gt;&lt;strong&gt;6. 控制函数的上下文&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;jQuery 1.4提供了一个新的叫"proxy&amp;#8221;的函数，它在jQuery命名空间下。该函数需要两个参数，不管是代码域还是方法名，或者是函数和其所处的代码域。 t"this&amp;#8221;关键字在&lt;span  onclick="tagshow(event)" href="tag.php?name=Java"&gt;Java&lt;/span&gt;Scrip中是相当难掌握的。有时候你可能期待它指的是你之前创建的某个对象，而不是一个你可能没想到的元素。&lt;br /&gt;&lt;br /&gt;举例说明，假设我们有一个"app&amp;#8221;对象，它有两个属性，一个是"clickHandler&amp;#8221;方法, 另外一个则是一个config对象。 &#xD;
&lt;div &gt;&#xD;
&lt;div id="code9"&gt;&#xD;
&lt;ol&gt;&lt;li&gt;var app = {&lt;br /&gt;&lt;/li&gt;&lt;li&gt;config: {&lt;br /&gt;&lt;/li&gt;&lt;li&gt;clickMessage: '你好!'&lt;br /&gt;&lt;/li&gt;&lt;li&gt;},&lt;br /&gt;&lt;/li&gt;&lt;li&gt;clickHandler: function() {&lt;br /&gt;&lt;/li&gt;&lt;li&gt;alert(this.config.clickMessage);&lt;br /&gt;&lt;/li&gt;&lt;li&gt;}&lt;br /&gt;&lt;/li&gt;&lt;li&gt;};&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;em onclick="copycode($('code9'));"&gt;复制代码&lt;/em&gt;&lt;/div&gt;当我们调用如"app.clickHandler()"时，"clickHandler"会将"app&amp;#8221;作为其上下文。这意味着在这里"this"关键字将允许其访问"app"。这在我们简单调用下面函数时没什么问题： &#xD;
&lt;div &gt;&#xD;
&lt;div id="code10"&gt;&#xD;
&lt;ol&gt;&lt;li&gt;app.clickHandler(); // "你好!" 消息触发&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;em onclick="copycode($('code10'));"&gt;复制代码&lt;/em&gt;&lt;/div&gt;让我们试试将其作为事件绑定会有什么情况： &#xD;
&lt;div &gt;&#xD;
&lt;div id="code11"&gt;&#xD;
&lt;ol&gt;&lt;li&gt;jQuery('a').bind('click', app.clickHandler);&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;em onclick="copycode($('code11'));"&gt;复制代码&lt;/em&gt;&lt;/div&gt;当我们点击一个链接的时候什么都不会发生，函数不会工作。这是因为 jQuery(其他任何正常的事件模型同样如此)默认会把目标元素a设置成为事件的上下文。即"this&amp;#8221;现在其实是指刚刚被点击过的元素a。但我们实际上并不想这样子的。我们期待"this&amp;#8221;应该被设置为"app&amp;#8221;.在jQuery 1.4中实现这个再简单不过了： &#xD;
&lt;div &gt;&#xD;
&lt;div id="code12"&gt;&#xD;
&lt;ol&gt;&lt;li&gt;jQuery('a').bind(&lt;br /&gt;&lt;/li&gt;&lt;li&gt;'click',&lt;br /&gt;&lt;/li&gt;&lt;li&gt;jQuery.proxy(app, 'clickHandler')&lt;br /&gt;&lt;/li&gt;&lt;li&gt;);&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;em onclick="copycode($('code12'));"&gt;复制代码&lt;/em&gt;&lt;/div&gt;现在无论什么时候一个链接被点击到，"你好"的消息都会被触发了！&lt;br /&gt;&lt;br /&gt;proxy函数会返回一个你的函数被"包装过"之后的对象，在该对象中，"this&amp;#8221;被设置成任意你指定的对象。这在其他的情景下同样有用，如传递回调函数给其他的jQuery对象或者一些插件的时候。 &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;7. 在动画中添加停顿&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;现在你可以再你的动画队列中添加停顿效果了。事实上，任何队列中都可以添加该函数，但最常用的情况应该还是在使用"fx&amp;#8221;队列的时候。这允许你在多个动作中间添加暂停而不需要通过回调函数去调用"setTimeout"。".delay()" 函数的第一个参数是你想停顿的毫秒数。 &#xD;
&lt;div &gt;&#xD;
&lt;div id="code13"&gt;&#xD;
&lt;ol&gt;&lt;li&gt;jQuery('#foo')&lt;br /&gt;&lt;/li&gt;&lt;li&gt;.slideDown() // Slide down&lt;br /&gt;&lt;/li&gt;&lt;li&gt;.delay(200) // 停顿 200 ms&lt;br /&gt;&lt;/li&gt;&lt;li&gt;.fadeIn(); // Fade in&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;em onclick="copycode($('code13'));"&gt;复制代码&lt;/em&gt;&lt;/div&gt;如果你想给其他不是默认的"fx&amp;#8221;的队列也添加停顿的话，这时候，你需要将队列名作为第二个参数传递给".delay()"。 &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;8. 检查元素是否拥有某对象&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;通过".has()&amp;#8221;方法，jQuery 1.4使得检查一个元素(或者集合)是不是有某对象变得相当简单。从程序角度看，它和jQuery的selector过滤器":has()&amp;#8221;是一样的。该方法会返回在当前集合中所有包含有至少一个符合条件的元素数组。 &#xD;
&lt;div &gt;&#xD;
&lt;div id="code14"&gt;&#xD;
&lt;ol&gt;&lt;li&gt;jQuery('div').has('ul');&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;em onclick="copycode($('code14'));"&gt;复制代码&lt;/em&gt;&lt;/div&gt;上面方法会返回所有包含有UL元素的DIV元素数组。在这种情况下，你可能会更倾向于简单使用选择器的过滤器(":has()"), 但当你需要通过代码过滤一个数组的时候，该方法仍会很有用。&lt;br /&gt;&lt;br /&gt;1.4同样在jQuery命名空间下添加了新的"contains"函数。这是一个低级的函数，它接受两个DOM节点作为参数。它会返回一个布尔值来表示后面一个元素是否在前面一个元素中存在。如： &#xD;
&lt;div &gt;&#xD;
&lt;div id="code15"&gt;&#xD;
&lt;ol&gt;&lt;li&gt;jQuery.contains(document.documentElement, document.body);&lt;br /&gt;&lt;/li&gt;&lt;li&gt;// 返回true - &amp;lt;body&amp;gt;在&amp;lt;html&amp;gt;存在&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;em onclick="copycode($('code15'));"&gt;复制代码&lt;/em&gt;&lt;/div&gt;&lt;strong&gt;9. 去掉元素的包装&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;".warp()&amp;#8221;已经在jQuery中有段日子了，现在跟它对应的".unwrap()&amp;#8221;方法也被加进到1.4中了。这个方法刚好跟warp()方法相反。假设有下面的DOM结构： &#xD;
&lt;div &gt;&#xD;
&lt;div id="code16"&gt;&#xD;
&lt;ol&gt;&lt;li&gt;&amp;lt;div&amp;gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&amp;lt;p&amp;gt;Foo&amp;lt;/p&amp;gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&amp;lt;/div&amp;gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;em onclick="copycode($('code16'));"&gt;复制代码&lt;/em&gt;&lt;/div&gt;我们可以用下面的函数去掉段落元素的外层： &#xD;
&lt;div &gt;&#xD;
&lt;div id="code17"&gt;&#xD;
&lt;ol&gt;&lt;li&gt;jQuery('p').unwrap();&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;em onclick="copycode($('code17'));"&gt;复制代码&lt;/em&gt;&lt;/div&gt;最终的DOM结构如下： &#xD;
&lt;div &gt;&#xD;
&lt;div id="code18"&gt;&#xD;
&lt;ol&gt;&lt;li&gt;&amp;lt;p&amp;gt;Foo&amp;lt;/p&amp;gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;em onclick="copycode($('code18'));"&gt;复制代码&lt;/em&gt;&lt;/div&gt;注意，这个方法处理比较简单，它会移掉任何元素的父节点。 &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;10. detach() vs remove()&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;新的".detach()&amp;#8221;方法允许你从DOM中移掉元素，这跟".remove()&amp;#8221;很像。但与".remove()&amp;#8221;有本质不同的是"detach()&amp;#8221;不会将jQuery赋给该元素的数据也给注销掉。这包含通过".data()&amp;#8221;和其他任意的通过jQuery的事件系统添加的事件等数据。&lt;br /&gt;&lt;br /&gt;如果你想从DOM中移除某个元素，但你又可能需要在后面的某个时候把该元素重新添加到DOM中的时候这个函数将会很有用，这时候该元素的事件和其他的数据都会被保留下来。 &#xD;
&lt;div &gt;&#xD;
&lt;div id="code19"&gt;&#xD;
&lt;ol&gt;&lt;li&gt;var foo = jQuery('#foo');&lt;br /&gt;&lt;/li&gt;&lt;li&gt;// 绑定一个重要的事件&lt;br /&gt;&lt;/li&gt;&lt;li&gt;foo.click(function(){&lt;br /&gt;&lt;/li&gt;&lt;li&gt;alert('Foo!');&lt;br /&gt;&lt;/li&gt;&lt;li&gt;});&lt;br /&gt;&lt;/li&gt;&lt;li&gt;foo.detach(); // 从 DOM中移除事件&lt;br /&gt;&lt;/li&gt;&lt;li&gt;// &amp;#8230; 其他操作&lt;br /&gt;&lt;/li&gt;&lt;li&gt;foo.appendTo('body'); // 将元素重新加入到 DOM&lt;br /&gt;&lt;/li&gt;&lt;li&gt;foo.click(); // 弹出 "Foo!"&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;em onclick="copycode($('code19'));"&gt;复制代码&lt;/em&gt;&lt;/div&gt;&lt;strong&gt;11. index(&amp;#8230;) 加强&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;jQuery 1.4中我们有两种使用".index()&amp;#8221;方法的方式。首先，你可以仅仅将一个元素自身作为参数，这样你可以得到该元素在当前集合中所处的索引位置值。&lt;br /&gt;&lt;br /&gt;如果不设置参数的话，现在会返回该元素的兄弟节点。因此，假设有下面的DOM结构： &#xD;
&lt;div &gt;&#xD;
&lt;div id="code20"&gt;&#xD;
&lt;ol&gt;&lt;li&gt;&amp;lt;ul&amp;gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&amp;lt;li&amp;gt;苹果&amp;lt;/li&amp;gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&amp;lt;li&amp;gt;香蕉&amp;lt;/li&amp;gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&amp;lt;li&amp;gt;葡萄&amp;lt;/li&amp;gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&amp;lt;li&amp;gt;草莓&amp;lt;/li&amp;gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&amp;lt;li&amp;gt;例子&amp;lt;/li&amp;gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&amp;lt;li&amp;gt;桃子&amp;lt;/li&amp;gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&amp;lt;/ul&amp;gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;em onclick="copycode($('code20'));"&gt;复制代码&lt;/em&gt;&lt;/div&gt;当一个节点被点击的时候，你如果想找到在所有的节点集合中被单击的节点的位置，你可以这样写： &#xD;
&lt;div &gt;&#xD;
&lt;div id="code21"&gt;&#xD;
&lt;ol&gt;&lt;li&gt;jQuery('li').click(function(){&lt;br /&gt;&lt;/li&gt;&lt;li&gt;alert( jQuery(this).index() );&lt;br /&gt;&lt;/li&gt;&lt;li&gt;});&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;em onclick="copycode($('code21'));"&gt;复制代码&lt;/em&gt;&lt;/div&gt;jQuery 1.4还允许你指定一个选择器作为".index()&amp;#8221;的第一个参数，这样它会返回该元素在选择器中产生的元素集合中的位置。&lt;br /&gt;&lt;br /&gt;最后需要注意的是，如果该元素在集合中存在的话，该函数会返回一个其位置的整数，如果不存在，则返回-1。 &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;12. DOM 操作的方法支持回调函数&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;大部分对DOM进行操作的函数现在都支持传递函数作为唯一参数了(如果是".css()&amp;#8221;和".attr()&amp;#8221;的情况的话，它会作为第二参数)。该函数会在集合中的每个元素上都执行一次，从而确定哪些应作为该函数的实际值提供给回调函数调用。&lt;br /&gt;&lt;br /&gt;下面给出所有支持该功能的函数列表: &#xD;
&lt;div &gt;&#xD;
&lt;div id="code22"&gt;&#xD;
&lt;ol&gt;&lt;li&gt;[list]&lt;br /&gt;&lt;/li&gt;&lt;li&gt;[*][url=http://api.jquery.com/after]after[/url]&lt;br /&gt;&lt;/li&gt;&lt;li&gt;[*][url=http://api.jquery.com/before]before[/url]&lt;br /&gt;&lt;/li&gt;&lt;li&gt;[*][url=http://api.jquery.com/append]append[/url]&lt;br /&gt;&lt;/li&gt;&lt;li&gt;[*][url=http://api.jquery.com/prepend]prepend[/url]&lt;br /&gt;&lt;/li&gt;&lt;li&gt;[*][url=http://api.jquery.com/addClass]addClass[/url]&lt;br /&gt;&lt;/li&gt;&lt;li&gt;[*][url=http://api.jquery.com/toggleClass]toggleClass[/url]&lt;br /&gt;&lt;/li&gt;&lt;li&gt;[*][url=http://api.jquery.com/removeClass]removeClass[/url]&lt;br /&gt;&lt;/li&gt;&lt;li&gt;[*][url=http://api.jquery.com/wrap]wrap[/url]&lt;br /&gt;&lt;/li&gt;&lt;li&gt;[*][url=http://api.jquery.com/wrapAll]wrapAll[/url]&lt;br /&gt;&lt;/li&gt;&lt;li&gt;[*][url=http://api.jquery.com/wrapInner]wrapInner[/url]&lt;br /&gt;&lt;/li&gt;&lt;li&gt;[*][url=http://api.jquery.com/val]val[/url]&lt;br /&gt;&lt;/li&gt;&lt;li&gt;[*][url=http://api.jquery.com/text]text[/url]&lt;br /&gt;&lt;/li&gt;&lt;li&gt;[*][url=http://api.jquery.com/replaceWith]replaceWith[/url]&lt;br /&gt;&lt;/li&gt;&lt;li&gt;[*][url=http://api.jquery.com/css]css[/url]&lt;br /&gt;&lt;/li&gt;&lt;li&gt;[*][url=http://api.jquery.com/attr]attr[/url]&lt;br /&gt;&lt;/li&gt;&lt;li&gt;[*][url=http://api.jquery.com/html]html[/url]&lt;br /&gt;&lt;/li&gt;&lt;li&gt;[/list]&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;em onclick="copycode($('code22'));"&gt;复制代码&lt;/em&gt;&lt;/div&gt;通过回调函数，你可以通过"this&amp;#8221;访问数组中的当前元素，还可以通过第一个参数得到它在数组中的位置。 &#xD;
&lt;div &gt;&#xD;
&lt;div id="code23"&gt;&#xD;
&lt;ol&gt;&lt;li&gt;jQuery('li').html(function(i){&lt;br /&gt;&lt;/li&gt;&lt;li&gt;return '该列表中的索引位置: ' + i;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;});&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;em onclick="copycode($('code23'));"&gt;复制代码&lt;/em&gt;&lt;/div&gt;同样，你也可以通过上面的某些方法得到另外一个参数，如果你调用一个setter方法(如".html()&amp;#8221;或".attr(&amp;#8216;href&amp;#8217;)")你就可以直接访问当前的值了。如： &#xD;
&lt;div &gt;&#xD;
&lt;div id="code24"&gt;&#xD;
&lt;ol&gt;&lt;li&gt;jQuery('a').attr('href', function(i, currentHref){&lt;br /&gt;&lt;/li&gt;&lt;li&gt;return currentHref + '?foo=bar';&lt;br /&gt;&lt;/li&gt;&lt;li&gt;});&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;em onclick="copycode($('code24'));"&gt;复制代码&lt;/em&gt;&lt;/div&gt;正如上面看到的，在使用".css()" 和 ".attr()" 方法时，因为第一个参数需要被用作指定那些你需要设置或改变的属性名，你需要将回调函数作为第二参数。 &#xD;
&lt;div &gt;&#xD;
&lt;div id="code25"&gt;&#xD;
&lt;ol&gt;&lt;li&gt;jQuery('li').css('color', function(i, currentCssColor){&lt;br /&gt;&lt;/li&gt;&lt;li&gt;return i % 2 ? 'red' : 'blue';&lt;br /&gt;&lt;/li&gt;&lt;li&gt;});&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;em onclick="copycode($('code25'));"&gt;复制代码&lt;/em&gt;&lt;/div&gt;&lt;strong&gt;13. 对象类型判断&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;jQuery 1.4添加了两个新的方法(直接放到了jQuery命名空间下面)以方便我们来判断当前处理的对象的类型。&lt;br /&gt;&lt;br /&gt;首先是方法"isEmptyObject&amp;#8221;，顾名思义，这个函数会返回一个布尔值来表明传递的对象是不是空对象(缺乏属性--无论是对象自身还是继续的对象)。其次是方法"isPlainObject&amp;#8221;，它会返回一个布尔值来表明操作的对象是否是一个简单的js对象(指通过"{ }"或者"new Object&amp;#8221;创建的对象)。 &#xD;
&lt;div &gt;&#xD;
&lt;div id="code26"&gt;&#xD;
&lt;ol&gt;&lt;li&gt;jQuery.isEmptyObject({}); // true&lt;br /&gt;&lt;/li&gt;&lt;li&gt;jQuery.isEmptyObject({foo:1}); // false&lt;br /&gt;&lt;/li&gt;&lt;li&gt;jQuery.isPlainObject({}); // true&lt;br /&gt;&lt;/li&gt;&lt;li&gt;jQuery.isPlainObject(window); // false&lt;br /&gt;&lt;/li&gt;&lt;li&gt;jQuery.isPlainObject(jQuery()); // false&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;em onclick="copycode($('code26'));"&gt;复制代码&lt;/em&gt;&lt;/div&gt;&lt;strong&gt;14. Closest(&amp;#8230;) 增强&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;jQuery的".closest()&amp;#8221;方法现在可以接受一组选择器了。如果开发人员想遍历一个元素的祖先，并在其中查找离其最近的那些符合某些特征的节点的时候，这会很有用。&lt;br /&gt;&lt;br /&gt;另外，该函数现在也接受将上下文作为第二参数了。这意味着你现在可以控制你想在DOM中遍历的元素范围了。虽然这两种情况我们一般很少用到，不过它们在jQuery内部被很好的使用。 &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;15. 新的事件! focusIn 和focusOut&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;上文已经提到，为了委托"focus&amp;#8221;和"blur&amp;#8221;事件你需要这些新的事件，它们是"focusin&amp;#8221;和"focusout&amp;#8221;。这些新的事件将允许你在一个元素或其子元素获取焦点的时候进行相应操作。 &#xD;
&lt;div &gt;&#xD;
&lt;div id="code27"&gt;&#xD;
&lt;ol&gt;&lt;li&gt;jQuery('form')&lt;br /&gt;&lt;/li&gt;&lt;li&gt;.focusin(function(){&lt;br /&gt;&lt;/li&gt;&lt;li&gt;jQuery(this).addClass('focused');&lt;br /&gt;&lt;/li&gt;&lt;li&gt;});&lt;br /&gt;&lt;/li&gt;&lt;li&gt;.focusout(function(){&lt;br /&gt;&lt;/li&gt;&lt;li&gt;jQuery(this).removeClass('focused');&lt;br /&gt;&lt;/li&gt;&lt;li&gt;});&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;em onclick="copycode($('code27'));"&gt;复制代码&lt;/em&gt;&lt;/div&gt;同时应该注意的是这两个事件都不是按冒泡顺序传递，它们将按捕获顺序触发。这意味着最外层的(也即祖先)元素会在实际节点事件触发前被触发。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;img src="http://www.cnblogs.com/longer/aggbug/1673884.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/longer/archive/2010/02/25/1673884.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/longer/archive/2009/09/09/1563095.html</id><title type="text">小技巧：Response.Redirect(...,true/false)</title><summary type="text">意思就是是否还要执行  Response.Redirect(...,true/false)  后的语句。 为True  的话，不再执行 Redirect  后的语句; False的话，依然后执行Redirect后的语句。</summary><published>2009-09-09T02:46:00Z</published><updated>2009-09-09T02:46:00Z</updated><author><name>John Liu</name><uri>http://www.cnblogs.com/longer/</uri></author><link rel="alternate" href="http://www.cnblogs.com/longer/archive/2009/09/09/1563095.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/longer/archive/2009/09/09/1563095.html"/></entry></feed>
