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();

我想知道如何访问在公共函数中选择主插件时使用的选择器,或者我是否必须通过它才能使用它。有什么建议吗?我想我知道如何使用私有函数来做到这一点,但我对此有点不知所措。

前两个答案很明显我不清楚,所以问题已经更新。

4

2 回答 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 插件上的公共方法(例如$('#test').pluginName.publicFunction();您的示例中)访问 jQuery 实例(以获取原始选择器),则不能。

选择器只是 jQuery 实例的属性,因此只有 jQuery 实例的方法或引用 jQuery 实例的函数才能访问该.selector属性。

$('#test').pluginName是一个静态函数对象(例如只有其中一个) - 它不是一个 jQuery 实例,因此$('#test').pluginName.publicFunction()无法访问选择器的属性,$('#test')因此无法访问选择器。

如果我理解你为什么要在你的 jQuery 插件上创建公共函数以及你试图用它做什么,我可能会为你提供一个替代解决方案。

例如,您publicFunction()本身可以是一个 jQuery 插件方法,然后您可以使用类似$('#test').pluginName().publicFunction().

于 2013-10-23T00:13:33.217 回答
0

如果你想为你的函数设置一个全局选择器(这就是你的意思),你可以这样做:

window.publicSelector = privateSelector

然后从公共 javascript 代码中,它应该可以使用publicSelector

于 2013-10-23T00:07:24.567 回答