如何使我的jQuery插件尊重end()?

时间:2011-02-08 22:01:35

标签: javascript jquery jquery-plugins jquery-selectors

对于大多数更改选择的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

1 个答案:

答案 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