2

jsFiddle

上面的脚本不能正常工作。我想将 DOMNodeInserted(Line19) 替换为 MutationObserver(line21),但是当我使用 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”。

请告诉我解决方案。

4

1 回答 1

1

您的变异观察者代码工作正常。您正在尝试传递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]);
}
于 2013-08-28T15:22:26.947 回答