作家
登录

jQuery之end()和pushStack()使用介绍

作者: 来源:www.28hudong.com 2013-03-30 00:34:11 阅读 我要评论

但在我们自己写jQuery代码的时候,却很少关注或使用过pushStack(). 如果我们需要写个涉及DOM遍历的插件,它就会显得尤其有用. 在jQuery内部,pushStack()方法通过改变一个jQuery对象的prevObject属性来"跟踪"链式调用中前一个方法返回的DOM结果集(被jQuery封装过,也是个jQuery对象,说是"跟踪",是因为实际存储的是个引用). 当我们再链式调用end()方法后, 内部就返回当前jQuery对象的prevObject. 具体更多细节, 直接看源码即可. 这里只做个简单的分析, 直接来个例子: html: 复制代码 代码如下: <div id="grandparent"> I am grandparent. <div id="parent"> I am parent. <div id="child"> I am child. </div> </div> </div> javascript: 复制代码 代码如下: var els = $('#child').parent().parent(); console.dir(els); 图解: 了解这个之后, 我们来做一个grandparent插件,用来替代.parent().parent()这样连续2次的调用,直接用.grandparent().如果"一不小心"没考虑end()的话,代码很可能就是这个样子的: 复制代码 代码如下: $.fn.grandparent = function() { return this.parent().parent(); }; 依旧用上面那个例子: 复制代码 代码如下:$('#child').grandparent().end(); //jQuery-[div#parent] 很显然, 大多数情况下这不是我们想要的, 事实上我们想通过链式调用end()直接返回到jquery[div#child]. 现在该是pushStack出马的时候了,我们只要加上一行即可: 复制代码 代码如下: $.fn.grandparent = function() { var els = this.parent().parent(); return this.pushStack(els.get()); }; 在pushStack内部, 把els.get()返回的DOM数组封装成一个新的jQuery对象, 而this(jQuery[div#child])会赋值给之前新构建jQuery的prevObject, 最后返回新生的那个jQuery对象. 所以这次, 当我们再用end()就对了: 复制代码 代码如下: var grandparent = $('#child').grandparent()./* jquery-[div#grandparent]*/.end() /*jquery-[div#child]*/ 此博文内容的主体思想来自Learning JQuery中的一篇博客, 感谢该作者的分享. 感兴趣的话, 点击jQuery pushStack.

  推荐阅读

  ASP.NET jQuery 实例13 原创jQuery文本框字符限制插件-TextArea Counter

&#8226;可限制最大输入字符长度 &#8226;可设置字符截取速度 &#8226;可自定义提示信息文本样式(可以改进自定义文本内容) 该插件统计英文字符和中文的长度是一样的。 废话少说,这里直接奉上详细插件代码,具体实现细>>>详细阅读


本文标题:jQuery之end()和pushStack()使用介绍

地址:http://www.17bianji.com/kaifa2/JS/23671.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)