jquery - 如果检查 jQuery 插件是否已绑定(bind)到 DOM 节点,您该如何检查?

标签 jquery jquery-plugins

大多数 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/

相关文章:

jQuery 在显示/隐藏之间缓动动画

javascript - 如何在javascript中获取td内部列表的值

javascript - 如何发布到 url 但重定向到其他位置?

jQuery - 如何动态创建提交输入点击

javascript - 如何使按钮在第一次单击后停止提交表单

jquery ui 选择菜单 : How do i set the dynamic width correctly?

javascript - 使用带有验证的 php 在弹出窗口中预览表单详细信息

jQuery:PrettyPhoto API 不起作用

jquery - 重写 jQuery .val() 函数?

javascript - Jquery插件-Ajax弹出