使用 JavaScript 的 HTMLCollection 更改事件

Posted

技术标签:

【中文标题】使用 JavaScript 的 HTMLCollection 更改事件【英文标题】:HTMLCollection change event with JavaScript 【发布时间】:2014-03-30 12:47:58 【问题描述】:

如果我假设正确,htmlCollection 是动态的。

在其中自动将更改作为项目添加或从文档中删除。

有没有办法使用事件处理程序来检测 HTMLCollection 大小的变化?当然除了使用计时器不断轮询集合。

【问题讨论】:

需要支持哪些浏览器? 我不认为有这样的事件,但 MutationObserver 可能会有所帮助,developer.mozilla.org/en/docs/Web/API/MutationObserver @Andrew 这也是我的想法。问题是它在 IE 中不起作用 跨浏览器。自然。不幸的是,哈哈。 这能回答你的问题吗? Detect changes in the DOM 【参考方案1】:

为了避免混淆,动态表示在运行时修改了某些内容。 HTMLCollection 是live,这意味着它是动态的,而且它不仅可以通过客户端脚本进行更改,还可以通过here 声明的浏览器算法进行更改。这些算法可以被MutationObserver(今天是cross-browser)拦截,下面的测试代码解释:

function addItem() 
    var li = document.createElement("li");
    li.innerHTML = "item";
    list.appendChild(li);


var data = list.children;

function watch(data) 
    console.log(data);


var observer = new MutationObserver(watch);
observer.observe(list, childList: true);
<ul id="list"></ul>
<button onclick="addItem()">Add item</button>
<button onclick="console.log(data.length)">Test</button>

这里的data 是在加载阶段(在 DOMContentLoaded 触发之前)创建的实时 HTMLCollection,但只要按下 Add Item 按钮就会被浏览器算法修改(可以通过 测试按钮)。算法被observer 对象拦截,该对象以MutationRecord 作为参数调用watch 回调。这可能很昂贵,因此需要仔细设置options,并且在不需要时应断开观察者的连接。

【讨论】:

以上是关于使用 JavaScript 的 HTMLCollection 更改事件的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript(js)基础

JavaScript 在HTML中使用 JavaScript

javascript 使用javascript设置选定的值

javascript 使用Javascript的后备图像

javascript 使用Javascript的后备图像

javascript 使用