我想在容器的所有节点上附加一个“mouseup”事件,包括使用 jQuery 的文本节点。我怎么做?
更新:
如果我有一些这样的 HTML 片段:
<p>Some text node <strong>strong text</strong> another text node.</p>
目前,$("p *") 将事件分别应用于<p>
而<strong>
不是应用于其中的 2 个文本节点<p>
。修改源以添加类不是一种选择。
我想在容器的所有节点上附加一个“mouseup”事件,包括使用 jQuery 的文本节点。我怎么做?
更新:
如果我有一些这样的 HTML 片段:
<p>Some text node <strong>strong text</strong> another text node.</p>
目前,$("p *") 将事件分别应用于<p>
而<strong>
不是应用于其中的 2 个文本节点<p>
。修改源以添加类不是一种选择。
bobince 是正确的,您不能在 Text 节点上设置事件处理程序。听起来你想要类似的东西
<p><span>Some text node</span> <strong>strong text</strong><span> another text node.</span></p>
并且事件将附加到跨度标签上。但是,如果您无法更改源,那将不起作用。
虽然 Tatu 的答案应该有效(使用 .mouseup 而不是 .click 除外),但您确定每个节点上都需要一个事件处理程序吗?如果您使用绑定
$('#container').mouseup(function(event){//code})
只要 #container 内的任何元素上发生 mouseup 事件,事件冒泡模型就会调用相同的函数,并且实际触发事件的 DOM 节点将包含在 event.target 属性中。这在大多数情况下效率更高。
$('#container *').mouseup(function() { ... });
这会将 mouseup 事件处理程序绑定到#container 内的所有节点。
编辑
将 click -> mouseup 更改为更清晰。
您不能在Text
节点上设置事件处理程序。文本节点不像节点、节点和对象那样实现EventTarget接口。Element
Document
window
你也不应该这样做。mouseup
在父元素上设置一个处理程序,您将获得mouseup
其所有子内容的事件。这是因为mouseup
事件通过其祖先“冒泡” 。
我认为最简单的方法是向所有节点添加一个类。jquery 选择器将很简单: $('.yourClassName').dostuff()