javascript - Mutations-Observer 获取添加的元素

标签 javascript mutation-observers

我正在尝试使用 mutationsobserver 仅记录添加的节点。这是我到目前为止得到的。我无法通过这部分。我卡住了。我试图在它第一次启动时获取 NodeList 索引计数,并且只使用它记录新添加的节点但最终失败了。我不知道如何做到这一点。老实说,直到今天早上我才知道突变观察者。

这是我当前的脚本

const targetNode = document.getElementById('team_log_actual');

// Options for the observer (which mutations to observe)
const config = { attributes: true, childList: true, subtree: true };

// Callback function to execute when mutations are observed
const callback = function(mutationsList, observer) {
for(let mutation of mutationsList) {
    if (mutation.type === 'childList') {
        console.log('a node added.' + mutation.target);
        var html = mutation.target;
        var htmlstring = JSON.stringify(html);
        console.log(html)


    }
}
};

const observer = new MutationObserver(callback);
observer.observe(targetNode, config);

每次添加一个新的。我只想对添加的节点进行字符串化。

最佳答案

您可以使用 mutation.addedNodes 查看元素中添加了哪些节点。如果你只想打印所有节点的 innerHTML,你可以这样做:

console.log( Array.from( mutation.addedNodes ).map( node => node.innerHTML ).join('\r\n') );

这将首先将 addedNodes(类型为 NodeList)转换为数组,然后 map 将为每个节点检索 innerHTML。然后您可以将其连接在一起并打印出更改。

下面的代码将模拟这种行为。

对于配置,您不必检查属性或子树,childList 会按照您的要求做

const targetNode = document.getElementById('team_log_actual');

// Options for the observer (which mutations to observe)
const config = {
  attributes: false,
  childList: true,
  subtree: false
};

// Callback function to execute when mutations are observed
const callback = function(mutationsList, observer) {
  for (let mutation of mutationsList) {
    if (mutation.type === 'childList') {
      console.log( Array.from( mutation.addedNodes ).map( node => node.innerHTML ).join('\r\n') );
    }
  }
};

const observer = new MutationObserver(callback);
observer.observe(targetNode, config);

let counter = 0;
setInterval(function() {
  var span = document.createElement('span');
  span.innerHTML = 'I am element ' + (++counter);
  targetNode.appendChild(span);
}, 1000);
<div id="team_log_actual"></div>

关于javascript - Mutations-Observer 获取添加的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58087958/

相关文章:

javascript - 命名匿名函数与匿名函数

javascript - 正则表达式只接受正数和小数

javascript - 检查突变观察者是否通过某些条件的最佳方法

async-await - JavaScript : how can I use async/await to "await" something that happens in MutationObserver?

javascript - 在不牺牲性能的情况下检测给定元素是否已从 DOM 中移除

Dart Polymer 1.0 有没有办法在客户端和服务器端使用一个 "refectable"类?

javascript - 如何在多个操作之间共享对象的单个实例?

javascript - 双重 jQuery 验证 2 个小数输入并获取更大的数字

JavaScript 变量提升行为

javascript - MutationObserver 和 querySelectorAll