帮助调用jQuery插件的内部方法

时间:2009-10-21 13:19:58

标签: javascript jquery jquery-plugins scope

我写了plugin to highlight terms used to find a page。来源是also available

我的问题是,如果你查看第一个链接的内联JavaScript,我已经创建了一个自定义textPlacement函数来处理显示栏的插入(它看起来有点像Stack Overflow)。

如您所见,我在插入的按钮上有一个事件处理程序。我编写了删除栏的编码,但我也想删除条款的突出显示。该插件有一个名为toggleTermHighlighting()的方法。

如何从示例页面上的匿名函数内部调用该方法?我需要制作this.toggleTermHighlighting = function() {}吗?我已经尝试将其中的一个实例传递给第一个参数,但无法使其工作。

抱歉,我似乎总是在JavaScript中使用范围很难。

有没有人知道我能做什么才能从示例页面的匿名函数中访问该方法?

2 个答案:

答案 0 :(得分:4)

我认为如果你重新调整了插件中定义函数的方式,它会变得相当容易。

从以下地址更改第128行:

var toggleTermHighlighting = function() {

为:

this.toggleTermHighlighting = function() {

然后你可以做这样的事情从一个完全不同的范围访问这个功能:

var myPlug = new $.fn.searchTermsHighlight();
myPlug.toggleTermHighlighting();

这将是您的问题的答案,但我认为不同的方法可能更合适。如果你看一下很多jQuery UI代码,你可以将一个字符串传递给插件,它会为你执行一个函数。所以你实际上可以做类似的事情:

$('body').searchTermsHighlight('toggle');

然后只需在函数顶部或init()类型函数

中检查它
if (options === 'toggle'){ toggleTermHighlighting(); return this; }

答案 1 :(得分:0)

您将不得不将“toggleTermHighlighting”本身作为一个公开的jQuery函数,或者将其功能作为现有方法的一个选项公开。好吧,如果你想做一些有点奇怪的事情,你可以将函数(以及你喜欢的任何东西)填充到受影响对象的数据元素中(参见jQuery“data”函数)。