大多数 jQuery 插件在您首次初始化时都会绑定(bind)到 DOM 节点。
$('#foo').bar({options: ...});
如何检查当前绑定(bind)到 DOM 节点(例如 #foo
)的插件或对象?
if($('#foo').bar)
if($.inArray('bar', $('#foo').eq(0)))
if($('#foo').eq(0).indexOf('bar'))
if($('#foo').hasOwnProperty('bar'))
例如,可以将事件绑定(bind)到这样的对象
console.log($('#foo').data('events'));
最佳答案
除非插件本身定义了某种方式来改变它正在处理的元素,否则这是不可能的。例如:
$.fn.extend({
foo: function() { console.log("I am foo!"); }
});
$('#bar').foo();
这里我定义了一个完整的(好吧,或多或少)jQuery 插件,它甚至不尝试与其调用元素交互。尽管如此,您仍然可以在任何 jQuery 包装的元素集合上按照您的意愿使用它,因为任何 jQuery 包装的元素集合在其原型(prototype)中都有此方法,因为这一行(来自 jquery .js
):
jQuery.fn = jQuery.prototype = { ... }
...在调用 $.fn.extend
来插入该插件之后,没有双关语的意图。
但即使我的插件需要以某种方式更改其调用元素,如下所示:
$.fn.extend({
bar: function() { this.html('I am all bar now!'); }
});
$('#bar').bar();
...基本上,我仍然需要通过一些外部事件(DOM Mutation 事件)来处理这个问题,而不仅仅是依赖于一些内部 jQuery 日志记录。
关于jquery - 如果检查 jQuery 插件是否已绑定(bind)到 DOM 节点,您该如何检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13143745/