pushStack()顾明思意,就是像桟中添加东西呗,现在看看他是如何添加东西的.
创建一个空的jQuery对象,然后把Dom元素集合放入这个jQuery对象中,
并保留对当前jQuery对象的引用.
pushStack是核心方法之一,它为以下方法提供支持:
jQuery对象遍历:.eq(),first(),.last(),.slice(),.map();
Dom查找,过滤:.find(),.not(),.filter(),.closest(),.add(),.andSelf().
Dom遍历:.parent(),.parents(),parentUntil(),.next(),.prev(),.nextAll(),.prevAll(),
.nextUntil(),.prevUntil(),siblings(),.children(),.contents().
Dom插入:$.before(),$.after(),$.replaceWith(),.append(),.prepent(),.brfore(),.after(),.replaceWith().

241行:定义方法pushStack(elems,name,selector).
elems:准备放入新的jQuery对象的元素数组(或类似数组的集合).
name:产生元素数组elems的jQuery方法名,如eq,find,after,filter...
selector:传给jQuery方法的参数,用于修正原型属性.selector.

243行:thisconstructor是执行jQuery构造函数.加上括号.表示执行资格构造函数.
那么ret就是一个jQuery对象.但是这个jQuery对象里面是没有Dom元素引用的,
只有jQuery本身所具有的成员.
245~250行:是把参数elems合并到新的jQuery对象中.
如果elems是数组,借用push插入;否则调用方法jQuery.merge()合并.
253行:给新的jQuery对象添加属性prevObject(),并指向当前jQuery对象,
形成了一个链式桟.因此,pushStack()还可以理解为,构建一个新的jQuery对象并入栈,
新对象位于栈顶.
255行:给这个新的jQuery指定上下文.this.context要么是指定的上级dom节点,要么是默认的rootjQuery,在前面章节中说过了,不在提了.
257~261行主要是给ret指定选择器的.也就是在传入的参数selector的基础上再改造,
改造完成后作为新对象ret的selector.
264行:返回新的jQuery对象.

311行:prevObject是在调用pushStack中添加的引用,也就是说没有经过入栈的操作,这个引用时为空的;
这个时候会通过constructor这个属性构建一个空的jQuery对象并返回.
.end()方法和.pushStack()方法的原理截然相反.

.pushStack()是用于入栈,而end()确用于出桟.

 $(".guo").find(".yan").css("color","red")  //使用find()入栈(find调用了pushStack())
.end() //将find(".yan")出桟
.find(".si"); //继续寻找$(".guo")..find(".si")

十一.jQuery源码解析之.pushStack()的更多相关文章

  1. jQuery 源码解析(三) pushStack方法 详解

    该函数用于创建一个新的jQuery对象,然后将一个DOM元素集合加入到jQuery栈中,最后返回该jQuery对象,有三个参数,如下: elems Array类型 将要压入 jQuery 栈的数组元素 ...

  2. jquery源码解析:pushStack,end,ready,eq详解

    上一篇主要讲解了jQuery原型中最重要的方法init.接下来再讲一些比较常用的原型方法和属性 core_slice = [].slice, jQuery.fn = jQuery.prototype ...

  3. JQuery源码解析(一)

    写在前面:本<JQuery源码解析>系列是基于一些前辈们的文章进行进一步的分析.细化.修改而写出来的,在这边感谢那些慷慨提供科普文档的技术大拿们. 要查阅JQ的源文件请下载开发版的JQ.j ...

  4. jQuery 源码解析二:jQuery.fn.extend=jQuery.extend 方法探究

    终于动笔开始 jQuery 源码解析第二篇,写文章还真是有难度,要把自已懂的表述清楚,要让别人听懂真的不是一见易事. 在 jQuery 源码解析一:jQuery 类库整体架构设计解析 一文,大致描述了 ...

  5. jquery源码解析:代码结构分析

    本系列是针对jquery2.0.3版本进行的讲解.此版本不支持IE8及以下版本. (function(){ (21, 94)     定义了一些变量和函数,   jQuery = function() ...

  6. jquery 源码解析

    静态与实力方法共享设计 遍历方法 $(".a").each() //作为实例方法存在 $.each() //作为静态方法存在 Jquery源码 jQuery.prototype = ...

  7. jQuery源码解析资源便签

    最近开始解读jQuery源码,下面的链接都是搜过来的,当然妙味课堂 有相关的一系列视频,长达100多期,就像一只蜗牛慢慢爬, 至少品读三个框架,以后可以打打怪,自己造造轮子. 完全理解jQuery源代 ...

  8. 三.jQuery源码解析之jQuery的框架图

    这张图片是对jQuery源码截图,一点一点拼出来的. 现在根据这张图片来对jQuery框架做一些说明. 一.16~9404行可以发现,最外层是一个自调用函数.当jQuery初始化时,这个自调用函数包含 ...

  9. jquery源码解析:addClass,toggleClass,hasClass详解

    这一课,我们将继续讲解jQuery对元素属性操作的方法. 首先,我们先看一下这几个方法是如何使用的: $("#div1").addClass("box1 box2&quo ...

随机推荐

  1. mygene 3.0.0

    MyGene.Info provides simple-to-use REST web services to query/retrieve gene annotation data. It’s de ...

  2. 智课雅思词汇---二十七、形容词后缀-ant/-ent

    智课雅思词汇---二十七.形容词后缀-ant/-ent 一.总结 一句话总结: ...的 后缀:-ant ①[形容词后缀] 大部分与-ance或-ancy,相对应,表示属于...的.具有...性质的 ...

  3. 解决ubuntu登陆失败,"Failed to start session"的问题

    我是在虚拟机中安装了Ubuntu 14.04 系统,在Ubuntu 中执行 apt-get update  和  apt-get upgrade 命令后,然后重启系统.    但是,在重启成功后,在登 ...

  4. 理解 Ruby Symbol (Ruby中的冒号)

    http://blog.csdn.net/besfanfei/article/details/7966850 一直不明白:的作用 直到看到这篇文章 豁然开朗 处理符号相比字符串,占用更少的资源

  5. 99. Recover Binary Search Tree -- 找到二叉排序树中交换过位置的两个节点

    Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without changing ...

  6. Fly Vim, First-Class

    http://corner.squareup.com/2013/08/fly-vim-first-class.html Engineers at Square use a wide variety o ...

  7. bzoj1074

    题意: 给你n次折叠 m个询问 每次询问折叠后,xi,yi有几层 题解: 计算几何 模拟 #include<cstdio> #include<cstdlib> #include ...

  8. 在CMD中使用for命令对单行字符串做分割的方法

    我们都知道CMD中的for命令是执行循环命令的,数据来源可以是一个文件,一个命令的结果或一个字符串,只有这3种来源 如果是一个文件则对这个文件的所有字符串进行循环处理 如果是一个命令结果,那么对这个命 ...

  9. gson-2.2.api简单

    使用gson的tojson和fromjson实现对象和json的转换 Gson gson = new Gson(); // Or use new GsonBuilder().create();     ...

  10. QT Creator快捷键不能用

    我现在搞明白了,热键之所以不行,是因为我开了Fakevim原因.关了fakevim就能用热键了. 如果开了Fakevim,连基本的Ctrl+C,这样的复制快捷键都不能用. 快速添加方法实体(.cpp) ...