Tag Archives: jQuery
jQuery 1.3 中文文档发布
jQuery 1.3自从2009年1月14日发布后,后引来了各界的关注。我们也随即投入到翻译文档的工作中来。经过4天的努力,终于完工了。这个版本更新了不少东西 changelog: 2009-01-21 20:23:38 +0800 * #4 关于1.3版的日期 (感谢liushuang630) * #5 die()的标题误为toggle() (感谢dadao5.com) * queue([name],callback) queue([name],queue)少参数 (感谢Horatio) 2009-01-19 00:00:10 +0800 + offsetParent() * closest() 说明 2009-01-18 16:06:52 +0800 * triggerHandler 进一步说明 * trigger 进一步说明 2009-01-17 22:37:11 +0800 * live() … Continue reading
jQuery 1.3 正式版发布公告
http://docs.jquery.com/Release:jQuery_1.3 jQuery 1.3终于发布了。 min版(gzip后18kb) 源码(114kb) 另外可以用google的代码托管: http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js 下面这个是我自己用Packer压缩的pack版 http://shawphy.com/down/jquery-1.3.pack.js(37kb) 简要来说: 更新了Sizzle选择器引擎,这个之前也提到过。可以查看他的性能: 此外据声称,把代码给了dojo基金会。这回Sizzle的野心在于能够让其他各种JS库都能用,包括Prototype, Dojo, Yahoo UI, MochiKit, 和 TinyMCE等等其他库。 live 事件 这也是jQuery 1.3这次更新的第二个重大更新。 可以看下面iframe中的效果以及源码 性能比较: 这样,我以前写的关于重复绑定的文章就差不多可以抛弃了 Event 对象 新增了一个jQuery.Event对象,他根据w3c文档,做了一个完整的,兼容所有浏览器的一个对象。具体还得看文档。 append, prepend, before, 和 after 方法重写 据声称,这些方法的效率提升了6倍 重写了offset方法 这回更快了 取消了浏览器侦测,全面改用jQuery.support 具体还得看文档了。 变化: … Continue reading
[推荐]jQuery 源码分析
不得不承认,我看到这个帖子晚了好几个月。 但幸运的是,我在年末的时候看到了。Better late than never. 就当作圣诞礼物送给我自己吧。 也送给各位: http://jljlpch.javaeye.com/blog/234218 非常全面得分析了jQuery 1.2.6 100多页的pdf文档,引用fins的话是,这是今年JavaEye上精华中的精华了。 没看过的请务必去看一下。
json2select
这是我之前为了ThinkSNS写的一个小工具。通过json生成无限联动的select。至少要求jQuery 1.2.3 以上,因为我用了data方法。 查看DEMO 源文件 min版 //构建如下json,t为列表框的text,v为列表框的value,s表示子一级对象 var json=[ { t:"欧洲某地", v:"欧洲" }, { t:"中国某地", v:"中国", … Continue reading
jQuery中不为人知的秘密之三——判断元素上是否绑定了事件
好久没写博客了,抱歉抱歉,最近半年很忙很忙。 正好群里 Q.Lee.lulu 问起怎样判断有没有绑定一个事件。 我研究了一下之后发现,jQuery都将事件缓存起来了,其实也是为了防止内存溢出以及页面unload的时候的速度,也包括多函数触发,方便管理等诸多好处,具体可以参考此文。 jQuery会在window.unload的时候卸载所有绑定过的事件,释放内存的。 OK,言归正传。判断元素上是否绑定过事件用如下语句 jQuery.data(elem,"events")[type] //老版本也能用 $(elem).data("events")[type] //1.2.3以后才能用 返回值: 一个Object,可以用for in来遍历。或者undefined。 参数: elem是一个DOM对象,type是事件类型。 举例: 判断id为foo的元素上是否绑定了click事件 if( $("#foo").data("events")["click"] ){ //your code }
“另类”的阻止冒泡
论坛里有人问 HTML: <div id="b"> <div>sssssssssssss</div> <div>aaaaaaaaaaaa</div> </div> JQ; $(‘div:contains(aaa)’).addClass(‘aa’); 如何才能让这个id="b"的div不要被选择器匹配到呢? 底下讨论了老半天基本都是无解,只能回避这个问题,加入class之类的限定条件。 后来我仔细翻了翻API,发现还有filter这个方法可以用。 之后还不过瘾,写了个选择器插件,需要的同学可以拿去用。 直接上代码了,写的不好,有能力的帮忙优化一下,毕竟选择器函数属于运算密集型函数。 filter方法: $(‘div:contains(aaa)’).filter(function() { return $(this).children().length == 0; }); 选择器插件: <div> <div>shawphy</div> <div>this is a demo … Continue reading
jQuery中不为人知的秘密之二
又开始写jQuery的秘密了~ 这里写的基本上都是没啥用的东西,大家随便看看好了,有用的都放在文档里了~ 这回先说选择器, 两个特殊的选择器,没有在文档里列出来。有可能只是选择器正则匹配的失误,也可能是故意的,但我源码中看不出来。望各位看官指点。注意,下面两个特殊选择器,随时可能在以后版本中消失,慎用。本文涉及的是1.2.6,经测试1.2.3也可使用。 创建一个空jQuery对象: $(" "); //切记,引号中间至少有_一个_空格 这段简易的代码即可创建一个空的jQuery对象。这就类似创建一个代码片段。但由于是空的,所以无法append进任何东西。但你可以用add将你要的东西添加进去。 获取document,有时候需要写一些关于document的事件,比如keypress之类的,或者其他的,就可以用 $(""); //切记,引号中间_没有_空格 这一定程度上可以用于混淆代码,比如将$(document).ready()写成$("").ready(),不知道的人就看不懂了。当然,要看过本文的人就都知道了~~(笑~) 顺便一说,前端加密是没有可能的,混淆也是有限度的。有jQuery的操作是链式操作,没有中间变量,同时通常绑定函数也是匿名函数,所以对于jQuery代码的混淆更是没有太大用处。除非,不再使用匿名函数,每次都外部定义一个。同时不再使用链式操作,用next,parent之类操作的时候,统统再定义一个中间变量。这样你的jQuery代码已经没有jQuery风格了,对混淆会稍微有点点帮助。注意,以上所有混淆操作,只防君子不防小人!切记,前端开发不可能加密!所以一切都做好开源的准备!了解GPL、MIT之类的都是有必要的! 如果你要用中间变量,像前面说的为了混淆,有时候你可能需要用到之前的一个对象,就好像在链式写法中用end()的效果,那就可以用prevObject属性,end()就是返回这个属性。 $("#id").prevObject; //切记,最后没有括号,这个是属性不是方法 下面说的这个其实不是很秘密,但值得一提 attr是很伟大的方法,以下这些都是可以执行的,你就可以通过这些来进行一些简单的判断,比如这个元素的标签名啦之类的。 $("body").attr("tagName"); $("body").attr("nodeName"); $("body").attr("nodeType"); 还有个相关的,他返回的是布尔值true/false jQuery.nodeName( elem, nodeName ) 第一个参数是一个DOM对象,不是jQuery对象,第二个就是节点名称(标签名)了,大小写无关。返回true/false 有人问,为什么我不直接使用elem.nodeName==nodeName呢,爱用写这么麻烦呢? 看一下jQuery的源码就知道了 nodeName: function( elem, name ) { return elem.nodeName && … Continue reading
jQuery中Ajax事件
参考资料地址: http://docs.jquery.com/Ajax_Events Ajax会触发很多事件。 有两种事件,一种是局部事件,一种是全局事件: 局部事件:通过$.ajax来调用并且分配。 $.ajax({ beforeSend: function(){ // Handle the beforeSend event }, complete: function(){ // Handle the complete event } // … }); 全局事件,可以用bind来绑定,用unbind来取消绑定。这个跟click/mousedown/keyup等事件类似。但他可以传递到每一个DOM元素上。 … Continue reading
jQuery中不为人知的秘密之一
jQuery的向来以其完善的文档著称,而不像早期的Prototype那样库写的很牛,而文档很糟糕,其他使用者不得不看他的源码以了解一些功能。 但是,不得不说,文档的更新速度是远没有其程序变化的快的。 这个专题就是用于介绍一些隐藏在jQuery源码内部的事情。 今天先揭秘2条 1,序列化一个对象 类似于Prototype中的$H(obj).toQueryString() jQuery中也有一个内部函数,用于在ajax时候序列化对象用: jQuery.param var obj={A:1,B:2,C:3}; jQuery.param(obj); //A=1&B=2&C=3 2,获取原始的event对象 用过jQuery都知道,jQuery提供了一个事件对象,用于在事件处理函数中使用,并且这个对象已经将ie中的事件修复成了标准的W3C事件。具体可以参考我这篇日志 但他并没有完全统一所有事件,比如获取mousemove的event事件中鼠标的相对坐标的位置,ie和ff分别用的x和layerX来实现,而jQuery没有给统一。我们只能使用原始的event对象再自己判断,此时就可以使用 e.originalEvent 这样就得到了原始的event对象了 在ie中,这个指向的是window.event,而在其他浏览器中,就是传递给事件处理函数的第一个参数。 像上面那个例子,我就用了如下的代码,用于获取鼠标的相对坐标。 $("#menuWrap").mousemove(function(e) { var xx=e.originalEvent.x||e.originalEvent.layerX||0; }); 可以参考我写的一个简单的菜单。 这个页面看上去动作还有点僵硬,是由于动画函数的问题。 关于动画函数,将在以后详细讲解。

