- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
基于this question ,我写了以下代码:
$(function() {
$( document ).on('DOMNodeInserted',"span:contains('Suggested Post')", function() {
console.log("New Suggested Post found");
})
})
当我向下滚动页面并创建这些元素时,我没有看到我期望看到的控制台消息。但是,如果我在控制台中手动输入 $("span:contains('Suggested Post')").length
,输出会继续增加。
想法?
@Barmar 请求的片段。它的行为与我的现实世界场景并不完全一样,但它仍然不正确......
$(document).on('DOMNodeInserted', "div:contains('Banana')", function() {
console.log("new banana detected!");
});
$('#btn').on('click', function() {
var fruit = '';
switch (Math.floor((Math.random() * 3) + 1)) {
case 1:
fruit = 'Apple'
break;
case 2:
fruit = 'Orange'
break;
case 3:
fruit = 'Banana'
break;
default:
fruit = "WTF"
}
$('#fakeDocument').append('<div>' + fruit + '</div>');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="fakeDocument">
<strong>Banana Detector</strong>
<button id="btn" type="button">Add Banana!</button>
</div>
最佳答案
您需要将委托(delegate)绑定(bind)到要插入的元素的直接父元素。
其原因是 DOMNodeInserted
事件冒泡。如果将其绑定(bind)到外部容器,它将冒泡到包含 DIV,并且由于 Banana Detector
标题,该 DIV 将匹配 :contains(Banana)
。即使您将其移出容器,它也会匹配,因为之前添加的节点包含 Banana
。
这就是为什么在实际匹配时会触发两次:它会为匹配的新元素触发一次,并为始终匹配的容器再次触发。
我最初认为 event.StopPropagation()
可以解决问题,但事实并非如此。当有实际比赛时,它将防止双重射击。但当没有匹配时它仍然会触发 - 事件不会在新元素上触发(因为它不匹配),因此 event.stopPropagation()
不会运行,所以它冒泡到匹配的容器中。
$("#fakeDocument").on('DOMNodeInserted', "div:contains('Banana')", function() {
console.log("new banana detected!");
});
$('#btn').on('click', function() {
var fruit = '';
switch (Math.floor((Math.random() * 3) + 1)) {
case 1:
fruit = 'Apple'
break;
case 2:
fruit = 'Orange'
break;
case 3:
fruit = 'Banana'
break;
default:
fruit = "WTF"
}
$('#fakeDocument').append('<div>' + fruit + '</div>');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="fakeDocument">
<strong>Banana Detector</strong>
<button id="btn" type="button">Add Banana!</button>
</div>
关于javascript - DOMNodeInserted 未按预期工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40617644/
我正在使用 DOMNodeInserted MutationEvent,有什么方法可以使用此事件仅选择新插入的元素吗?当所有输入插入文档时,我必须向它们添加类。我正在通过 AJAX 请求向表单插入新的
基于this question ,我写了以下代码: $(function() { $( document ).on('DOMNodeInserted',"span:contains('Sugg
我有一个问题.. “DOMNodeInserted”没有按预期工作。我不确定我是否正确使用它。 有什么想法吗? 最佳答案 编辑:使用MutationObserver进一步向下滚动以获得更好的方法。 .
DOMNodeInserted event has been deprecated并且所有的突变事件都被突变观察者所取代。 但是,within mutation observers只有配置选项可以观察
我有一个奇怪的问题: 我正在开发一个 chrome 扩展,它在 facebook 中的“喜欢”按钮旁边添加了一个自定义按钮。到目前为止,在很多帮助下,我找到了一种运行脚本的方法,即使帖子被添加到新闻源
众所周知,DOMNodeInserted 会使动态页面变慢,MDN even recommends不完全使用它,但不提供任何替代方案。 我对插入的元素不感兴趣,我只需要知道某些脚本何时修改了 DOM。
我正在尝试编写一个“覆盖”在 Facebook 页面之上的 JavaScript 脚本。它使用 DOMContentLoaded 来检测何时加载内容,然后添加一些额外的东西。但是,因为 Faceboo
我想在每个“喜欢”按钮(chrome 扩展)之后添加一个元素。由于帖子是在不刷新页面的情况下添加到新闻提要中的,因此我必须添加一个事件监听器“DOMNodeInserted”。但是当我尝试将 afte
DOMNodeInserted 当节点“被附加到”或“被附加”时调用事件? 我问这个是因为下面的代码: function AddTextToContainer () { var textNod
当然这个问题很简单,但我就是想不通。 我正在使用 DOMNodeInserted 事件来检测何时插入新元素。 我不知道如何使用当前元素,例如获取它的父元素。 现在我有这样的功能: document.a
除了使用计时器来计算一段时间内的元素数量并寻找变化之外,我想不出更好的方法来模拟这个事件。 是否有某种专有的 IE 版本的 DOMNodeInserted?谢谢。 最佳答案 不,没有。最近的是prop
除了计数器之外,下面的代码工作正常。当我向列表中添加一项时,计数器是准确的,但当我从列表中删除一项时,计数器不会减一。有任何想法吗? HTML 1
我正在尝试监听具有特定类的节点动态添加到 DOM。添加此节点后,我想向此节点添加一个插件实例。我遇到的问题是 DOMNodeInserted 运行了多次,然后在这个导致问题的节点上多次运行我的插件。
我觉得这对于任何非业余爱好者来说可能会立即显而易见,但我已经为此困惑了好几天。 我正在编写一个在文档开始时执行脚本的 Chrome 扩展。我想在加载时重写特定 DIV 的 HTML,但在将它们显示给用
根据wiki中的DOM事件发现in the wiki link here , DOMNodeInserted:当一个节点被添加为另一个节点的子节点时触发 DOMNodeInsertedIntoDocu
我正在开发一个 chrome 扩展,我有一个函数 addToPage() ,它将一个带有 xyz 类的 div 添加到加载的页面。现在,当页面通过某些操作(而不是通过重新加载)更改时,我添加的 div
当一条新的聊天消息出现在 tampermonkey 脚本中的 YouTube 直播流上时,我正在尝试执行某些操作。 我在 ID 为“chat-messages”的 div 上使用 DOMNodeIns
这个问题已经在 stackoverflow 上被问过几次了,但我还没有找到适合我独特情况的解决方案。 我正在寻找替换已弃用的代码 livequery 和 DOMNodeInserted。示例如下所示。
当元素通过 DOMNodeInserted 事件插入到文档中时,我正在应用事件监听器函数。元素快速连续插入,但我只想让我的函数在每批元素插入中执行一次。 我曾尝试在我的闭包中使用一个具有全局范围的 b
如果我在下面运行: $(document).bind('DOMNodeInserted', function(){ $('.new', this).hide(); }); 它会正常运行并且
我是一名优秀的程序员,十分优秀!