Как я могу заставить мой плагин jQuery соблюдать end ()? - PullRequest
4 голосов
/ 09 февраля 2011

При большинстве вызовов функций 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 Ответ

3 голосов
/ 09 февраля 2011

Установите 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;
}

EDIT:

Возможно, чище с 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 || "");           
}

Пример здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...