2011-02-08 2 views
4

С большинством вызовов функции jQuery, которые меняют выбор, можно вернуться к шагу в выборе с помощью end. Например:Как я могу подключить плагин 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

Посмотрите на источник JQuery для "pushStack"; в основном ваш код будет называть это так же, как и функции jQuery «find», «parents» и т. д. – Pointy

+1

plugin.showRespectTo (end); –

ответ

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; 
} 

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 || "");   
} 

An example here

+0

Я думаю, что это функция «pushStack» ... – Pointy

+0

Я думаю, что вы правы @Pointy, просто просматривая источник сейчас ... –

+3

http://www.bennadel.com/blog/1739-Using-PushStack- In-jQuery-Plugins-To-Create-New-Collections.htm – jAndy

Смежные вопросы