1

我想在容器的所有节点上附加一个“mouseup”事件,包括使用 jQuery 的文本节点。我怎么做?

更新:

如果我有一些这样的 HTML 片段:

<p>Some text node <strong>strong text</strong> another text node.</p>

目前,$("p *") 将事件分别应用于<p><strong>不是应用于其中的 2 个文本节点<p>。修改源以添加类不是一种选择。

4

5 回答 5

3

bobince 是正确的,您不能在 Text 节点上设置事件处理程序。听起来你想要类似的东西

<p><span>Some text node</span> <strong>strong text</strong><span> another text node.</span></p>

并且事件将附加到跨度标签上。但是,如果您无法更改源,那将不起作用。

于 2009-12-10T13:47:32.937 回答
2

虽然 Tatu 的答案应该有效(使用 .mouseup 而不是 .click 除外),但您确定每个节点上都需要一个事件处理程序吗?如果您使用绑定

$('#container').mouseup(function(event){//code})

只要 #container 内的任何元素上发生 mouseup 事件,事件冒泡模型就会调用相同的函数,并且实际触发事件的 DOM 节点将包含在 event.target 属性中。这在大多数情况下效率更高。

于 2009-12-10T13:19:36.320 回答
1
$('#container *').mouseup(function() { ... });

这会将 mouseup 事件处理程序绑定到#container 内的所有节点。

编辑

将 click -> mouseup 更改为更清晰。

于 2009-12-10T13:13:21.057 回答
1

您不能在Text节点上设置事件处理程序。文本节点不像节点、节点和对象那样实现EventTarget接口。ElementDocumentwindow

你也不应该这样做。mouseup在父元素上设置一个处理程序,您将获得mouseup其所有子内容的事件。这是因为mouseup事件通过其祖先“冒泡” 。

于 2009-12-10T13:34:13.537 回答
0

我认为最简单的方法是向所有节点添加一个类。jquery 选择器将很简单: $('.yourClassName').dostuff()

于 2009-12-10T13:12:05.397 回答