假设某些DOM节点(如<a>
标记)与某些事件绑定,例如单击以打开弹出窗口或其他任何事件。但是我无法读取包含绑定内容的代码。我怎么解开他们所有人?有没有简单的方法/黑客?
再次更新:
-
我使用Chrome检查了Elements > Event Listeners
,发现我的a
上有点击事件处理程序,为了确保我是对的,我尝试了以下步骤:
首先,我从控制台手动添加了一个点击处理程序,如下所示:
$a.click(function(){console.log(1)});
然后我回到听众标签,按下刷新按钮,还有一个(现在有两个处理程序)。
然后我用:
$a.off();
我又回去了,我手动添加的那个已经消失了,只剩下一个处理程序(我想放弃的那个)
我使用了替换节点方式,然后再回过头来,我发现点击处理程序已经完全消失了。这就是我想要的。
所以,它就像$a.off()
一样无效,即使它非常确定事件是绑定到元素本身,而不是它的父节点。
-
更新
$.unbind()
和$.off()
,但都没有效果$('#myEl').replaceWith($('#myEl').clone());
,这很好用。但似乎这种方式并不是很完美。答案 0 :(得分:2)
您可以创建元素的克隆并替换它。克隆元素不会克隆附加的事件侦听器。
var original = document.getElementById('id'),
var clone = original.cloneNode(true);
original.parentNode.replaceChild(clone, original);
答案 1 :(得分:2)
没有API可以做到这一点。根据对元素进行的修改,您可以克隆节点,移动子节点并用其克隆替换原始节点:
var clone = element.cloneNode();
while (element.firstChild) {
clone.appendChild(element.lastChild);
}
element.parentNode.replaceChild(clone, element);
cloneNode
将复制所有属性,但不会复制对DOM属性所做的任何更改。
答案 2 :(得分:1)
也许你可以使用jquery .unbind():
$('a').unbind()
在新版本的jquery中,建议使用.off()。
$('a').off()
如果这不起作用,则意味着您的事件不对此元素具有约束力,但是其他像父元素一样,您可能在脚本中有此代码,并且您必须决定如何处理它:
$('.parent').on('click','a',callback);