jQuery-源码阅读,pushStack()入栈方法
2016-02-27 20:41
721 查看
首先了解下栈:栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。栈的规则是先进后出。下面看下jQuery中链式方法的使用:
首先选择页面中ul元素,再寻找其子元素中li,为其设置背景颜色为灰色。这里,ul首先入栈,子元素li后入栈,则css()最后操作的是li元素不是ul,这里是因为jQuery里所有链式操作都调用了jQuery中的工具方法——pushStack()。下面看下这个神奇函数的源码:
可以看到,首先新建一个ret对象,其中连接(merge)了jQuery和传入新对象(集合),然后设置ret对象的上级元素为this,返回ret。然后再看下返回上级的end()在源码中的实现:
end()利用了pushStack中的prevObject,返回该对象,若该对象为空,返回构造函数。
在源码中多次使用这个入栈函数,如map()、slice()、eq()等常用方法中都调用了这个入栈方法。
$('ul').children('li').css("backgroundColor","#CCC");
首先选择页面中ul元素,再寻找其子元素中li,为其设置背景颜色为灰色。这里,ul首先入栈,子元素li后入栈,则css()最后操作的是li元素不是ul,这里是因为jQuery里所有链式操作都调用了jQuery中的工具方法——pushStack()。下面看下这个神奇函数的源码:
pushStack: function( elems ) { // Build a new jQuery matched element set var ret = jQuery.merge( this.constructor(), elems ); // Add the old object onto the stack (as a reference) ret.prevObject = this; ret.context = this.context; // Return the newly-formed element set return ret; }
可以看到,首先新建一个ret对象,其中连接(merge)了jQuery和传入新对象(集合),然后设置ret对象的上级元素为this,返回ret。然后再看下返回上级的end()在源码中的实现:
end: function() { return this.prevObject || this.constructor(null); }
end()利用了pushStack中的prevObject,返回该对象,若该对象为空,返回构造函数。
在源码中多次使用这个入栈函数,如map()、slice()、eq()等常用方法中都调用了这个入栈方法。
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- 从源码安装Mysql/Percona 5.5
- JavaScript演示排序算法
- 2015-2016网页设计趋势分析 Web Design of Trends
- jQuery Ajax 跨域调用
- 移动端的长按事件
- jquery教程靠边站,一分钱不花让你免费学会jquery
- JQuery+Strusts1.x无刷新登录
- 异步流程控制:7 行代码学会 co 模块
- [译] React 入门
- JavaScript 各种遍历方式详解
- 数组方法汇总
- 如何优雅处理前端异常?
- jQuery插件实现文字无缝向上滚动效果代码
- jQuery菜单插件用法实例
- JQuery 初体验(建议学习jquery)
- 基于Jquery和CSS3制作数字时钟附源码下载(CSS3篇)
- Jquery实现的table最后一行添加样式的代码
- jQuery实现向下滑出的平滑下拉菜单效果