从html元素中识别插件

时间:2011-11-08 12:31:38

标签: jquery jquery-ui

我有一个适用于少数元素的插件。有没有办法存储和检索JQuery插件对象,以便我们可以运行该对象的方法。示例示例如下:

$('#li1').myPlugin(); // apply plugin object to different li
$('#li2').myPlugin(); // apply plugin object to different li
$('#li3').myPlugin(); // apply plugin object to different li

现在我想从其他外部元素上的用户活动中检索对象,以运行插件的某些方法。像

var idx = 2    
$('body').click(function(){ $('li').eq(2).highLight(); })

由于highLightmyPlugin的公共方法,但不是li,因此它不会执行。 我可以将myPlugin对象设置为元素的属性(但不是字符串),或者我可以在插件初始化中执行此操作,

$(this)[0].obj = this; // sounds weird.

除了创建全局关联数组以存储具有元素Id作为键的对象之外,还有什么其他选项。在我的情况下这是不可能的,因为我的插件元素可能有也可能没有Id。

修改

这是示例插件,实际上太大了,不能在这里发布。目标是通过外部活动识别与元素相关联的插件。示例示例使用body.click但假设我们无法在插件中实现click。实际上,事件可以是插件未知的任何外部自定义事件。我希望我很清楚。

 (function ($) {
    $.fn.myPlugin = function (){
        var ele = this;

        // elr.get(0).extension = this; // can I do this, cross browser?
        // so that later i can call it as 
        // $('li').eq(1).get(0).extension.highLight()

        this.highLight = function(){
             ele.css('color','red');
        }
        this.blueIt =  function(){
             ele.css('color','blue');
        }
        this.blueIt();
    }
 })(jQuery);

1 个答案:

答案 0 :(得分:1)

两个主要的替代方法是使用.data() jQuery方法存储对所需内容的引用,或使用$(sel).pluginName("aMethod", anyData)的约定。

我从未成为后者的忠实粉丝,但这很常见。