jQuery:在插件成员函数中获取原始选择器



我正在学习更多关于制作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

最新更新