0

我想知道是否有一个简单的解决方案:我在网格中定义的元素上多次创建了以下 JQuery 插件

(function ($) {
    $.fn.MyPlugin = function () {

        $(this).mouseenter(function () {
           //do something for single plugin instance
        });
    };

})(jQuery);

但是,我怎样才能唯一地识别我正在触发鼠标输入功能的插件实例。使用当前设置,我引用了所有实例,但我只想触发其中一个的 mouseenter。

插件是这样创建的:

$(".someClass").MyPlugin(); 
4

2 回答 2

2

您不需要多次创建插件,这就是它被称为插件的原因。您只需将其插入任何您想要的地方。查看jquery 插件创作页面,了解如何开始编写插件。它提供了一些不错的模板。

在您的代码$(this)中是多余的,因为this已经是一个 jQuery 对象。然后,您希望始终return this在插件中保持可链接性。您可以$(this)mousenter事件内部使用来引用 DOM 中插件正在处理的当前元素。

return this.each()有时,循环每个元素并做一些事情也很有用。在这种情况下,由于您附加了一个事件,因此它无济于事,因为事件适用于项目集合中的每个项目;在这种情况下,this指的是您调用插件的集合:

$.fn.MyPlugin = function () {

    return this.mouseenter(function () {
       $(this).something();
       //do something for single plugin instance
    });

};

然后你会这样调用插件:

$('elements').MyPlugin();

只需在您想要的元素上调用插件,这些元素就会mouseenter附加事件。

于 2012-04-24T21:56:41.250 回答
1

您使用插件的 html 是什么?mouseenter 可以连接到一个元素 id,而不是调用 (this).mouseenter,而是通过 id 调用 div(即 $("div.somediv").mouseenter(function(){ .... 你想要做什么。 ....}

jquery 站点显示了一个使用多个鼠标事件嵌套 div 的示例。

http://api.jquery.com/mouseenter/

于 2012-04-24T21:52:07.720 回答