我正在学习更多关于制作jQuery插件的知识,我正处于试图建立公共成员函数的地步。我是通过我在一堆插件中看到的方法来实现的:
$.fn.pluginName = function () {
// $(this) contains the selector (#test)
}
$.fn.pluginName.publicFunction = function () {
// How do I get $('#test') here?
}
$('#test').pluginName();
$('#test').pluginName.publicFunction();
我想知道如何访问在公共函数中选择主插件时使用的选择器,或者如果我必须传递它以便使用它。有什么建议?我想我知道如何使用私有函数来做这件事,但我对此感到有些不知所措。
前两个答案显然我不清楚,所以问题已经更新。
答案 0 :(得分: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插件(例如$('#test').pluginName.publicFunction();
中的公共方法)访问jQuery实例(以获取原始选择器),则不能。
选择器只是jQuery实例的属性,因此只有jQuery实例的方法或具有jQuery实例引用的函数才能访问.selector
属性。
$('#test').pluginName
是一个静态函数对象(例如,只有其中一个) - 它不是一个jQuery实例,因此$('#test').pluginName.publicFunction()
无法访问$('#test')
的属性和因此无法进入选择器。
如果我理解你为什么要在你的jQuery插件上制作公共函数以及你试图用它做什么,我可能会为你提供一个替代解决方案。
例如,您的publicFunction()
本身可以是jQuery插件方法,然后您可以像$('#test').pluginName().publicFunction()
一样使用链接。
答案 1 :(得分:0)
如果你想要一个功能的全局选择器(就是你的意思),你可以这样做:
window.publicSelector = privateSelector
然后从公共JavaScript代码中,可以使用publicSelector