本文介绍了Mutation Observer仅获取特定内容的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有以下结构:
<div class="wrapper">
<div class="col">left</div>
<div class="col">middle</div>
<div class="col">right</div>
</div>
现在我想只有INSIDE $('。col')才能获得节点阻止包含如下:
Now I want to get the nodes ONLY if INSIDE $('.col') a div of class "block" is included like:
这是:是
$('.col')[1].append($('<div class="block">urgent</div>'));
但是没有这个:
$('.col')[1].append($('<div class="different">dontcare</div>'));
我的观察者看起来像这样:
my Observer looks like this:
var observer = new MutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
for (var i = 0; i < mutation.addedNodes.length; i++) {
console.log(mutation.addedNodes[i]);
}
});
});
observer.observe(document, {
childList: true,
subtree:true,
characterData:true,
attributes:true
});
我在镀铬扩展程序中,但这不应该真正重要
I am inside a chrome extension, but that should not really matter
推荐答案
修改你的代码:
-
$ ('。col')[1] .append
抛出一个TypeError,因为你在DOM Node上使用jQuery函数,使用eq
,ethod - 删除
forEach
$('.col')[1].append
throw a TypeError, because you use jQuery function on DOM Node, useeq
,ethod- Remove
for
, addforEach
我在 mutation.addedNodes
.block 元素的检查> NodeList通过
addedNode.classList.contains('block')
I added the check for .block
element in mutation.addedNodes
NodeList viaaddedNode.classList.contains('block')
:
$(function () {
'use strict';
var observer = new MutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
[].slice.call(mutation.addedNodes).forEach(function (addedNode) {
if (addedNode.classList.contains('block')) {
console.log("I'm has a class block, whats next?");
}
});
});
});
observer.observe(document, {
childList: true,
subtree:true,
characterData:true,
attributes:true
});
//Yes
$('.col').eq(1).append($('<div class="block">urgent</div>'));
//No
$('.col').eq(1).append($('<div class="different">dontcare</div>'));
});
这篇关于Mutation Observer仅获取特定内容的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!