get()和eq()

get()方法返回dom对象,而eq()方法返回jQuery对象

	$("div").get(0).innerHTML = "返回DOM对象";
	var $divs = $("div");
        $divs.eq(1).html("返回jQuery对象");
	console.log($divs);
	console.log($divs[0]);  //使用这种类数组方式返回的貌似都是dom元素,至于为什么,有待深究

下面代码是eq()的源码

	eq: function( i ) {
		var len = this.length,
			j = +i + ( i < 0 ? len : 0 );
		return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
	}

        console.log($);

上面eq()源码用到_pushStack_方法,这是eq()方法返回jQuery对象的方法所在,下面分析它的源码

pushStack: function( elems ) {  
        var ret = jQuery.merge( this.constructor(), elems );//this.constructor()=$()相当于返回一个空的jQuery对象,length是0,但是有很多属性方法!  
        ret.prevObject = this;//merge方法会获取到第二个参数的length,对于DOM对象来说第二个参数是undefined,所以什么也不做,因此把它  
        ret.context = this.context;//放在数组中才能真正用到merge方法!如$("span").pushStack([$("#n9")[0]])这样返回的jQuery对象就不是空的了!  
        // Return the newly-formed element set  
        return ret;//通过这里我们可以看到pushStack返回的是通过参数构建的jQuery对象,不过该jQuery对象保存了调用者context,以及通过prevObj  
    }                  //保存了调用者的引用,该引用用于end方法!  

这段代码引用了博客http://blog.youkuaiyun.com/liangklfang/article/details/48780509 ,感谢大神分享

转载于:https://my.oschina.net/daladida/blog/894125

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值