我正在学习更多关于制作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 插件上的公共方法(例如示例中的 $('#test').pluginName.publicFunction();
)访问 jQuery 实例(以获取原始选择器),则无法访问。
选择器只是 jQuery 实例的属性,因此只有引用 jQuery 实例的方法或引用 jQuery 实例的函数才能访问 .selector
属性。
$('#test').pluginName
是一个静态函数对象(例如,只有一个) - 它不是 jQuery 实例,因此$('#test').pluginName.publicFunction()
无法访问$('#test')
的属性,因此无法访问选择器。
如果我理解你为什么要在你的jQuery插件上做公共函数,以及你想用它做什么,我可能会为你提供一个替代的解决方案。
例如,您的publicFunction()
本身可以是jQuery插件方法,然后您可以使用像$('#test').pluginName().publicFunction()
这样的链接。
如果你想要一个函数的全局选择器(这就是你的意思),你可以这样做:
window.publicSelector = privateSelector
然后从公共JavaScript代码中,它应该可以使用publicSelector