Die*_*ego 2 jquery jquery-plugins jquery-end
我有一个非常简单的自定义插件.如果它this在调用后返回,.end()效果很好.但是如果它返回$(this),.end()则不起作用.为什么会这样?我在这里错过了什么吗?
代码:
$.fn.fnBar = function() {
$(this).html("hello!");
//return $(this); // Doesn't work
return this; // Works!
};
$("div")
.find("span")
.fnBar()
.end()
.css("color", "red");
Run Code Online (Sandbox Code Playgroud)
从文档:
结束当前链中最近的过滤操作,并将匹配元素集返回到先前的状态.
在
$("div").find("span").fnBar().end()
Run Code Online (Sandbox Code Playgroud)
end将过滤的状态设置为调用之前的过滤状态find.
只是$(this),你正在重建一个新的jQuery对象,没有任何历史记录.您没有过滤操作也没有链,因此没有任何内容可以取消.
jQuery end函数实现如下:
end: function() {
return this.prevObject || this.constructor(null);
},
Run Code Online (Sandbox Code Playgroud)
这意味着您可以通过记录prevObjectjQuery对象的属性来查看差异:
console.log(this.prevObject);
console.log($(this).prevObject); // will give undefined
Run Code Online (Sandbox Code Playgroud)