Я больше разбираюсь в создании плагинов jQuery, и я нахожусь в точке, где я пытаюсь сделать публичные функции-члены. Я делаю это с помощью метода, который я видел в кучке плагинов:
$.fn.pluginName = function () {
// $(this) contains the selector (#test)
}
$.fn.pluginName.publicFunction = function () {
// How do I get $('#test') here?
}
$('#test').pluginName();
$('#test').pluginName.publicFunction();
Мне интересно, как я могу получить доступ к селектору, используемому при выборе основного плагина внутри публичной функции, или если мне нужно передать его, чтобы использовать его. Любой совет? Я думаю, что знаю, как это сделать с помощью частных функций, но я немного потеряю это.
Первые два ответа говорят о том, что я был неясен, поэтому вопрос был обновлен.
Внутри функции функции плагина 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()
.
если вы хотите глобальный селектор для своей функции (это то, что вы имеете в виду), вы делаете это:
window.publicSelector = privateSelector
то из общедоступного кода javascript он должен быть доступен с помощью publicSelector