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

时间:2013-10-23 00:02:08

标签: jquery plugins

我正在学习更多关于制作jQuery插件的知识,我正处于试图建立公共成员函数的地步。我是通过我在一堆插件中看到的方法来实现的:

$.fn.pluginName = function () {
    // $(this) contains the selector (#test)
}

$.fn.pluginName.publicFunction = function () {
    // How do I get $('#test') here?
}

$('#test').pluginName();
$('#test').pluginName.publicFunction();

我想知道如何访问在公共函数中选择主插件时使用的选择器,或者如果我必须传递它以便使用它。有什么建议?我想我知道如何使用私有函数来做这件事,但我对此感到有些不知所措。

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

2 个答案:

答案 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

访问它