突变观察者不起作用

Mutation Observer does not work

本文关键字:不起作用 观察者 突变      更新时间:2023-09-26

jsFiddle

上面的脚本无法正常工作。我想将DOMNodeInserted(第19行)替换为MutationObserver(第21行),但当我使用MutationObserver时,它不起作用。

// Line 19 (works well)
document.body.addEventListener('DOMNodeInserted', function (event) {linkifyContainer(event.target);}, false);
// Line 21 (does not work)
var observer=new window.MutationObserver(function(mutations){mutations.forEach(function(mutation){linkifyContainer(mutation.addedNodes)})});observer.observe(document.body,{childList:true,subtree:true});

第21行应该有问题,但我不知道问题出在哪里,我该怎么办。
我用chrome28和firefox23检查了这个。
它是chrome的扩展,所以我不必使用"WebKitMutationObserver"或"MozMutationObserver"。

请告诉我解决办法。

您的突变观测器代码运行良好。您试图向linkifyContainer传递NodeList参数(即mutation.addedNodes),但linkifyContainer希望传递单个元素。

比较呼叫:

linkifyContainer(event.target)

linkifyContainer(mutation.addedNodes)

第二种情况是NodeList,而不是单个DOM节点,如复数属性名称addedNodes所示。

只需使用mutation.addedNodes[0]mutation.addedNodes:上的循环

for(var i=0; i<mutation.addedNodes; ++i) {
    linkifyContainer(mutation.addedNodes[i]);
}