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

<channel>
	<title>裁纸刀下 &#187; 代码</title>
	<atom:link href="http://ofcss.com/tags/code/feed" rel="self" type="application/rss+xml" />
	<link>http://ofcss.com</link>
	<description>独立 自由 诚信 宽容 责任 平常心</description>
	<lastBuildDate>Thu, 19 Jan 2012 14:24:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>简单、通用的JQuery Tab实现</title>
		<link>http://ofcss.com/2009/04/13/portable-interchangeable-jquery-based-tabs.html</link>
		<comments>http://ofcss.com/2009/04/13/portable-interchangeable-jquery-based-tabs.html#comments</comments>
		<pubDate>Mon, 13 Apr 2009 03:35:34 +0000</pubDate>
		<dc:creator>小李刀刀</dc:creator>
				<category><![CDATA[所谓技术]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[网页]]></category>

		<guid isPermaLink="false">http://wukangrui.net/2009/04/13/portable-interchangeable-jquery-based-tabs.html</guid>
		<description><![CDATA[<p>网页上的空间是寸土寸金，虽然显示器的分辨率越来越大，可是直到今天，网页设计中仍然是以至少1024&#215;768 像素的支持为主，也就是说，每一屏页面只有区区 955&#215;600像素 的安全尺寸可以用而已。于是，为了在有限的空间里容纳更多的内容，滑动门式的标签切换（Tabs）方式越来越受欢迎。通过滑动门技术，可以在同一块页面区域内放置数倍的内容。根据用户的选择来决定显示哪一部分。最近我在实际应用中，逐步完善出一种基于 jQuery，但是比 jQuery UI Tabs 插件更小巧也更通用的简单 Tabs 实现。 最早的滑动门的技术，一般都是结合 onclick 或者 onmouseover 事件传递一个参数给 JS 函数，根据传递的参数来决定显示哪一个标签。比如： function showTabs(n) { var tabsNumber = 3; for (i = 0; i &#60; tabsNumber; i++) { if (i == n) { document.getElementById(“tabPanel-” &#8230; <a href="http://ofcss.com/2009/04/13/portable-interchangeable-jquery-based-tabs.html">Continue reading <span class="meta-nav">&#8594;</span></a></p>
]]></description>
			<content:encoded><![CDATA[<p>网页上的空间是寸土寸金，虽然显示器的分辨率越来越大，可是直到今天，网页设计中仍然是以至少1024x768 像素的支持为主，也就是说，每一屏页面只有区区 955x600像素 的安全尺寸可以用而已。于是，为了在有限的空间里容纳更多的内容，滑动门式的标签切换（Tabs）方式越来越受欢迎。通过滑动门技术，可以在同一块页面区域内放置数倍的内容。根据用户的选择来决定显示哪一部分。最近我在实际应用中，逐步完善出一种基于 <a title="jQuery" rel="nofollow" href="http://jquery.com/" target="_blank">jQuery</a>，但是比 <a title="jQuery" rel="nofollow" href="http://jquery.com/" target="_blank">jQuery</a> UI Tabs 插件更小巧也更通用的简单 Tabs 实现。</p>
<p><span id="more-487"></span>最早的滑动门的技术，一般都是结合 onclick 或者 onmouseover 事件传递一个参数给 JS 函数，根据传递的参数来决定显示哪一个标签。比如：</p>
<pre class="code" style="width: 99.39%; height: 213px;"><span style="color: blue">function </span>showTabs(n) {
  <span style="color: blue">var </span>tabsNumber = 3;
  <span style="color: blue">for </span>(i = 0; i &lt; tabsNumber; i++) {
      <span style="color: blue">if </span>(i == n) {
          document.getElementById(<span style="color: #a31515">"tabPanel-" </span>+ i).style.display = <span style="color: #a31515">"block"</span>;
      } <span style="color: blue">else </span>{
          document.getElementById(<span style="color: #a31515">"tabPanel-" </span>+ i).style.display = <span style="color: #a31515">"none"</span>;
      }
  }
}</pre>
<p>加入有这样的一个函数，就可以在tab的标题按钮中设置 onclick = “showTabs(1)”来设置第二块内容显示，而其它块隐藏。</p>
<p>这种方式最大的缺点是：</p>
<ol>
<li>HTML代码和JS代码混合；</li>
<li>可扩展性差；</li>
</ol>
<p>尽管可以通过window.onload绑定事件等方式来是实现JS代码从HTML中分离，也可以把函数改得更复杂以实现通用性。但是总的来说，还是很难做到一处定义到处引用。</p>
<p>后来随着各种JS类库的出现，更强大的Tabs出现了，最出名的就是jQuery UI中的tabs插件。一旦加载了jQuery框架和jQuery UI插件，那么要在页面中实现Tabs，就变得简单了许多。首先我们的页面中的Tabs代码这样写：</p>
<pre class="code"><span style="color: blue">&lt;</span><span style="color: #a31515">div </span><span style="color: red">class</span><span style="color: blue">="tabs"&gt;
    &lt;</span><span style="color: #a31515">ul</span><span style="color: blue">&gt;
        &lt;</span><span style="color: #a31515">li</span><span style="color: blue">&gt;&lt;</span><span style="color: #a31515">a </span><span style="color: red">href</span><span style="color: blue">="#panel-1"&gt;</span>标签一<span style="color: blue">&lt;/</span><span style="color: #a31515">a</span><span style="color: blue">&gt;&lt;/</span><span style="color: #a31515">li</span><span style="color: blue">&gt;
        &lt;</span><span style="color: #a31515">li</span><span style="color: blue">&gt;&lt;</span><span style="color: #a31515">a </span><span style="color: red">href</span><span style="color: blue">="#panel-2"&gt;</span>标签二<span style="color: blue">&lt;/</span><span style="color: #a31515">a</span><span style="color: blue">&gt;&lt;/</span><span style="color: #a31515">li</span><span style="color: blue">&gt;
    &lt;/</span><span style="color: #a31515">ul</span><span style="color: blue">&gt;
    &lt;</span><span style="color: #a31515">div </span><span style="color: red">id</span><span style="color: blue">="panel-1"&gt;</span>区域一<span style="color: blue">&lt;/</span><span style="color: #a31515">div</span><span style="color: blue">&gt;
    &lt;</span><span style="color: #a31515">div </span><span style="color: red">id</span><span style="color: blue">="panel-2"&gt;</span>区域二<span style="color: blue">&lt;/</span><span style="color: #a31515">div</span><span style="color: blue">&gt;
&lt;/</span><span style="color: #a31515">div</span><span style="color: blue">&gt;</span></pre>
<p>注意：这里的代码非常干净，不含任何的JS代码或者与文档结构无关的定义。然后，在head区域，或者在页面任何地方增加一段js代码：</p>
<pre class="code">$(<span style="color: blue">function</span>() {
    $(<span style="color: #a31515">".tabs"</span>).tabs();
});</pre>
<p>就实现了Tabs功能，这行JS代码执行后，上面的HTML代码就会变成：</p>
<pre class="code" style="width: 99.64%; height: 295px;"><span style="color: blue">&lt;</span><span style="color: #a31515">div </span><span style="color: red">class</span><span style="color: blue">="tabs"&gt;
    &lt;</span><span style="color: #a31515">ul </span><span style="color: red">class</span><span style="color: blue">="ui-tabs-nav" </span><span style="color: red">jquery1239647486215</span><span style="color: blue">="2"&gt;
        &lt;</span><span style="color: #a31515">li </span><span style="color: red">class</span><span style="color: blue">="ui-tabs-selected"&gt;&lt;</span><span style="color: #a31515">a </span><span style="color: red">href</span><span style="color: blue">="#panel-1" </span><span style="color: red">jquery1239647486215</span><span style="color: blue">="8"&gt;</span>标签一<span style="color: blue">&lt;/</span><span style="color: #a31515">a</span><span style="color: blue">&gt;&lt;/</span><span style="color: #a31515">li</span><span style="color: blue">&gt;
        &lt;</span><span style="color: #a31515">li</span><span style="color: blue">&gt;&lt;</span><span style="color: #a31515">a </span><span style="color: red">href</span><span style="color: blue">="#panel-2" </span><span style="color: red">jquery1239647486215</span><span style="color: blue">="9"&gt;</span>标签二<span style="color: blue">&lt;/</span><span style="color: #a31515">a</span><span style="color: blue">&gt;&lt;/</span><span style="color: #a31515">li</span><span style="color: blue">&gt;
        </span>&gt;<span style="color: blue">&lt;/</span><span style="color: #a31515">ul</span><span style="color: blue">&gt;
    &lt;</span><span style="color: #a31515">div </span><span style="color: red">id</span><span style="color: blue">="panel-1" </span><span style="color: red">class</span><span style="color: blue">="ui-tabs-panel" </span><span style="color: red">jquery1239647486215</span><span style="color: blue">="4"&gt;
        </span>区域一
    <span style="color: blue">&lt;/</span><span style="color: #a31515">div</span><span style="color: blue">&gt;
    &lt;</span><span style="color: #a31515">div </span><span style="color: red">id</span><span style="color: blue">="panel-2" </span><span style="color: red">class</span><span style="color: blue">="ui-tabs-panel ui-tabs-hide" </span><span style="color: red">jquery1239647486215</span><span style="color: blue">="5"&gt;
        </span>区域二
    <span style="color: blue">&lt;/</span><span style="color: #a31515">div</span><span style="color: blue">&gt;
&lt;/</span><span style="color: #a31515">div</span><span style="color: blue">&gt;</span></pre>
<p>结合我们自己编写的css，或者jQuery UI 自带的CSS，就可以实现滑动门效果。并且，由于jQuery的强大，我们可以在页面中放置多组滑动门，然后一次性设定。</p>
<p>要说明的是，这个地方由于只启用了jQuery UI 中的 Tabs 插件，因此生成的代码还是比较干净的，只增加了 ui-tabs-xxxx 这几个相关的css类。如果你同时包含了jQuery UI的其它插件，那么即使不启用，也会添加一堆的css定义。而且，<a title="jQuery" rel="nofollow" href="http://jquery.com/" target="_blank">jQuery</a> UI Tabs 还提供了非常强大的控制功能，你可以动态地添加 tab，可以随意更改激活事件，可以定义切换效果，还可以设置默认激活状态和禁用等。</p>
<p>但是我在实际应用中遇到了一些问题，除了 <a title="jQuery" rel="nofollow" href="http://jquery.com/" target="_blank">jQuery</a> UI 自带的js脚本很大，css不符合实际应用需求外，还有一个最大的问题，你可能已经注意到了，在作为导航的标签定义中，每个标签对应哪一个区域是用链接目标来定义的。比如 &lt;a href="#panel-1"&gt;标签一&lt;/a&gt;和&lt;div id="panel-1"&gt;区域一&lt;/div&gt;对应，如果你的标签和区域没有对应起来，绑定tabs()就不起作用了。</p>
<p>而且，这种方式来带来另一个麻烦，就是当我们需要给标签加上链接的时候，没办法加。即使你将标签的激活事件设置为onmouseover而不是onclick，链接也不能实现，因为链接用于指定目标了。这种需求在我们的实际应用中并不是不存在的。比如：</p>
<p><img style="display: inline; border: 0px;" title="image" src="/attachments/2009/04/image-thumb10.png" border="0" alt="image" /><img style="display: inline; border: 0px;" title="image" src="/attachments/2009/04/image-thumb11.png" border="0" alt="image" /></p>
<p>这两个图片中的tabs标签，都要添加到对应的新闻类别或者论坛板块的链接。这时候 <a title="jQuery" rel="nofollow" href="http://jquery.com/" target="_blank">jQuery</a> UI的默认绑定就带来了麻烦。</p>
<p>其实分析一下，我们在实现滑动门的时候，用以下HTML结构就可以满足需要：</p>
<pre class="code"><span style="color: blue">&lt;</span><span style="color: #a31515">div </span><span style="color: red">class</span><span style="color: blue">="tabs"&gt;
    &lt;</span><span style="color: #a31515">ul</span><span style="color: blue">&gt;
        &lt;</span><span style="color: #a31515">li</span><span style="color: blue">&gt;</span>标签一<span style="color: blue">&lt;/</span><span style="color: #a31515">li</span><span style="color: blue">&gt;
        &lt;</span><span style="color: #a31515">li</span><span style="color: blue">&gt;</span>标签二<span style="color: blue">&lt;/</span><span style="color: #a31515">li</span><span style="color: blue">&gt;
    &lt;/</span><span style="color: #a31515">ul</span><span style="color: blue">&gt;
    &lt;</span><span style="color: #a31515">div</span><span style="color: blue">&gt;</span>区域一<span style="color: blue">&lt;/</span><span style="color: #a31515">div</span><span style="color: blue">&gt;
    &lt;</span><span style="color: #a31515">div</span><span style="color: blue">&gt;</span>区域二<span style="color: blue">&lt;/</span><span style="color: #a31515">div</span><span style="color: blue">&gt;
&lt;/</span><span style="color: #a31515">div</span><span style="color: blue">&gt;</span></pre>
<p><a href="http://11011.net/software/vspaste"></a>借助 <a title="jQuery" rel="nofollow" href="http://jquery.com/" target="_blank">jQuery</a> 库，我们可以通过 $(".tabs")找到要实现的标签，然后 .find("li") 来找到要添加事件的元素，绑定事件的时候，我们可以通过该元素在$(".tabs li")集合中的索引值来明确是哪一个标签被激活，然后对应索引值的panel显示。代码类似这样：</p>
<pre class="code" style="width: 96.14%; height: 360px;"><span style="color: blue">&lt;</span><span style="color: #a31515">script </span><span style="color: red">type</span><span style="color: blue">="text/javascript"&gt;
    </span>$(<span style="color: blue">function</span>() {
        $(<span style="color: #a31515">".tabs"</span>).find(<span style="color: #a31515">"li"</span>).onmouseover(<span style="color: blue">function</span>(e) {
            <span style="color: blue">if </span>(e.target == <span style="color: blue">this</span>) {
                <span style="color: blue">var </span>tabs = $(<span style="color: blue">this</span>).parent().children(<span style="color: #a31515">"li"</span>);
                <span style="color: blue">var </span>panels = $(<span style="color: blue">this</span>).parent().parent().children(<span style="color: #a31515">"div"</span>);
                <span style="color: blue">var </span>index = $.inArray(<span style="color: blue">this</span>, tabs);
                <span style="color: blue">if </span>(panels.eq(index)[0]) {
                    tabs.removeClass(<span style="color: #a31515">"ui-tabs-selected"</span>)
                        .eq(index).addClass(<span style="color: #a31515">"ui-tabs-selected"</span>);
                    panels.addClass(<span style="color: #a31515">"ui-tabs-hide"</span>)
                        .eq(index).removeClass(<span style="color: #a31515">"ui-tabs-hide"</span>);
                }
            }
        });
    });
<span style="color: blue">&lt;/</span><span style="color: #a31515">script</span><span style="color: blue">&gt;</span></pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>这段代码只使用了两个css类来处理，并且，自动判断tabs和panels的对应状态，假如你有4个tab，但是只有前三个启用了，那么你只需要写三个panel就可以，第四个panel不存在，则第四个tab自动不生效。</p>
<p>在实际使用中，会遇到一个问题，一般我们会给tab中的文字加链接，那么当鼠标滑过这个tab的时候，如果指到了文字，那么激发事件的对象有可能是a元素而不是li元素，则事件就不能正确激发。所以我们改进代码如下：</p>
<pre class="code" style="width: 99.41%; height: 362px;"><span style="color: blue">&lt;</span><span style="color: #a31515">script </span><span style="color: red">type</span><span style="color: blue">="text/javascript"&gt;
    </span>$(<span style="color: blue">function</span>() {
        $(<span style="color: #a31515">".ui-tabs-nav &gt; li &gt; a"</span>)onmouseover(<span style="color: blue">function</span>(e) {
            <span style="color: blue">if </span>(e.target == <span style="color: blue">this</span>) {
                <span style="color: blue">var </span>tabs = $(<span style="color: blue">this</span>).parent().parent().children(<span style="color: #a31515">"li"</span>);
                <span style="color: blue">var </span>panels = $(<span style="color: blue">this</span>).parent().parent().parent().children(<span style="color: #a31515">".ui-tabs-panel"</span>);
                <span style="color: blue">var </span>index = $.inArray(<span style="color: blue">this</span>, tabs);
                <span style="color: blue">if </span>(panels.eq(index)[0]) {
                    tabs.removeClass(<span style="color: #a31515">"ui-tabs-selected"</span>)
                        .eq(index).addClass(<span style="color: #a31515">"ui-tabs-selected"</span>);
                    panels.addClass(<span style="color: #a31515">"ui-tabs-hide"</span>)
                        .eq(index).removeClass(<span style="color: #a31515">"ui-tabs-hide"</span>);
                }
            }
        });
    });
<span style="color: blue">&lt;/</span><span style="color: #a31515">script</span><span style="color: blue">&gt;</span></pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>与此对应的HTML结构是：</p>
<pre class="code"><span style="color: blue">&lt;</span><span style="color: #a31515">div</span><span style="color: blue">&gt;
    &lt;</span><span style="color: #a31515">ul </span><span style="color: red">class</span><span style="color: blue">="ui-tabs-nav"&gt;
        &lt;</span><span style="color: #a31515">li </span><span style="color: red">class</span><span style="color: blue">="ui-tabs-selected"&gt;&lt;</span><span style="color: #a31515">a </span><span style="color: red">href</span><span style="color: blue">="/bbs"&gt;</span>论坛新帖<span style="color: blue">&lt;/</span><span style="color: #a31515">a</span><span style="color: blue">&gt;&lt;/</span><span style="color: #a31515">li</span><span style="color: blue">&gt;
        &lt;</span><span style="color: #a31515">li</span><span style="color: blue">&gt;&lt;</span><span style="color: #a31515">a </span><span style="color: red">href</span><span style="color: blue">="/blog"&gt;</span>最新博文<span style="color: blue">&lt;/</span><span style="color: #a31515">a</span><span style="color: blue">&gt;&lt;/</span><span style="color: #a31515">li</span><span style="color: blue">&gt;
    &lt;/</span><span style="color: #a31515">ul</span><span style="color: blue">&gt;
    &lt;</span><span style="color: #a31515">div </span><span style="color: red">class</span><span style="color: blue">="ui-tabs-panel"&gt;
      </span><span style="color: green">&lt;!--这里调用最新论坛文章--&gt;
    </span><span style="color: blue">&lt;/</span><span style="color: #a31515">div</span><span style="color: blue">&gt;
    &lt;</span><span style="color: #a31515">div </span><span style="color: red">class</span><span style="color: blue">="ui-tabs-panel ui-tabs-hide"&gt;
      </span><span style="color: green">&lt;!--这里调用最新博客文章--&gt;
    </span><span style="color: blue">&lt;/</span><span style="color: #a31515">div</span><span style="color: blue">&gt;
&lt;/</span><span style="color: #a31515">div</span><span style="color: blue">&gt;</span></pre>
<p>同时，我们有以下的css类定义：</p>
<pre class="code"><span style="color: #a31515">.ui-tabs-nav
</span>{
    <span style="color: green">/*导航容器定义*/
</span>}
<span style="color: #a31515">.ui-tabs-nav li
</span>{
    <span style="color: green">/*默认标签样式*/
</span>}
<span style="color: #a31515">.ui-tabs-nav li.ui-tabs-selected
</span>{
    <span style="color: green">/*激活的标签样式*/
</span>}
<span style="color: #a31515">.ui-tabs-panel
</span>{
    <span style="color: green">/*默认的显示区域样式*/
</span>}
<span style="color: #a31515">.ui-tabs-hide
</span>{
    <span style="color: red">display</span>: <span style="color: blue">none</span>;
}</pre>
<p><a href="http://11011.net/software/vspaste"></a>这样，就可以根据你的需要，结合自己的css，定制不同样式的滑动门了。把相应的js代码放到页面中，那么在页面里任何地方只要你按照HTML结构编写了一段html，这段html就会自动变成滑动门。而不用在每个页面里单独指定特定的selector来应用滑动门的tabs()方法。并且，根据需要给你的滑动门标签添加需要的链接，或者不要链接（href="#" 或者 href="javascript:void(0)"）。</p>
<p>这段滑动门代码只要具有jQuery core 就可以正常运行，不需要加载jQuery UI。非常简单，而且很通用，样式上喜欢怎么扩展都可以。</p>
<p>具体效果可以参见 <a title="台海网首页" rel="external" href="http:/www.taihainet.com" target="_blank">http:/www.taihainet.com</a> ， 在 <a title="台海网" rel="external" href="http://www.taihainet.com/" target="_blank">台海网</a> 首页中，我一共应用了四个样式共九组滑动门，代码就只是上面给出的那一段。四个样式列举如下：</p>
<p><img style="display: inline; border: 0px;" title="image" src="/attachments/2009/04/image-thumb12.png" border="0" alt="image" /> <br />
<em>滑动门一：多个搜索表单，暂时只实现两个，后面三个由于没有对应的ui-tabs-panel，自动禁用，但是链接可以点击。</em></p>
<p><img style="display: inline; border: 0px;" title="image" src="/attachments/2009/04/image-thumb13.png" border="0" alt="image" /> <br />
<em>滑动门二：多块商务信息区域，其中第三个由于没有对应的ui-tabs-panel，自动禁用。</em></p>
<p><img style="display: inline; border: 0px;" title="image" src="/attachments/2009/04/image-thumb14.png" border="0" alt="image" /></p>
<p><em>滑动门三：新闻栏目切换，标签中的文字链接到对应的新闻栏目。</em></p>
<p><img style="display: inline; border: 0px;" title="image" src="/attachments/2009/04/image-thumb15.png" border="0" alt="image" /></p>
<p><em>滑动门四：论坛分板块帖子调用。标签中的文字链接到对应的论坛板块。</em></p>
<h3  class="related_post_title">相关日志</h3><ul class="related_post"><li>2009-12-21 -- <a href="http://ofcss.com/2009/12/21/web-developer-understand-css-box-model.html" title="前台开发从头说起：理解css盒模型">前台开发从头说起：理解css盒模型</a></li><li>2009-12-16 -- <a href="http://ofcss.com/2009/12/16/web-developer-about-css-selector.html" title="前台开发从头说起：谈谈CSS选择符">前台开发从头说起：谈谈CSS选择符</a></li><li>2009-12-15 -- <a href="http://ofcss.com/2009/12/15/web-developer-from-web-standard.html" title="前台开发从头说起：关于web标准化">前台开发从头说起：关于web标准化</a></li><li>2009-06-22 -- <a href="http://ofcss.com/2009/06/22/whatever-hover-pseudo-class-without-javascript.html" title="Whatever:hover &#8211; 无需javascript让IE支持丰富伪类">Whatever:hover &#8211; 无需javascript让IE支持丰富伪类</a></li><li>2006-04-04 -- <a href="http://ofcss.com/2006/04/04/dynamic-mouse-event-of-image-transparency.html" title="动态实现指定图片半透明及鼠标事件">动态实现指定图片半透明及鼠标事件</a></li><li>2006-03-28 -- <a href="http://ofcss.com/2006/03/28/simulate-window-in-center-with-css.html" title="CSS:模拟Windows窗口及DIV居中">CSS:模拟Windows窗口及DIV居中</a></li><li>2011-03-14 -- <a href="http://ofcss.com/2011/03/14/browser-rendering-optimizer-translation-extra.html" title="对《优化浏览器渲染》的补充【译】">对《优化浏览器渲染》的补充【译】</a></li><li>2011-03-12 -- <a href="http://ofcss.com/2011/03/12/flexible-two-column-layout-reloaded.html" title="自适应的多列图文混排改进">自适应的多列图文混排改进</a></li><li>2010-10-30 -- <a href="http://ofcss.com/2010/10/30/bfc-element-margin-bug-in-webkit.html" title="webkit中BFC元素临近浮动元素时的边距bug">webkit中BFC元素临近浮动元素时的边距bug</a></li><li>2010-10-20 -- <a href="http://ofcss.com/2010/10/20/clearfix-reloaded-overflowhidden-demystified-translation.html" title="clearfix改良及overflow:hidden详解【译】">clearfix改良及overflow:hidden详解【译】</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://ofcss.com/2009/04/13/portable-interchangeable-jquery-based-tabs.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>使用Google AjaxLib API托管的js库</title>
		<link>http://ofcss.com/2009/04/05/use-google-ajaxlib-api.html</link>
		<comments>http://ofcss.com/2009/04/05/use-google-ajaxlib-api.html#comments</comments>
		<pubDate>Sun, 05 Apr 2009 23:53:42 +0000</pubDate>
		<dc:creator>小李刀刀</dc:creator>
				<category><![CDATA[所谓技术]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[代码]]></category>

		<guid isPermaLink="false">http://wukangrui.net/2009/04/05/use-google-ajaxlib-api.html</guid>
		<description><![CDATA[<p>本文简要介绍Google AjaxLib API，并以jQuery为例说明如何在自己的网页中引入由Google提供个CDN托管的jQuery库。 <a href="http://ofcss.com/2009/04/05/use-google-ajaxlib-api.html">Continue reading <span class="meta-nav">&#8594;</span></a></p>
]]></description>
			<content:encoded><![CDATA[<blockquote><p>本文简要介绍Google AjaxLib API，并以jQuery为例说明如何在自己的网页中引入由Google提供个CDN托管的jQuery库。</p></blockquote>
<p align="center">－－－－－－－－－－－－－－－－－－－－－－－－－－－－－</p>
<p>现在很多人都已经开始习惯于基于各种各样的JS库来编写自己的Javascript，其中尤其以jQuery最多。别的不说，有了jQuery，至少让我们控制页面元素更加方便快捷，让我们在编写js的时候不需要过多地考虑浏览器特性问题了。</p>
<p><span id="more-435"></span></p>
<p>但是jQuery功能越强大，它本身的文件也越大。虽然如今的互联网带宽是越来越宽，速度是越来越快。但是做网页的却一个个越来越在意自己的页面大小、图片大小、css大小、js大小。其实相对于服务器的运行效率、机房带宽和线路品质，通过优化js、css和图片文件能挤出来的几百k尺寸的下载量，在下载速度的提高上实在是太有限了。不过话说回来，做开发的做设计的，就是要有这样的精神，才不会让自己的作品像微软的操作系统一样，越来越庞大。从15张软盘到半张CD，到一张CD，直到两张CD，最后一张DVD……</p>
<p>在我们的js中，最大的一般还是js库，毕竟具体的功能实现只需要写一点点代码而已。但是js库里那么多用到的没用到的东西，还是有点份量的。我们又想用，又嫌它大。怎么办呢？拆成很多个吧，多一个js还多一个并发连接呢…… 幸好，google挺够意思，号称“永久提供”常见js库，google的服务器和线路品质那自然是不在话下的。即提高了下载速度又减少了自己服务器的并发连接数。不用就是傻子了。</p>
<p>用起来也很简单，直接在网页里引用google服务器上的相关js文件就可以了。不过，如果引用多个js，就要插入多段的script。现在像我这样代码能少一个字算一个字的人不少。google也提供了相应的办法，那就是google load。我们只需要在页面里引用一个js文件，就可以根据需要实时加载用到的js库了。 首先在页头部分加入以下这行代码：</p>
<pre class="code" style="width: 96.07%; height: 21px;"><span style="color: blue">&lt;</span><span style="color: #a31515">script </span><span style="color: red">type</span><span style="color: blue">="text/javascript" </span><span style="color: red">src</span><span style="color: blue">="http://www.google.com/jsapi"&gt;&lt;/</span><span style="color: #a31515">script</span><span style="color: blue">&gt;</span></pre>
<p> </p>
<p>这就足够了，google提供了以下这些js框架/库的API：</p>
<ul>
<li><a href="http://wukangrui.net/documentation/index.html#jquery">jQuery</a></li>
<li><a href="http://wukangrui.net/documentation/index.html#jqueryUI">jQuery UI</a></li>
<li><a href="http://wukangrui.net/documentation/index.html#prototype">Prototype</a></li>
<li><a href="http://wukangrui.net/documentation/index.html#script_aculo_us">script.aculo.us</a></li>
<li><a href="http://wukangrui.net/documentation/index.html#mootools">MooTools</a></li>
<li><a href="http://wukangrui.net/documentation/index.html#dojo">Dojo</a></li>
</ul>
<p> </p>
<p>而且google的API中包括这些js框架/库的所有正式发布版。你可以根据自己的需要来选择。以jQuery为例，我们可以这样使用：</p>
<pre class="code"><span style="color: blue">&lt;</span><span style="color: #a31515">script </span><span style="color: red">type</span><span style="color: blue">="text/javascript"&gt;
    </span><span style="color: green">//&lt;![CDATA[
    //加载jQuery 1.3.2
    </span>google.load(<span style="color: #a31515">"jquery"</span>, <span style="color: #a31515">"1.3.2"</span>);
    <span style="color: green">//]]&gt;
</span><span style="color: blue">&lt;/</span><span style="color: #a31515">script</span><span style="color: blue">&gt;</span></pre>
<p>这样我们就从google的最近的CDN镜像上加载了jQuery 1.3.2版的js库，接下来就可以正常写js代码了。不过，即使是google的CDN镜像，下载也毕竟是需要时间的，万一代码库还没有下载完而浏览器已经解释到了下面的代码了怎么办？我们可以设定在js库加载完以后才开始执行js：</p>
<pre class="code"><span style="color: blue">&lt;</span><span style="color: #a31515">script </span><span style="color: red">type</span><span style="color: blue">="text/javascript"&gt;
    </span><span style="color: green">//&lt;![CDATA[
    //加载jQuery 1.3.2
    </span>google.load(<span style="color: #a31515">"jquery"</span>, <span style="color: #a31515">"1.3.2"</span>);
    <span style="color: green">//加载完成后执行代码
     </span>google.setOnLoadCallback(<span style="color: blue">function</span>() {
        $(<span style="color: #a31515">"body"</span>).html(<span style="color: #a31515">"Hello World!"</span>);
    });
    <span style="color: green">//]]&gt;
</span><span style="color: blue">&lt;/</span><span style="color: #a31515">script</span><span style="color: blue">&gt;</span></pre>
<p>更多有关google jsapi的相关介绍和文档，可以参考： <a href="http://code.google.com/intl/zh-CN/apis/ajaxlibs/">google AJAX 库 API</a> 。</p>
<h3  class="related_post_title">相关日志</h3><ul class="related_post"><li>2009-04-13 -- <a href="http://ofcss.com/2009/04/13/portable-interchangeable-jquery-based-tabs.html" title="简单、通用的JQuery Tab实现">简单、通用的JQuery Tab实现</a></li><li>2011-03-14 -- <a href="http://ofcss.com/2011/03/14/browser-rendering-optimizer-translation-extra.html" title="对《优化浏览器渲染》的补充【译】">对《优化浏览器渲染》的补充【译】</a></li><li>2010-06-09 -- <a href="http://ofcss.com/2010/06/09/my-rencent-booklist.html" title="最近的书单">最近的书单</a></li><li>2009-12-21 -- <a href="http://ofcss.com/2009/12/21/web-developer-understand-css-box-model.html" title="前台开发从头说起：理解css盒模型">前台开发从头说起：理解css盒模型</a></li><li>2009-12-16 -- <a href="http://ofcss.com/2009/12/16/web-developer-about-css-selector.html" title="前台开发从头说起：谈谈CSS选择符">前台开发从头说起：谈谈CSS选择符</a></li><li>2009-12-15 -- <a href="http://ofcss.com/2009/12/15/web-developer-from-web-standard.html" title="前台开发从头说起：关于web标准化">前台开发从头说起：关于web标准化</a></li><li>2009-06-22 -- <a href="http://ofcss.com/2009/06/22/whatever-hover-pseudo-class-without-javascript.html" title="Whatever:hover &#8211; 无需javascript让IE支持丰富伪类">Whatever:hover &#8211; 无需javascript让IE支持丰富伪类</a></li><li>2009-05-23 -- <a href="http://ofcss.com/2009/05/23/google-chrome-in-windows7-x64.html" title="windows 7 x64 上的Google Chrome">windows 7 x64 上的Google Chrome</a></li><li>2009-04-09 -- <a href="http://ofcss.com/2009/04/09/aspnetmvc-hands-on-labs-create-application.html" title="[翻译]ASP.NET MVC动手实验1-2：创建ASP.NET MVC应用">[翻译]ASP.NET MVC动手实验1-2：创建ASP.NET MVC应用</a></li><li>2006-04-16 -- <a href="http://ofcss.com/2006/04/16/special-use-of-css.html" title="CSS居然可以这样用">CSS居然可以这样用</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://ofcss.com/2009/04/05/use-google-ajaxlib-api.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>CSS居然可以这样用</title>
		<link>http://ofcss.com/2006/04/16/special-use-of-css.html</link>
		<comments>http://ofcss.com/2006/04/16/special-use-of-css.html#comments</comments>
		<pubDate>Sun, 16 Apr 2006 01:59:00 +0000</pubDate>
		<dc:creator>小李刀刀</dc:creator>
				<category><![CDATA[所谓技术]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[代码]]></category>

		<guid isPermaLink="false">http://wukangrui.net/?p=139</guid>
		<description><![CDATA[<p>睡觉前，NT给我发了两个网址，是老外的，那个家伙暴强，居然用纯CSS在页面上画出房子来，平面的、3D的，都画出来了。 看了一下他的CSS代码，一开始以为是这样用： .class{&#160;&#160;&#160; width:100px;&#160;&#160;&#160; width:60px;&#160;&#160;&#160; height:200px;&#160;&#160;&#160; height:160px;} 后来发现其实一些特殊图形的绘制跟上面的这个怪异的用法没关系，而是用边框来实现的，比如： &#160; &#160; &#160; 　　这三个形状除了Div，没有任何其它的元素或者文本，更不用说图形了。这是充分利用了border的显示特性。因为当我们同时设置四个方向的border时，浏览器自动会把交叉的部分叠加或者相互剪除。当border足够大的时候，我们就看到了上面这样的特殊效果。谁能想象到这是4个200像素的边框形成的效果呢？ 代码如下： &#160;&#60;div style=&#34;BORDER-RIGHT: #ff0 50px ridge; BORDER-TOP: #f00 50px ridge; FLOAT: left; MARGIN: 10px; BORDER-LEFT: #0f0 50px ridge; WIDTH: 1px; BORDER-BOTTOM: #00f 50px ridge; HEIGHT: 1px&#34;&#62;&#38;nbsp;&#60;/div&#62;&#60;div style=&#34;BORDER-RIGHT: #ff0 &#8230; <a href="http://ofcss.com/2006/04/16/special-use-of-css.html">Continue reading <span class="meta-nav">&#8594;</span></a></p>
]]></description>
			<content:encoded><![CDATA[<p>睡觉前，NT给我发了两个网址，是老外的，那个家伙暴强，居然用纯CSS在页面上画出房子来，平面的、3D的，都画出来了。</p>
<p>看了一下他的CSS代码，一开始以为是这样用：</p>
<p>.class{<br />&nbsp;&nbsp;&nbsp; width:100px;<br />&nbsp;&nbsp;&nbsp; width:60px;<br />&nbsp;&nbsp;&nbsp; height:200px;<br />&nbsp;&nbsp;&nbsp; height:160px;<br />}</p>
<p>后来发现其实一些特殊图形的绘制跟上面的这个怪异的用法没关系，而是用边框来实现的，比如：</p>
<div style="BORDER-RIGHT: #ff0 50px ridge; BORDER-TOP: #f00 50px ridge; FLOAT: left; MARGIN: 10px; BORDER-LEFT: #0f0 50px ridge; WIDTH: 1px; BORDER-BOTTOM: #00f 50px ridge; HEIGHT: 1px">&nbsp;</div>
<div style="BORDER-RIGHT: #ff0 50px groove; BORDER-TOP: #f00 50px groove; FLOAT: left; MARGIN: 10px; BORDER-LEFT: #0f0 50px groove; WIDTH: 1px; BORDER-BOTTOM: #00f 50px groove; HEIGHT: 1px">&nbsp;</div>
<div style="BORDER-RIGHT: #ff0 50px double; BORDER-TOP: #f00 50px double; FLOAT: left; MARGIN: 10px; BORDER-LEFT: #0f0 50px double; WIDTH: 1px; BORDER-BOTTOM: #00f 50px double; HEIGHT: 1px">&nbsp;</div>
<p style="CLEAR: both">　　这三个形状除了Div，没有任何其它的元素或者文本，更不用说图形了。这是充分利用了border的显示特性。因为当我们同时设置四个方向的border时，浏览器自动会把交叉的部分叠加或者相互剪除。当border足够大的时候，我们就看到了上面这样的特殊效果。谁能想象到这是4个200像素的边框形成的效果呢？</p>
<p style="CLEAR: both">代码如下：</p>
<p class="Code">&nbsp;&lt;div style=&quot;BORDER-RIGHT: #ff0 50px ridge; BORDER-TOP: #f00 50px ridge; FLOAT: left; MARGIN: 10px; BORDER-LEFT: #0f0 50px ridge; WIDTH: 1px; BORDER-BOTTOM: #00f 50px ridge; HEIGHT: 1px&quot;&gt;&amp;nbsp;&lt;/div&gt;<br />&lt;div style=&quot;BORDER-RIGHT: #ff0 50px groove; BORDER-TOP: #f00 50px groove; FLOAT: left; MARGIN: 10px; BORDER-LEFT: #0f0 50px groove; WIDTH: 1px; BORDER-BOTTOM: #00f 50px groove; HEIGHT: 1px&quot;&gt;&amp;nbsp;&lt;/div&gt;<br />&lt;div style=&quot;BORDER-RIGHT: #ff0 50px double; BORDER-TOP: #f00 50px double; FLOAT: left; MARGIN: 10px; BORDER-LEFT: #0f0 50px double; WIDTH: 1px; BORDER-BOTTOM: #00f 50px double; HEIGHT: 1px&quot;&gt;&amp;nbsp;&lt;/div&gt;</p>
<h3  class="related_post_title">相关日志</h3><ul class="related_post"><li>2009-04-13 -- <a href="http://ofcss.com/2009/04/13/portable-interchangeable-jquery-based-tabs.html" title="简单、通用的JQuery Tab实现">简单、通用的JQuery Tab实现</a></li><li>2006-03-28 -- <a href="http://ofcss.com/2006/03/28/simulate-window-in-center-with-css.html" title="CSS:模拟Windows窗口及DIV居中">CSS:模拟Windows窗口及DIV居中</a></li><li>2011-05-26 -- <a href="http://ofcss.com/2011/05/26/css-cascade-specificity.html" title="深入解析CSS样式层叠权重值">深入解析CSS样式层叠权重值</a></li><li>2011-03-20 -- <a href="http://ofcss.com/2011/03/20/misunderstood-of-overflow-hidden.html" title="容易被误解的overflow:hidden">容易被误解的overflow:hidden</a></li><li>2011-03-14 -- <a href="http://ofcss.com/2011/03/14/browser-rendering-optimizer-translation-extra.html" title="对《优化浏览器渲染》的补充【译】">对《优化浏览器渲染》的补充【译】</a></li><li>2011-03-12 -- <a href="http://ofcss.com/2011/03/12/flexible-two-column-layout-reloaded.html" title="自适应的多列图文混排改进">自适应的多列图文混排改进</a></li><li>2011-03-10 -- <a href="http://ofcss.com/2011/03/10/css-border-tricks-with-collapsed-boxes-translation.html" title="CSS边框实现&ldquo;无图化&rdquo;设计【译】">CSS边框实现&ldquo;无图化&rdquo;设计【译】</a></li><li>2011-03-04 -- <a href="http://ofcss.com/2011/03/04/the-hacktastic-zoom-fix-translation.html" title="在非IE浏览器中模拟zoom创建块级上下文【译】">在非IE浏览器中模拟zoom创建块级上下文【译】</a></li><li>2010-10-31 -- <a href="http://ofcss.com/2010/10/31/prevent-a-float-drop-in-ie6-translation.html" title="CSS技巧:如何避免IE6中的&quot;浮动下坠&quot;【译】">CSS技巧:如何避免IE6中的&quot;浮动下坠&quot;【译】</a></li><li>2010-10-30 -- <a href="http://ofcss.com/2010/10/30/bfc-element-margin-bug-in-webkit.html" title="webkit中BFC元素临近浮动元素时的边距bug">webkit中BFC元素临近浮动元素时的边距bug</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://ofcss.com/2006/04/16/special-use-of-css.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>CSS:模拟Windows窗口及DIV居中</title>
		<link>http://ofcss.com/2006/03/28/simulate-window-in-center-with-css.html</link>
		<comments>http://ofcss.com/2006/03/28/simulate-window-in-center-with-css.html#comments</comments>
		<pubDate>Mon, 27 Mar 2006 18:19:00 +0000</pubDate>
		<dc:creator>小李刀刀</dc:creator>
				<category><![CDATA[所谓技术]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[网页]]></category>

		<guid isPermaLink="false">http://wukangrui.net/?p=206</guid>
		<description><![CDATA[<p>　　利用CSS，尝试做了一个仿Windows窗口的横向纵向均居中的Div效果： 　　效果图如下： &#160; 　　以下是完整源代码： &#60;!DOCTYPE html PUBLIC &#34;-//W3C//DTD XHTML 1.0 Transitional//EN&#34; &#34;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&#34;&#62;&#60;html xmlns=&#34;http://www.w3.org/1999/xhtml&#34;&#62;&#60;head&#62;&#60;meta http-equiv=&#34;Content-Type&#34; content=&#34;text/html; charset=gb2312&#34; /&#62;&#60;title&#62;动易远程接口中转&#60;/title&#62;&#60;style type=&#34;text/css&#34;&#62;&#60;!&#8211;body {margin:0px;background:#ccc;height:auto;font: 9pt Tahoma;text-align:center;color: #000;}#outbox {position:absolute;z-index:888;top:50%;left:50%;margin:-120px 0 0 -200px;width:400px;height:auto;background:#D4D0C8;border:1px solid #ccc;}#title,#body,#bottom {border-top:1px solid #ddd;border-bottom:1px solid #999;border-right:1px solid #999;border-left:1px solid #ddd;}#title {line-height:28px;background:#c4c0c8;}#body {height:150px;text-align:left;padding:10px 10px;}#bottom &#8230; <a href="http://ofcss.com/2006/03/28/simulate-window-in-center-with-css.html">Continue reading <span class="meta-nav">&#8594;</span></a></p>
]]></description>
			<content:encoded><![CDATA[<p align="left">　　利用CSS，尝试做了一个仿Windows窗口的横向纵向均居中的Div效果：</p>
<p>　　效果图如下：</p>
<p align="center">&nbsp;<a href="/attachments/month_0611/200632811141934676.jpg" target="_blank"><img height="358" alt="点击查看大图" src="/attachments/month_0611/200632811141934676.jpg" width="500" border="0" /></a></p>
<p>　　以下是完整源代码：</p>
<div class="Code">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</a>&quot;&gt;<br />&lt;html xmlns=&quot;<a href="http://www.w3.org/1999/xhtml">http://www.w3.org/1999/xhtml</a>&quot;&gt;<br />&lt;head&gt;<br />&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=gb2312&quot; /&gt;<br />&lt;title&gt;动易远程接口中转&lt;/title&gt;<br />&lt;style type=&quot;text/css&quot;&gt;<br />&lt;!--<br />body {margin:0px;background:#ccc;height:auto;font: 9pt Tahoma;text-align:center;color: #000;}<br />#outbox {position:absolute;z-index:888;top:50%;left:50%;margin:-120px 0 0 -200px;width:400px;height:auto;background:#D4D0C8;border:1px solid #ccc;}<br />#title,#body,#bottom {border-top:1px solid #ddd;border-bottom:1px solid #999;border-right:1px solid #999;border-left:1px solid #ddd;}#title {line-height:28px;background:#c4c0c8;}<br />#body {height:150px;text-align:left;padding:10px 10px;}<br />#bottom {height:30px;padding:2px}<br />#input {top:0px;bottom:0px;}<br />--&gt;<br />&lt;/style&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;div id=&quot;outbox&quot;&gt;<br />&nbsp; &lt;div id=&quot;title&quot;&gt;正在进行通行证操作&lt;/div&gt;<br />&nbsp; &lt;div id=&quot;body&quot;&gt;<br />&nbsp;&nbsp;&nbsp; &lt;p&gt;正在进行远程数据同步，请勿刷新页面！&lt;/p&gt;<br />&nbsp;&nbsp;&nbsp; &lt;ul&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;li id=&quot;api&quot;&gt;论坛数据同步中&lt;/li&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;li id=&quot;powereasy&quot;&gt;本站操作已完成！&lt;/li&gt;<br />&nbsp;&nbsp;&nbsp; &lt;/ul&gt;<br />&nbsp; &lt;/div&gt;<br />&nbsp; &lt;div id=&quot;bottom&quot;&gt;<br />&nbsp;&nbsp;&nbsp; &lt;input onclick=&quot;location.href=&#39;index.asp&#39;&quot; id=&quot;confirm&quot; type=&quot;button&quot; value=&quot;点击返回&quot; style=&quot;display:none&quot; /&gt;<br />&nbsp; &lt;/div&gt;<br />&lt;/div&gt;<br />&lt;script type=&quot;text/javascript&quot; language=&quot;JavaScript&quot;&gt; document.getElementById(&quot;api&quot;).innerHTML = &quot;通行证操作成功!&quot;; document.getElementById(&quot;confirm&quot;).removeAttribute(&quot;style&quot;);&lt;/script&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;</div>
<h3  class="related_post_title">相关日志</h3><ul class="related_post"><li>2009-04-13 -- <a href="http://ofcss.com/2009/04/13/portable-interchangeable-jquery-based-tabs.html" title="简单、通用的JQuery Tab实现">简单、通用的JQuery Tab实现</a></li><li>2011-03-12 -- <a href="http://ofcss.com/2011/03/12/flexible-two-column-layout-reloaded.html" title="自适应的多列图文混排改进">自适应的多列图文混排改进</a></li><li>2010-10-30 -- <a href="http://ofcss.com/2010/10/30/bfc-element-margin-bug-in-webkit.html" title="webkit中BFC元素临近浮动元素时的边距bug">webkit中BFC元素临近浮动元素时的边距bug</a></li><li>2010-10-20 -- <a href="http://ofcss.com/2010/10/20/clearfix-reloaded-overflowhidden-demystified-translation.html" title="clearfix改良及overflow:hidden详解【译】">clearfix改良及overflow:hidden详解【译】</a></li><li>2009-12-21 -- <a href="http://ofcss.com/2009/12/21/web-developer-understand-css-box-model.html" title="前台开发从头说起：理解css盒模型">前台开发从头说起：理解css盒模型</a></li><li>2009-12-16 -- <a href="http://ofcss.com/2009/12/16/web-developer-about-css-selector.html" title="前台开发从头说起：谈谈CSS选择符">前台开发从头说起：谈谈CSS选择符</a></li><li>2009-12-15 -- <a href="http://ofcss.com/2009/12/15/web-developer-from-web-standard.html" title="前台开发从头说起：关于web标准化">前台开发从头说起：关于web标准化</a></li><li>2009-06-22 -- <a href="http://ofcss.com/2009/06/22/whatever-hover-pseudo-class-without-javascript.html" title="Whatever:hover &#8211; 无需javascript让IE支持丰富伪类">Whatever:hover &#8211; 无需javascript让IE支持丰富伪类</a></li><li>2009-04-16 -- <a href="http://ofcss.com/2009/04/16/best-practices-of-css-dropdown-menu.html" title="来自微软站点的纯CSS下拉菜单">来自微软站点的纯CSS下拉菜单</a></li><li>2006-04-16 -- <a href="http://ofcss.com/2006/04/16/special-use-of-css.html" title="CSS居然可以这样用">CSS居然可以这样用</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://ofcss.com/2006/03/28/simulate-window-in-center-with-css.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP中的数字和字符比较</title>
		<link>http://ofcss.com/2005/11/23/compare-interge-with-string-in-asp.html</link>
		<comments>http://ofcss.com/2005/11/23/compare-interge-with-string-in-asp.html#comments</comments>
		<pubDate>Wed, 23 Nov 2005 06:48:00 +0000</pubDate>
		<dc:creator>小李刀刀</dc:creator>
				<category><![CDATA[所谓技术]]></category>
		<category><![CDATA[ASP]]></category>
		<category><![CDATA[代码]]></category>

		<guid isPermaLink="false">http://wukangrui.net/?p=20</guid>
		<description><![CDATA[<p>昨晚和老迷聊天聊到很晚，说到一个把字符串转换为数字进行比较的问题。老迷说他喜欢保持字符串本身的类型，进行字符串的匹配比较，而不喜欢把字符串强制转换为数字进行比较。 一开始我不太明白这到底有什么区别，比如 a = “1&#8243; If a = 1 Then &#8216;Something End If 和 a = “1&#8243; If a = “1&#8243; Then &#8216;Something End If  在VB中，变量的数据类型默认是Variant，在必要的时候自动转换，例如上例第一种，由于表达式右边是数字，因此系统会自动将字符串变量a转换为数字类型，然后进行数字的比较。而第二种则没有转换类型这个过程。 这个从代码上看没有任何区别的比较过程，在执行时却差着一个步骤。这就是老迷关于他为什么更愿意保持字符串变量的字符串类型来进行比较的原因。 最简单的运用就是用户登录时，比如有个是否保存cookies的选项。通常是用下拉选择或者单选按钮，表单数据经过ASP程序读取之后，Request.Form(“cookies”)的值默认情况下是字符串类型的。我们往往是把它当成数字来用，有时候我们还习惯用 a = Cint(Request.Form(“cookies”))的方式在读取时进行转换，也或者不做转换，直接用 If a = 1 来判断。 实际上不管用哪种方法，都离不开一个转换的过程，而且为了避免 Cint 函数出错，我们往往还需要在前面增加一个IsNumeric的验证，这样一来，多出来的就不只是一个步骤了。 而如果我们直接把Request.Form(“cookies”)作为字符串考虑，我们只需要一行代码即可： &#8230; <a href="http://ofcss.com/2005/11/23/compare-interge-with-string-in-asp.html">Continue reading <span class="meta-nav">&#8594;</span></a></p>
]]></description>
			<content:encoded><![CDATA[<p>昨晚和老迷聊天聊到很晚，说到一个把字符串转换为数字进行比较的问题。老迷说他喜欢保持字符串本身的类型，进行字符串的匹配比较，而不喜欢把字符串强制转换为数字进行比较。</p>
<p>一开始我不太明白这到底有什么区别，比如</p>
<pre class="code">a = <span style="color: #a31515;">"1"
</span><span style="color: blue;">If </span>a = <span style="color: #a31515;">1 </span><span style="color: blue;">Then
     </span><span style="color: green;">'Something
</span><span style="color: blue;">End If</span></pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>和</p>
<pre class="code">a = <span style="color: #a31515;">"1"
</span><span style="color: blue;">If </span>a = <span style="color: #a31515;">"1" </span><span style="color: blue;">Then
     </span><span style="color: green;">'Something
</span><span style="color: blue;">End If</span>
<span id="more-20"></span></pre>
<p> 在VB中，变量的数据类型默认是Variant，在必要的时候自动转换，例如上例第一种，由于表达式右边是数字，因此系统会自动将字符串变量a转换为数字类型，然后进行数字的比较。而第二种则没有转换类型这个过程。</p>
<p>这个从代码上看没有任何区别的比较过程，在执行时却差着一个步骤。这就是老迷关于他为什么更愿意保持字符串变量的字符串类型来进行比较的原因。</p>
<p>最简单的运用就是用户登录时，比如有个是否保存cookies的选项。通常是用下拉选择或者单选按钮，表单数据经过ASP程序读取之后，Request.Form("cookies")的值默认情况下是字符串类型的。我们往往是把它当成数字来用，有时候我们还习惯用 a = Cint(Request.Form("cookies"))的方式在读取时进行转换，也或者不做转换，直接用 If a = 1 来判断。</p>
<p>实际上不管用哪种方法，都离不开一个转换的过程，而且为了避免 Cint 函数出错，我们往往还需要在前面增加一个IsNumeric的验证，这样一来，多出来的就不只是一个步骤了。</p>
<p>而如果我们直接把Request.Form("cookies")作为字符串考虑，我们只需要一行代码即可：</p>
<pre class="code"><span style="color: blue;">If </span>Request.Form(<span style="color: #a31515;">"cookies"</span>) &lt;&gt; <span style="color: #a31515;">"" </span><span style="color: blue;">and </span>a = <span style="color: #a31515;">"1" </span><span style="color: blue;">Then</span></pre>
<p>就同时完成了数据有效性验证和比较。</p>
<p>这个很小的细节，在实际编程中用到的地方非常多，每个地方都多两个步骤，那的确在性能上就是比较低大的浪费了。</p>
<h3  class="related_post_title">相关日志</h3><ul class="related_post"><li>2005-11-18 -- <a href="http://ofcss.com/2005/11/18/add-trackback-to-pjblog.html" title="用ASP为blog程序编写Trackback功能">用ASP为blog程序编写Trackback功能</a></li><li>2009-04-13 -- <a href="http://ofcss.com/2009/04/13/portable-interchangeable-jquery-based-tabs.html" title="简单、通用的JQuery Tab实现">简单、通用的JQuery Tab实现</a></li><li>2009-04-05 -- <a href="http://ofcss.com/2009/04/05/use-google-ajaxlib-api.html" title="使用Google AjaxLib API托管的js库">使用Google AjaxLib API托管的js库</a></li><li>2008-09-19 -- <a href="http://ofcss.com/2008/09/19/bug-about-search-engine-of-oblog.html" title="Oblog检测搜索引擎的一个问题">Oblog检测搜索引擎的一个问题</a></li><li>2008-06-22 -- <a href="http://ofcss.com/2008/06/22/api-bug-in-powereasy-siteweaver-part2.html" title="动易SW中的一个严重但不影响使用的bug（二）">动易SW中的一个严重但不影响使用的bug（二）</a></li><li>2008-06-18 -- <a href="http://ofcss.com/2008/06/18/api-bug-in-powereasy-siteweaver-part1.html" title="动易SW中的一个严重但不影响使用的bug(一)">动易SW中的一个严重但不影响使用的bug(一)</a></li><li>2008-06-04 -- <a href="http://ofcss.com/2008/06/04/unix-timestamp-in-asp.html" title="在ASP中实现UNIX时间戳">在ASP中实现UNIX时间戳</a></li><li>2008-05-23 -- <a href="http://ofcss.com/2008/05/23/disadvantages-of-discuz-ucenter.html" title="给UCenter的拥蹩们泼点冷水">给UCenter的拥蹩们泼点冷水</a></li><li>2008-04-14 -- <a href="http://ofcss.com/2008/04/14/pjblog-guestbook-plus.html" title="PJBlog自带留言簿增强版改进">PJBlog自带留言簿增强版改进</a></li><li>2006-04-16 -- <a href="http://ofcss.com/2006/04/16/special-use-of-css.html" title="CSS居然可以这样用">CSS居然可以这样用</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://ofcss.com/2005/11/23/compare-interge-with-string-in-asp.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>用ASP为blog程序编写Trackback功能</title>
		<link>http://ofcss.com/2005/11/18/add-trackback-to-pjblog.html</link>
		<comments>http://ofcss.com/2005/11/18/add-trackback-to-pjblog.html#comments</comments>
		<pubDate>Fri, 18 Nov 2005 12:56:00 +0000</pubDate>
		<dc:creator>小李刀刀</dc:creator>
				<category><![CDATA[所谓技术]]></category>
		<category><![CDATA[ASP]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[博客]]></category>

		<guid isPermaLink="false">http://wukangrui.net/?p=16</guid>
		<description><![CDATA[<p>　　作为所谓的Blog三大特征之一的Trackback Ping，在网络上并没有一个真正的规范，它实际上最早是在Moveable发明并开始运用的一种技术，与另外两项被广泛认为是Blog最主要特征的RSS和Permalink相比，RSS本质上是是一种遵循W3C RDF规范的XML格式，Permalink是一种非常通用的静态地址技术，而Trackback Ping目前为止仅仅是在blog程序中得到运用，除了Moveable的一份技术规范文档外，也没有什么权威的标准，尤其在国内，众多blog程序有的支持有的不支持，有的有限支持，甚至还有因标准不一致而不能互相通信的(参见《blog is dead(blog已死)》)。 &#160;　　但是作为开发人员，我们不需要去讨论或者争论Trackback是不是死了、它会不会带来恶意Spam这些问题，就像垃圾邮件的存在，并不影响电子邮件的技术进步和使用一样。对于开发人员来讲，既然Trackback被认为是Blog的三大技术之一，而且blog程序的用户有这种需求，那我们在开发blog的时候，就应该包含这项技术。而且，我们应该尽可能地使我们开发的技术符合标准，或者规范，至少让它发挥作用。 &#160;　　Trackback Ping是由Moveable Type发明的规范，那么在没有更权威的标准之前，我们使用这项技术，当然应该以他们的规范为准，这里是他们的Trackback技术规范文档：http://www.movabletype.org/docs/mttrackback.html。 &#160;　　Trackback的完整实现至少包含两个方面，其一：客户端发送Trackback Ping；其二：服务器端接收和处理Trackback Ping，并向客户端返回处理结果。然后，根据需要我们可以考虑在客户端接收或者不接收，处理或者不处理返回的信息。下面是具体的代码： &#8216;#函数名：Trackback &#8216;#作 用：向指定的URL发送Trackback Ping，并根据服务器端返回的信息，提示用户处理情况。 &#8216;#参 数： &#8216;#RemoteURL = 目标URL，也即所引用的blog所提供的引用地址 &#8216;#MyBlogURL = 我的Blog的URL &#8216;#MyBlogName = 我的blog站点名称 &#8216;#MyBlogTitle = 当前这篇blog的标题 &#8216;#MyBlogExcerpt = 当前这篇blog的摘要 &#8216;#返回结果：字符串，以&#8220;&#124;&#8221;分隔，第一部分为数字，0表示成功，1表示有错；第二部分是具体信息。 Function Trackback(RemoteURL,MyBlogURL,MyBlogName,MyBlogTitle,MyBlogExcerpt) Dim objXMLHttp,objXML,intStat,strMessage,strPostInfo &#8216;对参数进行必要的处理，比如URLEncode之类 &#8230; <a href="http://ofcss.com/2005/11/18/add-trackback-to-pjblog.html">Continue reading <span class="meta-nav">&#8594;</span></a></p>
]]></description>
			<content:encoded><![CDATA[<p>　　作为所谓的Blog三大特征之一的Trackback Ping，在网络上并没有一个真正的规范，它实际上最早是在Moveable发明并开始运用的一种技术，与另外两项被广泛认为是Blog最主要特征的RSS和Permalink相比，RSS本质上是是一种遵循W3C RDF规范的XML格式，Permalink是一种非常通用的静态地址技术，而Trackback Ping目前为止仅仅是在blog程序中得到运用，除了Moveable的一份技术规范文档外，也没有什么权威的标准，尤其在国内，众多blog程序有的支持有的不支持，有的有限支持，甚至还有因标准不一致而不能互相通信的(参见<a target="_blank" href="http://blog.igooi.com/archive/2005/10/28/6716.aspx">《blog is dead(blog已死)》</a>)。<span id="more-16"></span></p>
<p>&nbsp;　　但是作为开发人员，我们不需要去讨论或者争论Trackback是不是死了、它会不会带来恶意Spam这些问题，就像垃圾邮件的存在，并不影响电子邮件的技术进步和使用一样。对于开发人员来讲，既然Trackback被认为是Blog的三大技术之一，而且blog程序的用户有这种需求，那我们在开发blog的时候，就应该包含这项技术。而且，我们应该尽可能地使我们开发的技术符合标准，或者规范，至少让它发挥作用。</p>
<p>&nbsp;　　Trackback Ping是由Moveable Type发明的规范，那么在没有更权威的标准之前，我们使用这项技术，当然应该以他们的规范为准，这里是他们的Trackback技术规范文档：<a href="http://www.movabletype.org/docs/mttrackback.html">http://www.movabletype.org/docs/mttrackback.html</a>。</p>
<p>&nbsp;　　Trackback的完整实现至少包含两个方面，其一：客户端发送Trackback Ping；其二：服务器端接收和处理Trackback Ping，并向客户端返回处理结果。然后，根据需要我们可以考虑在客户端接收或者不接收，处理或者不处理返回的信息。下面是具体的代码：</p>
<pre class="code"><span style="color: green">'#函数名：Trackback
'#作 用：向指定的URL发送Trackback Ping，并根据服务器端返回的信息，提示用户处理情况。
'#参 数：
'#RemoteURL = 目标URL，也即所引用的blog所提供的引用地址
'#MyBlogURL = 我的Blog的URL
'#MyBlogName = 我的blog站点名称
'#MyBlogTitle = 当前这篇blog的标题
'#MyBlogExcerpt = 当前这篇blog的摘要
'#返回结果：字符串，以&ldquo;|&rdquo;分隔，第一部分为数字，0表示成功，1表示有错；第二部分是具体信息。 

</span><span style="color: blue">Function </span>Trackback(RemoteURL,MyBlogURL,MyBlogName,MyBlogTitle,MyBlogExcerpt)
    <span style="color: blue">Dim </span>objXMLHttp,objXML,intStat,strMessage,strPostInfo
    <span style="color: green">'对参数进行必要的处理，比如URLEncode之类
    </span>MyBlogURL = Server.URLEncode(MyBlogURL)
    MyBlogName = Server.URLEncode(MyBlogName)
    MyBlogTitle = Server.URLEncode(MyBlogTitle)
    MyBlogExcerpt = Server.URLEncode(MyBlogExcerpt)
    <span style="color: green">'构造要发送的请求内容
    </span>strPostInfo = <span style="color: #a31515">&quot;title=&quot; </span>&amp; MyBlogTitle
    strPostInfo = strPostInfo &amp; <span style="color: #a31515">&quot;&amp;url=&quot; </span>&amp; MyBlogURL
    strPostInfo = strPostInfo &amp; <span style="color: #a31515">&quot;&amp;excerpt=&quot; </span>&amp; MyBlogExcerpt
    strPostInfo = strPostInfo &amp; <span style="color: #a31515">&quot;&amp;blog_name=&quot; </span>&amp; MyBlogName
    <span style="color: green">'创建对象
    </span><span style="color: blue">Set </span>objXMLHttp = Server.CreateObject(<span style="color: #a31515">&quot;MSXML2.ServerXMLHTTP&quot;</span>)
    <span style="color: blue">Set </span>objXML = Server.CreateObject(<span style="color: #a31515">&quot;Microsoft.XMLDOM&quot;</span>)
    <span style="color: green">'以post方式打开XMLHTTP对象
    </span>objXMLHttp.Open <span style="color: #a31515">&quot;POST&quot;</span>, RemoteURL, <span style="color: blue">false
    </span><span style="color: green">'发送请求内容，判断发送情况，并进行处理
    </span><span style="color: blue">On Error Resume Next
    </span>objXMLHttp.Send strPostInfo
    <span style="color: blue">If </span>Err.Number &lt;&gt; 0 <span style="color: blue">Then
        </span>Trackback = <span style="color: #a31515">&quot;1|TrackBack错误：无法连接服务器&quot;
    </span><span style="color: blue">Else
        If </span>(objXMLHttp.readyState &lt;&gt; 4) <span style="color: blue">or </span>(objXMLHttp.Status &lt;&gt; 200) <span style="color: blue">Then
            </span>objXMLHttp.Abort Trackback = <span style="color: #a31515">&quot;1|Trackback超时&quot;
        </span><span style="color: blue">Else
            </span>objXML.async = <span style="color: blue">false
            </span>objXML.load(objXMLHttp.responseXML)
            <span style="color: blue">If </span>objXML.parseError.errorCode &lt;&gt; 0 <span style="color: blue">Then
                </span>Trackback = <span style="color: #a31515">&quot;1|TrackBack响应解析错误&quot;
            </span><span style="color: blue">Else
                If </span>objXML.getElementsByTagName(<span style="color: #a31515">&quot;error&quot;</span>)(0).Text=<span style="color: #a31515">&quot;0&quot; </span><span style="color: blue">Then
                    </span>Trackback = <span style="color: #a31515">&quot;0|Trackback成功&quot;
                </span><span style="color: blue">Else
                    </span>Trackback = <span style="color: #a31515">&quot;1|Trackback错误：&quot;</span>&amp;objXML.getElementsByTagName(<span style="color: #a31515">&quot;message&quot;</span>)(0).Text
                <span style="color: blue">End If
            End If
        End If
    End If
    </span><span style="color: green">'释放对象
    </span><span style="color: blue">Set </span>objXMLHTTP = <span style="color: blue">Nothing
    Set </span>objDom = <span style="color: blue">Nothing
End Function</span></pre>
<pre class="code"><span style="color: green">'#过程名：DealRequest
'#作 用：接收和处理客户端发来的Trackback Ping
'#参 数：无
</span><span style="color: blue">Sub </span>DealRequest()
    <span style="color: blue">Dim </span>blog_id,tbTitle,tbName,tbURL,tbExcerpt,stat 

    <span style="color: green">'从所请求的URL中提取所引用的blogID，以便从数据库中检索对应的blog
    '这个参数根据你所写的blog程序提供的Trackback地址形式而定
    '这里我们假设这个参数为&ldquo;id&rdquo; 

    </span>blog_id = Request.QueryString(<span style="color: #a31515">&quot;id&quot;</span>) 

    <span style="color: green">'读取出客户端传来的请求中的每个部分
    '注意，这里没有对以Get方式提交的请求作出处理
    '因为2003年以后根据技术规范已经不再接受Get方式的请求
    '如果希望增强兼容性，可以加上对Get方式的请求的处理 

    </span>tbTitle = Request.Form(<span style="color: #a31515">&quot;title&quot;</span>)
    tbName = Request.Form(<span style="color: #a31515">&quot;blog_name&quot;</span>)
    tbURL = Request.Form(<span style="color: #a31515">&quot;url&quot;</span>)
    tbExcerpt = Request.Form(<span style="color: #a31515">&quot;excerpt&quot;</span>) 

    <span style="color: green">'检索数据库中id为blog_id的blog数据和url为tbURL的Trackback记录
    '如果blog不存在，或者Trackback记录已存在，向客户端返回相应的出错说明
    '我们这里调用一个进程tbResponseXML来完成这项工作
    '调用时，以参数stat=0[1,2]分别表示成功、日志不存在和记录已存在 

    </span>tbResponseXML(stat,<span style="color: #a31515">&quot;utf-8&quot;</span>) 

    <span style="color: green">'如果是成功，还应当做好更新TrackBack记录和相关blog引用数的工作
</span><span style="color: blue">End Sub</span></pre>
<pre class="code"><span style="color: green">'#过程名：tbResponseXML
'#作 用：接收和处理客户端发来的Trackback Ping
'#参 数：
'#stat：错误代码，0=成功；1=日志不存在；2=Trackback记录已存在
'#strCharset：要返回的XML的编码 

</span><span style="color: blue">Sub </span>tbResponseXML(stat,strCharset)
    Response.ContentType = <span style="color: #a31515">&quot;text/xml&quot;
    </span>Response.Charset = strCharset
    Response.Write <span style="color: #a31515">&quot;&lt;?xml version=&quot;&quot;1.0&quot; </span>encoding=<span style="color: #a31515">&quot;&quot;&quot; &amp; strCharset &amp; &quot;&quot;&quot;</span>?&gt;&quot;
    Response.Write <span style="color: #a31515">&quot;&lt;error&gt;&quot; </span>&amp; stat &amp; <span style="color: #a31515">&quot;&lt;/error&gt;&quot;
    </span><span style="color: blue">If </span>stat = 1 <span style="color: blue">Then
        </span>Response.Write <span style="color: #a31515">&quot;&lt;message&gt;The blog you're trackbacking isn't exist!&lt;/message&gt;&quot;
    </span><span style="color: blue">ElseIf </span>stat = 2 <span style="color: blue">Then
        </span>Response.Write <span style="color: #a31515">&quot;&lt;message&gt;You can not Trackback a blog twice from the same URL.&lt;/message&gt;&quot;
    </span><span style="color: blue">End If
End Sub</span></pre>
<h3  class="related_post_title">相关日志</h3><ul class="related_post"><li>2008-09-19 -- <a href="http://ofcss.com/2008/09/19/bug-about-search-engine-of-oblog.html" title="Oblog检测搜索引擎的一个问题">Oblog检测搜索引擎的一个问题</a></li><li>2005-11-24 -- <a href="http://ofcss.com/2005/11/24/goole-map-creator-for-my-blog.html" title="为我的blog写的Google地图生成器">为我的blog写的Google地图生成器</a></li><li>2005-11-23 -- <a href="http://ofcss.com/2005/11/23/compare-interge-with-string-in-asp.html" title="ASP中的数字和字符比较">ASP中的数字和字符比较</a></li><li>2009-04-13 -- <a href="http://ofcss.com/2009/04/13/portable-interchangeable-jquery-based-tabs.html" title="简单、通用的JQuery Tab实现">简单、通用的JQuery Tab实现</a></li><li>2009-04-05 -- <a href="http://ofcss.com/2009/04/05/use-google-ajaxlib-api.html" title="使用Google AjaxLib API托管的js库">使用Google AjaxLib API托管的js库</a></li><li>2008-06-22 -- <a href="http://ofcss.com/2008/06/22/api-bug-in-powereasy-siteweaver-part2.html" title="动易SW中的一个严重但不影响使用的bug（二）">动易SW中的一个严重但不影响使用的bug（二）</a></li><li>2008-06-18 -- <a href="http://ofcss.com/2008/06/18/api-bug-in-powereasy-siteweaver-part1.html" title="动易SW中的一个严重但不影响使用的bug(一)">动易SW中的一个严重但不影响使用的bug(一)</a></li><li>2008-06-14 -- <a href="http://ofcss.com/2008/06/14/june-15-start-use-new-domain.html" title="615：新域名正式启用">615：新域名正式启用</a></li><li>2008-06-04 -- <a href="http://ofcss.com/2008/06/04/unix-timestamp-in-asp.html" title="在ASP中实现UNIX时间戳">在ASP中实现UNIX时间戳</a></li><li>2008-05-23 -- <a href="http://ofcss.com/2008/05/23/disadvantages-of-discuz-ucenter.html" title="给UCenter的拥蹩们泼点冷水">给UCenter的拥蹩们泼点冷水</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://ofcss.com/2005/11/18/add-trackback-to-pjblog.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>酷热&amp;加密方式的冲突</title>
		<link>http://ofcss.com/2005/06/22/death-hot-day.html</link>
		<comments>http://ofcss.com/2005/06/22/death-hot-day.html#comments</comments>
		<pubDate>Wed, 22 Jun 2005 21:33:00 +0000</pubDate>
		<dc:creator>小李刀刀</dc:creator>
				<category><![CDATA[乱七八糟]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[动易]]></category>
		<category><![CDATA[日记]]></category>

		<guid isPermaLink="false">http://wukangrui.net/?p=5</guid>
		<description><![CDATA[<p>　　凌晨3点了，还是热得不得了，我坐在床上，只有手指在动，照样浑身冒汗。每隔几分钟就要停下来用纸巾擦试手腕以及键盘的腕托部分。本来接口的规范在写动易和动网的接口的时候已经确定下来了。在作Leadbbs接口的时候临时又发现了问题：Leadbbs采用的是32位加密方法。 　　按照原来的设想，动易完成注册后，会把用户的最基本资料传递给目标程序，其中包括了3项加密信息：用户密码、密码提示问题的答案和网站的私钥。在Leadbbs这里遇到了密码加密位数不够的问题。于是重新修改，把密码改为32位加密传递，在动易、动网的接口中，收到以后，自动将32位加密的数据改为16位加密数据。问题又来了：假如遇到了只支持16位加密的程序怎么办？像bbsxp的md5函数好像就没有位数选项（印象中是这样，还没有细看bbsxp），必须得有一个通用的办法。 　　动易和动网是整合的重头戏，幸好这两套程序都同时支持16位和32位加密，好吧，那就把所有加密传递的信息都采用32位加密吧，在动易和动网的接口程序中，又重新加上了语句，判断传递过来的数据加密长度，然后进行截取处理。 　　代码都处理完只用了半个小时不到的时间，腕托的位置已经全是汗水了&#8230;&#8230;温度实在太高了，我要去水房凉快一下了！ 　　北京的夏天实在是太让人讨厌了&#8230;&#8230;让我开始对云南老家无比怀念起来&#8230;&#8230; 相关日志2005-06-12 &#8212; 6月13日：机场任务2009-08-28 &#8212; 突如其来的暴雨2009-04-13 &#8212; 简单、通用的JQuery Tab实现2009-04-05 &#8212; 使用Google AjaxLib API托管的js库2008-06-26 &#8212; 动易SiteFactory目录权限详解2008-06-22 &#8212; 动易SW中的一个严重但不影响使用的bug（二）2008-06-22 &#8212; SiteFactory面向的是高端，但是应该更高端2008-06-22 &#8212; 静态页面生成的思考2008-06-18 &#8212; 动易SW中的一个严重但不影响使用的bug(一)2008-05-23 &#8212; 给UCenter的拥蹩们泼点冷水</p>
]]></description>
			<content:encoded><![CDATA[<p>　　凌晨3点了，还是热得不得了，我坐在床上，只有手指在动，照样浑身冒汗。每隔几分钟就要停下来用纸巾擦试手腕以及键盘的腕托部分。本来接口的规范在写动易和动网的接口的时候已经确定下来了。在作Leadbbs接口的时候临时又发现了问题：Leadbbs采用的是32位加密方法。<span id="more-5"></span></p>
<p>　　按照原来的设想，动易完成注册后，会把用户的最基本资料传递给目标程序，其中包括了3项加密信息：用户密码、密码提示问题的答案和网站的私钥。在Leadbbs这里遇到了密码加密位数不够的问题。于是重新修改，把密码改为32位加密传递，在动易、动网的接口中，收到以后，自动将32位加密的数据改为16位加密数据。问题又来了：假如遇到了只支持16位加密的程序怎么办？像bbsxp的md5函数好像就没有位数选项（印象中是这样，还没有细看bbsxp），必须得有一个通用的办法。</p>
<p>　　动易和动网是整合的重头戏，幸好这两套程序都同时支持16位和32位加密，好吧，那就把所有加密传递的信息都采用32位加密吧，在动易和动网的接口程序中，又重新加上了语句，判断传递过来的数据加密长度，然后进行截取处理。</p>
<p>　　代码都处理完只用了半个小时不到的时间，腕托的位置已经全是汗水了&hellip;&hellip;温度实在太高了，我要去水房凉快一下了！</p>
<p>　　北京的夏天实在是太让人讨厌了&hellip;&hellip;让我开始对云南老家无比怀念起来&hellip;&hellip;</p>
<h3  class="related_post_title">相关日志</h3><ul class="related_post"><li>2005-06-12 -- <a href="http://ofcss.com/2005/06/12/july-13th-task-in-airport.html" title="6月13日：机场任务">6月13日：机场任务</a></li><li>2009-08-28 -- <a href="http://ofcss.com/2009/08/28/sudden-storm.html" title="突如其来的暴雨">突如其来的暴雨</a></li><li>2009-04-13 -- <a href="http://ofcss.com/2009/04/13/portable-interchangeable-jquery-based-tabs.html" title="简单、通用的JQuery Tab实现">简单、通用的JQuery Tab实现</a></li><li>2009-04-05 -- <a href="http://ofcss.com/2009/04/05/use-google-ajaxlib-api.html" title="使用Google AjaxLib API托管的js库">使用Google AjaxLib API托管的js库</a></li><li>2008-06-26 -- <a href="http://ofcss.com/2008/06/26/directory-permissions-detail-of-powereasy.html" title="动易SiteFactory目录权限详解">动易SiteFactory目录权限详解</a></li><li>2008-06-22 -- <a href="http://ofcss.com/2008/06/22/api-bug-in-powereasy-siteweaver-part2.html" title="动易SW中的一个严重但不影响使用的bug（二）">动易SW中的一个严重但不影响使用的bug（二）</a></li><li>2008-06-22 -- <a href="http://ofcss.com/2008/06/22/advancd-suggestions-to-sitefactory.html" title="SiteFactory面向的是高端，但是应该更高端">SiteFactory面向的是高端，但是应该更高端</a></li><li>2008-06-22 -- <a href="http://ofcss.com/2008/06/22/thinking-about-html-page-creating.html" title="静态页面生成的思考">静态页面生成的思考</a></li><li>2008-06-18 -- <a href="http://ofcss.com/2008/06/18/api-bug-in-powereasy-siteweaver-part1.html" title="动易SW中的一个严重但不影响使用的bug(一)">动易SW中的一个严重但不影响使用的bug(一)</a></li><li>2008-05-23 -- <a href="http://ofcss.com/2008/05/23/disadvantages-of-discuz-ucenter.html" title="给UCenter的拥蹩们泼点冷水">给UCenter的拥蹩们泼点冷水</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://ofcss.com/2005/06/22/death-hot-day.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

