Используйте конец jQuery () в моих плагинах - PullRequest
5 голосов
/ 06 февраля 2012

Как я могу скопировать стек объекта jQuery в другой объект jQuery, чтобы я мог использовать end в своих плагинах даже при возврате совершенно не связанных объектов? Пример:

$(myselector)
    .next()             // Destructive operation
        .doSomething()
    .end()              // Goes back to "myselector"
    .doSomethingElse(); // Works fine!

$.fn.myPlugin = function() {
    return $(unrelated); // No stack, can't call "end" on it
};

$(myselector)
    .myPlugin()         // Destructive operation
        .doSomething()
    .end()              // Goes back to nowhere, since the stack is empty
    .doSomethingElse(); // Doesn't work

Я бы хотел изменить объект $(unrelated), включив в него стек this, поэтому будет работать второй пример. Вот полный пример в jsFiddle.

Ответы [ 3 ]

2 голосов
/ 06 февраля 2012
$.fn.myPlugin = function(related) {
    if ( related == "getRelated" )
        return this.pushStack($(this.data("related")).get()); // Want to preserve stack
    return this.data("related",related);
};

Вам нужно поместить элемент в стек, чтобы end () вернулся к нему.

0 голосов
/ 06 февраля 2012

Если вы посмотрите на данные в $ ('#a'), то это просто строка, говорящая '#c', а не фактический объект jQuery. Я обновил код для вас http://jsfiddle.net/89gkD/3/

0 голосов
/ 06 февраля 2012

Мне кажется, что то, как вы пишете плагин, нарушает логику jQuery, поскольку вы возвращаете то, чего jQuery может не ожидать. Это всего лишь предположение, поскольку я совсем не знаю jQuery.

Может быть, вы можете вместо этого делать .doSomething ()?

...