[转]小试牛刀——一篇jQuery小教程

系统 2154 0

小试牛刀——一篇jQuery小教程

作者: realazy

文章来源: http://realazy.org/blog/2006/08/31/small-jquery-tutorial/

如果你还不了解什么是jQuery,那么先参考这篇文章: http://realazy.org/blog/2006/08/27/jquery-new-wave-javascript/

文章正式开始:

个小教程,以期能让大家对 jQuery 有所了解,甚至喜欢上它(请不要怪我)。

不废话,先说明我们的目的。我们知道,当代浏览器(modern browsers)的文本框的聚焦(focus)样式可以通过CSS的伪类 :focus 来设置。假设我们有这么一段代码:

      <codce></codce><form>
	<dl>
		<dt>Name: <dt>
		<dd><input type=”text” /></dd>
		<dt>Password: <dt>
		<dd><input type=”password” /></dd>
		<dt>Textarea: <dt>
		<dd><textarea></textarea></dd>
	</dl>
</form>
    

则我们这样的CSS就可以搞定focus样式:

      <codce></codce>input[type=”text”]:focus, input[type=”password”]:focus, textarea:focus { border: 1px solid #f00; background: #fcc; }
    

简单不过,对不?你可以拿任何一款当代浏览器来测试(Firefox, Safari, IE7): http://realazy.org/lab/jquery/tut/form_hover_step1.html 。IE6? 呵呵,这就是本篇教程的目的所在,没错,既然IE不支持 :focus ,我们只能 Using DOM Scripting to Plug the Holes in CSS ,不过我们用jQuery来实现。

先来看看jQuery的工作方式。jQuery使用美元符号 $ 来返回一个jQuery对象,然后我们就可以使用jQuery提供的API(接口。很多很多很实用,赶紧参考 http://screencasts.visualjquery.com/visual/docs-redux.xml )进行操作了。

我们都不懂程序,对,我假设你跟我这样,只是了解一些最基本的语法(对不起大虾了,高手不要自扁身份)。既然我们不懂,我们就用CSS的方式来思维。

首先我们要从DOM中获得 type="text" , type="password" input textarea 。对,我们伟大的美金出场了,哦,是美元符号。参考 http://proj.jquery.com/docs/Base/Expression/CSS/ ,我们知道,我们可以这样选择到他们:

      <codce></codce>$(”input[@type=’text’], input[@type=’password’], textarea”)
    

选中它们以后呢?我们就要靠事件(event)来处理了。 :focus 对应的的事件是 onfocus ,然而jQuery讨厌on,于是就是 focus 了,多好 (参考 http://proj.jquery.com/docs/EventModule/ )。于是我们知道我们该这么做:

      <codce></codce>$(”input[@type=’text’], input[@type=’password’], textarea”)
      
        .focus()
      
      ;
    

嘿嘿,我们已经迈出一大步了!我们要继续告诉 focus 该做些什么。在jQuery中,我们通常需要一些匿名函数来帮我们干些事情,不理解不打紧,让我们继续:

      <codce></codce>$(”input[@type=’text’], input[@type=’password’], textarea”).focus( 
      
        function(){ }
      
       );
    

我们的目的是什么?对,是给聚焦的文本框加上样式。jQuery有一个 css (prop) 的API,参考前面的CSS,我们可以这么写:

      <codce></codce>css({background:”#fcc”, border:”1px solid #f00″})
    

bingo! 离成功仅一步之遥。我假设你知道,返回对象自身使用 this 。在jQuery中,返回自身当然也是this, 但是,需要返回的对象还是jQuery对象,我们还必须使用美元符号。所以是 $(this) 。那么:

      <codce></codce>$(”input[@type=’text’], input[@type=’password’], textarea”).focus( 
      
        function(){ $(this). css({background:”#fcc”, border:”1px solid #f00″})
      
      } );
    

That’s it! 然后我们该怎么执行这段代码呢? 我们知道有一个 body onload="" 可以用,也知道有一个 window.onload 可以用,但jQuery提供了一个更佳的方案,让我们可以进一步分离结构与交互。

      <codce></codce>$(document).ready(function(){
    // Your code here…
});
    

所以我们只需将我们的代码放到里面去:

      <codce></codce>$(document).ready(function(){
    $(”input[@type=’text’], input[@type=’password’], textarea”).focus( function(){ $(this). css({background:”#fcc”, border:”1px solid #f00″})} );
});
    

呵呵……貌似成功了。等等,我们要送佛送到西天,好人做到底……在上面的交互中,只有聚焦的情况,那么失焦的时候呢?嗯,我们不要想当然,失焦?那么聚焦的样式就自动 清楚 清除了嘛~不会的,除非我们明确告诉它。依瓢画葫芦:

      <codce></codce>$(this).blur(function(){$(this).css({background: “transparent”, border: “1px solid #ccc”})})
    

嗯,说到jQuery的强大之处了,jQuery对象可以接受无数个函数回调/消息/方法(哪一种是正确说法,请高手指教),也就是传说中的 Chainability 。也就是说我们不必要分两行写,一气呵成:

      <codce></codce>$(document).ready(function(){
    $(”input[@type=’text’], input[@type=’password’], textarea”).focus(function(){$(this).css({background:”#fcc”, border:”1px solid #f00″})})
      
        .blur(function(){$(this).css({background: “transparent”, border: “1px solid #ccc”})})
      
      ;
})

    

啊呵,又一次貌似完成……又等一等,我们只需要针对IE啊,其他浏览器都可以使用CSS来实现,我们何苦要用JS来降低它们的处理效率呢,所以,我们用了jQuery自带的定义:

      <codce></codce>$(document).ready(function(){
	
      
        if ($.browser.msie){
      
      
		$(”input[@type=’text’], input[@type=’password’], textarea”).focus(function(){$(this).css({background:”#fcc”, border:”1px solid #f00″})}).blur(function(){$(this).css({background: “transparent”, border: “1px solid #ccc”})});
		
      
        }
      
      
	})
    

耶!我们真的完成了!嗯哪,要判断浏览器版本?似乎jQuery没有提供,但可以看看这个jQuery插件(plugin): jQBrowser . 嗯嗯,似乎忘了跟大家说,jQuery还拥有许多超强的插件!有时间我整理几个出来奉献给大家。

对,看看我们这一步的成果: http://realazy.org/lab/jquery/tut/form_hover_step2.html ,一定记得用IE6查看。

貌似又完成了一次(汗,前边不是说我们真的完成了么),不!大家看得爽的时候还记得我是做什么的吗?对对对,是 Web标准 !Web标准提倡什么?结构,表现,交互相分离啊,我们把样式写到了JS里边,相信这不是好事情。难不倒我们jQuery的!我们换种思路,我们把样式在一个 class 里定义好,在 focus 的时候加上的这个 class blur 的时候去掉这个 class 不就OK了吗?聪明……jQuery相应的API是 addClass removeClass 。过程不累赘了,否则篇幅又得增加一半(我还要睡觉,明天还要上班,可怜的上班族),代码如下:

      <codce></codce>$(document).ready(function(){
	if ($.browser.msie){
		$(”input[@type=’text’], input[@type=’password’], textarea”).focus(function(){$(this).addClass(”ie_focus”)}).blur(function(){$(this).removeClass(”ie_focus”)});
	}
})
    

我必须承认,我把这个 class 命名为 ie_focus 是有点变态。嗯,进一步,虽然我们这个代码不大,但我们也分离出来一个独立文件吧。这是我们的最后步骤的演示: http://realazy.org/lab/jquery/tut/form_hover_step3.html ,记得看源码哦。

很简单,对不?jQuery的威力不止于此,还有需多更酷更强的功能留待,你,和,我,共同探索。

P.S. jQuery的代码也很优美,对不?这种函数式编程风格我个人是十分喜欢的,但是大括号,小括号敲到我手疼……所有我又深深地爱上了基本上看不到括号的 Ruby Orz …阿门,晚安……

[转]小试牛刀——一篇jQuery小教程


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论