jQuery: получить оригинальный селектор в функции члена плагина

0

Я больше разбираюсь в создании плагинов jQuery, и я нахожусь в точке, где я пытаюсь сделать публичные функции-члены. Я делаю это с помощью метода, который я видел в кучке плагинов:

$.fn.pluginName = function () {
    // $(this) contains the selector (#test)
}

$.fn.pluginName.publicFunction = function () {
    // How do I get $('#test') here?
}

$('#test').pluginName();
$('#test').pluginName.publicFunction();

Мне интересно, как я могу получить доступ к селектору, используемому при выборе основного плагина внутри публичной функции, или если мне нужно передать его, чтобы использовать его. Любой совет? Я думаю, что знаю, как это сделать с помощью частных функций, но я немного потеряю это.

Первые два ответа говорят о том, что я был неясен, поэтому вопрос был обновлен.

Теги:
plugins

2 ответа

1
Лучший ответ

Внутри функции функции плагина jQuery:

this.selector

будет исходный селектор, переданный исходному объекту jQuery. Я не могу точно сказать, но это может быть устаревшим в последних версиях jQuery, хотя он все еще присутствует в jQuery 2.0.2.

Рабочая демонстрация здесь:

http://jsfiddle.net/jfriend00/JczB9/

$.fn.test = function() {
    // this.selector contains #test from the original jQuery selector
};

var item = $("#test");
item.test();

Если вы пытаетесь получить доступ к экземпляру jQuery (чтобы получить исходный селектор) из открытого метода в вашем плагине jQuery, например $('#test').pluginName.publicFunction(); в вашем примере вы не можете.

Селектор является свойством экземпляра jQuery, поэтому только методы экземпляра jQuery или функции, которые имеют ссылку на экземпляр jQuery, смогут получить доступ к свойству .selector.

$('#test').pluginName - это статический функциональный объект (например, только один из них) - это не экземпляр jQuery, поэтому $('#test').pluginName.publicFunction() не имеет доступа к свойства $('#test') и, следовательно, не могут попасть в селектор.

Если бы я понял, почему вы делаете публичные функции в своем плагине jQuery и что вы пытаетесь сделать с ним, у меня может быть альтернативное решение для вас.

Например, ваш publicFunction() может сам быть publicFunction() jQuery, и тогда вы можете использовать цепочку, например $('#test').pluginName().publicFunction().

  • 0
    Я знаю, как получить селектор в основном плагине, я ищу, как получить к нему доступ в публичной функции, прикрепленной к плагину.
  • 0
    @RhoVisions - я добавил больше к своему ответу на основе вашего последнего комментария.
Показать ещё 1 комментарий
0

если вы хотите глобальный селектор для своей функции (это то, что вы имеете в виду), вы делаете это:

window.publicSelector = privateSelector

то из общедоступного кода javascript он должен быть доступен с помощью publicSelector

Ещё вопросы

Сообщество Overcoder
Наверх
Меню