如果检查jQuery插件已经绑定到DOM节点,你怎么办?

Xeo*_*oss 27 jquery jquery-plugins

首次初始化时,大多数jQuery插件都绑定/绑定到DOM节点.

$('#foo').bar({options: ...});
Run Code Online (Sandbox Code Playgroud)

你如何检查当前绑定到DOM节点的插件或对象是什么样的#foo

if($('#foo').bar)
if($.inArray('bar', $('#foo').eq(0)))
if($('#foo').eq(0).indexOf('bar'))
if($('#foo').hasOwnProperty('bar'))
Run Code Online (Sandbox Code Playgroud)

例如,可以将事件绑定到这样的对象

console.log($('#foo').data('events'));
Run Code Online (Sandbox Code Playgroud)

rai*_*7ow 8

除非插件本身定义了一些改变它正在工作的元素的方法,否则它是不可能的.例如:

$.fn.extend({
  foo: function() { console.log("I am foo!"); }
});

$('#bar').foo();
Run Code Online (Sandbox Code Playgroud)

在这里,我定义了一个完整的(更好,更少)jQuery插件,它甚至不尝试与其调用元素进行交互.仍然,你可以在任何jQuery包装的元素集合中使用它,因为任何jQuery包装的元素集合在其原型中都有这个方法,因为这行(from jquery.js):

jQuery.fn = jQuery.prototype = { ... }
Run Code Online (Sandbox Code Playgroud)

...之后$.fn.extend被称为插入该插件,没有双关语意图.

但即使我的插件需要以某种方式更改其调用元素,如下所示:

$.fn.extend({
  bar: function() { this.html('I am all bar now!'); }
});
$('#bar').bar();
Run Code Online (Sandbox Code Playgroud)

...基本上,我仍然需要处理一些外部事件(DOM Mutation),而不仅仅依赖于一些内部jQuery日志记录.