对于大多数更改选择的jQuery函数调用,可以使用end
返回选择中的一个步骤。例如:
$('#myElement').parent().show().end().css('color', '#ff0000');
这显示父元素,然后将原始选择设为红色。
然而,当我定义自己的jQuery插件来过滤选择时,我没有得到这个功能。例如:
$.fn.nextBarOne = function(selector) {
var ret = this.next().next();
return (typeof selector === 'undefined') ? ret : ret.filter(selector);
}
如果我现在$('#myElement').nextBarOne().show().end()
,我不会回到原来的选择。显然这是因为函数内部调用next
两次,然后有时调用filter
。
如何定义jQuery插件以允许我像内置函数一样使用end
?
答案 0 :(得分:3)
遍历后使用prevObject
设置.next()
以指向原始jQuery对象。
$.fn.nextBarOne = function(selector) {
var self = this,
ret = (typeof selector === 'undefined') ?
this.next().next() : this.next().next().filter(selector);
ret.prevObject = self;
return ret;
}
修改强>
pushStack()
可能更干净。我还在pushStack
电话中加入了选择器。
$.fn.nextBarOne = function(selector) {
var ret = (typeof selector === 'undefined') ?
this.next().next() : this.next().next().filter(selector);
return this.pushStack(ret, "nextBarOne", selector || "");
}
<强> An example here 强>