javascript - 如何观察 HTMLCollection?

标签 javascript dom

有点好奇,因为我知道 HTMLCollections 会自动更新自己,所以我尝试使用 Proxy 观察它们。如下所示


let imagesCollection = document.images;

let io = new Proxy(imagesCollection, {
    set: (target, prop, value, reciever) => {
        // do stuff
        // apply default behaviour
        return Reflect.set(target, prop, value);
    }
});

// test the block by adding new elements

document.body.insertAdjacentHTML("beforeend", "<img>");
document.body.insertAdjacentHTML("beforeend", "<img class='img'>");
document.body.insertAdjacentHTML(
    "beforeend",
    "<img class='img' src='https://picsum.photos/200/300'>"
);


但是当尝试动态添加一些图像时,没有任何 react ......
所以我的问题是:
  • 这甚至可能吗?
  • 如果是,我做错了吗?
  • 最佳答案

    如果我理解正确,代理会拦截代理的操作,而不是目标:

    let target = {};
    
    let proxy = new Proxy(target, {
        set: (target, prop, value, reciever) => {
            console.log(prop, value);
            return Reflect.set(target, prop, value);
        }
    });
    
    target.foo = 'I am not intercepted.';
    proxy.bar = 'I am intercepted.';

    所以在你的情况下,操作 io被拦截,同时操作 imagesCollectiondocument.images不是。
    所以突变观察者是一个更好的选择。

    关于javascript - 如何观察 HTMLCollection?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67948240/

    相关文章:

    javascript - 修改无效的javascript

    javascript - 切换可见性时的 DOM 操作性能

    javascript - 使用 vanilla JS 开 Jest - 在 DOM 上测试生成的元素

    javascript - 为什么事件会在 dom 中冒泡?

    javascript - 当复选框处于(未选中状态)时显示另一个文本

    javascript - 如何使用 Azure 移动服务 API 功能

    javascript - IE9 提示用户提交隐藏的 iFrame

    javascript - 表行的 OnClick 事件是否传播到所有包含的元素?

    javascript - 如何在给定点直接或通过另一个元素的空腔检测哪个元素可见/位于顶部?

    c# - C# MVC4.0 中的有效 Math.Random