经常在JQuery插件中发现一个问题,为什么方法返回的都是return this.each()
jQuery.fn.test= function(){
this.css("background","#ff0");//因为调用对象是JQuery对象,这里面的this为jquery对象,而不是dom对象
return this.each(function(){
alert("this"+this+this.innerHTML); //each方法循环中的this为dom对象。
});
};
这里就要说到JQuery的一大特性,链式调用。
<div id="color">
<p id="c1">1111</p>
<p id="c2">2222</p>
<p id="c3">3333</p>
</div>
<script type="text/javascript">
$("#color").find('#c1').css("color","red").next().css("color","blue").next().css("font-size","20px");
</script>
JQuery中的大多方法,返回的都是调用者本身,所以我们可以通过一条语句完成很多的操作。作为JQuery插件同时也要满足这点,所以我们也要返回一个JQuery对象。
那么有个疑问,既然要返回JQuery对象,我干嘛不直接返回 return this?
答:this此时就是一个JQuery对象 ,$.each()同样是JQuery遵循链式方法,所以调用this.each()的结果 就是 return this.
这样简写不仅先执行了each内的方法又return this,
return this.each(function() {
$(this).append(' - ' + $(this).data('x'));
});
等价于
var objs = this;
for (var i=0; i<objs.length; i++) {
var obj = objs[i];
$(obj).append(' - ' + $(obj).data('x'));
};
return this;