Javascript 如何停止DOMSubtreeModified事件上的冒泡?

Javascript 如何停止DOMSubtreeModified事件上的冒泡?,javascript,javascript-events,Javascript,Javascript Events,我有一个非常简单的场景。我有以下HTML: <h1>Hello</h1> <input type="button" value="Change" id="change" /> 因此,这基本上只是更改H1节点的文本,然后触发事件。但是,事件触发了两次(我假设是冒泡的结果)。正如你们所看到的,我试着把所有的东西都扔向它,试图让它不开火两次,但这并不能阻止它。如果您想使用该代码,可以在以下位置查看:。任何帮助都将不胜感激。谢谢。这种行为不是由冒泡引起的 $.tex

我有一个非常简单的场景。我有以下HTML:

<h1>Hello</h1>
<input type="button" value="Change" id="change" />

因此,这基本上只是更改H1节点的文本,然后触发事件。但是,事件触发了两次(我假设是冒泡的结果)。正如你们所看到的,我试着把所有的东西都扔向它,试图让它不开火两次,但这并不能阻止它。如果您想使用该代码,可以在以下位置查看:。任何帮助都将不胜感激。谢谢。

这种行为不是由冒泡引起的

$.text()执行两个步骤来设置新文本:

  • 删除现有内容
  • 插入新的textNode
  • 这两个步骤都会触发DOMSubtreeModified,因此您会收到2个警报

    例如,您可以使用以下各项:

    $("h1")[0].firstChild.data="World";
    

    这只会更改textNode的内容,而不会删除节点。

    或者您也可以检查传播是否已停止。看看l

    ev.preventDefault()将导致IE抛出异常Oh。很不错的。我不知道。我很好奇为什么文本使用两步过程?我的意思是,您提供的示例似乎将此压缩为一个步骤……我的建议假设只有一个textNode,但jQuery的text()将替换整个内容(可能有多个不同类型的节点)。因此jQuery首先使用他的empty()-方法删除这些节点以避免内存泄漏。
    
    $("h1")[0].firstChild.data="World";