RSS

《jQuery in Action》 in Action - Chapter 6

Labels: ,

jQuery utility functions

jQuery提供了很多以$为命名空间的工具方法(utility function)。这些方法都是不具体操作结果集(wrapped set)或是非面向对象的,其实就是一些全局的方法。

具体的方法用法参考jQuery API在线查看器 ,这里就只是简单的列一下好了:

  • 浏览器和特性探测
    • $.browser.xx(可选值为safari/opera/msie/mozilla)布尔型,是否为特定的浏览器
    • $.boxModel 布尔型,true为w3c 标准box model,false为ie box model
    • $.support 可以查看更多的浏览器特性,具体看文档
  • 字符串方法
    • $.trim(str)
    • $.param(obj) 将form元素数组或对象序列化成url参数
  • 数组与对象
    • $.merge(first,second)合并数组,在first中添加second中的元素,并返回first
    • $.unique(array)array中的元素去重,array中的元素仅限dom元素,不能是数字和字符串
    • $.grep(array,callback,invert)用callback方法过滤数组元素
    • $.map(array,callback)用callback方法将数组元素逐个处理
    • $.each(object,callback) 遍历执行object中的元素,执行callback
    • $.extend(deep,target,object1,…,objectN) 和prototype.js类似的extend对象机制
    • $.inArray(value,array) $.isArray(obj) $.isFunction(obj)看名字就知道什么意思了
  • 脚本加载
    • $.getScript(url,callback)加载url制定脚本后执行callback,加载的脚本会被执行

值得说明的几处:

jQuery in Action中介绍的$.map和$.grep中callback是可以为字符串类型,以实现类似lambda形式的操作,在jQuery的1.2.3版本中由于要兼容Adobe AIR已经被去掉了,书中的写法“$.grep(originalArray,'a>100');”已经不能使用了。

看到书中的小标题 - "Will the real $ please stand up?” - 时不禁一笑(让我想起了我酷爱的EminemThe Real Slim Shady 中的歌词“Will the real Slim Shady please stand up”)。这个$的冲突问题以前在第一章的时候说过,如果jQuery要和其他框架联合使用,很有可能$会冲突。之前介绍了通过使用jQuery.noConflict()解决问题.但还是有如下的情况,某段由jQuery写的代码被移植到一个页面,而这个页面也用了prototype.js,所以需要jQuery.noConflict()调用,然后把那段移植代码中的$符号都换成jQuery,如果万一少替换了几处,就很可能会导致代码有问题,还是有一点儿让人烦躁了吧。其实可以用书中介绍的技巧来解决这个问题:

(function($){ // // Plugin definition or your jquery code goes here // })(jQuery);

先声明一个方法,然后传入jQuery做参数,在函数体内$就可以用来表示jQuery了,不会和函数体外面产生冲突,上面提到的移植代码只要由这个包装一下就不需要替换了,实际上jQuery的插件定义也都应该用这种形式,很妙的技巧。

链接: 《jQuery in Action》 in action系列


0 Responses to "《jQuery in Action》 in Action - Chapter 6"

Post a Comment (友情提示:添加评论需要翻墙)