end方法

每个jQuery对象都有三个属性,contextselectorprevObject

end方法

return this.prevObject || this.constructor();

pushStack 方法

pushStack = function( elems ) {
  var ret = jQuery.merge( this.constructor(), elems );
  ret.prevObject = this;
  return ret;
}
  1. this.constructor方法指向jQuery,因此会创建一个新的对象
  2. 将元素合并到新的jQuery对象上,然后将之前的this绑定到prevObject

内部使用 pushStack 的方法

find 为例,还有notfilter

find = function( selector ) {
    var i, ret,
        len = this.length,
        self = this;
    // 即使是 元素,检查是不是属于自己的
        // 将属于自己的元素再 使用 pushStack,这样可以创建新的jQuery对象
    if ( typeof selector !== "string" ) {
        return this.pushStack( jQuery( selector ).filter( function() {
            // this 是当前的的 DOM 元素
            for ( i = 0; i < len; i++ ) {
                // 检查一个元素是另一个元素的后代,container , contained
                if ( jQuery.contains( self[ i ], this ) ) {
                    return true;
                }
            }
        } ) );
    }

    ret = this.pushStack( [] );
        for ( i = 0; i < len; i++ ) {
        //  jQuery.find = Sizzle
        // 参数,selector, context, results, seed
        // 内部操作 results 也就是 ret,将符合要求的元素添加到ret上
        // 传址
        jQuery.find( selector, self[ i ], ret );
    }
    // 看一下,是集合还是单个元素
    return len > 1 ? jQuery.uniqueSort( ret ) : ret;
} 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • end() 方法结束当前链条中的最近的筛选操作,并将匹配元素集还原为之前的状态。 主要是在利用 jQuery 的链...
    尤樊容阅读 406评论 1 1
  • end方法一般在一次请求中只调用一次,而且他会阻断程序,就是后面的代码不会执行,表示我们的响应已经完成 在实际开发...
    小草莓蹦蹦跳阅读 685评论 0 0
  • 请参看我github中的wiki,不定期更新。https://github.com/ivonzhang/Front...
    zhangivon阅读 7,771评论 2 19
  • 在线阅读 http://interview.poetries.top[http://interview.poetr...
    前端进阶之旅阅读 115,570评论 24 450
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,647评论 19 139

友情链接更多精彩内容