当元素的 innerHTML 改变时触发一个函数?
Fire a function when innerHTML of element changes?
我想在 div
元素的 innerHTML 发生变化时触发一个函数。
已使用 element.addEventListener('DOMCharacterDataModified', myFunction());
进行测试,但它似乎无法正常工作。它在页面加载时触发一次但之后再也不会触发?请参阅下面的示例代码。
有人能解决我的任务吗?非常感谢任何帮助!
任务:
- 我有一个空的
div
。
- 它会随机输入来自外部来源的数据(我无法控制)。
- 每当 innerHTML 发生变化时,我都想触发
myFunction()
。
我当前的示例代码:
var element = document.getElementById('div');
element.addEventListener('DOMCharacterDataModified', myFunction());
function myFunction() {
console.log(element.innerHTML);
}
setTimeout(function(){
element.innerHTML = 'Hello World!';
}, 1000);
setTimeout(function(){
element.innerHTML = 'Hello Space!';
}, 2000);
setTimeout
可视化从外部源馈送的数据。
如果可能只需要 JS,但如果 确实 需要,可以使用 jQuery。
提前致谢!
// wirrew
使用DOMSubtreeModified
事件:
var element = document.getElementById('div');
element.addEventListener('DOMSubtreeModified', myFunction);
function myFunction(e) {
console.log(element.innerHTML);
}
setTimeout(function(){
element.innerHTML = 'Hello World!';
}, 1000);
setTimeout(function(){
element.innerHTML = 'Hello Space!';
}, 2000);
<div id="div"></div>
顺便说一句,DOM 突变事件是 deprecated. Use MutationObserver:
window.addEventListener('load', function () {
var element = document.getElementById('div');
var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;
var observer = new MutationObserver(myFunction);
observer.observe(element, {
childList: true
});
function myFunction() {
console.log(element);
console.log(element.innerHTML);
}
setTimeout(function(){
element.innerHTML = 'Hello World!';
}, 1000);
setTimeout(function(){
element.innerHTML = 'Hello Space!';
}, 2000);
});
<div id="div">
注意:可能不是最好的解释,请添加您的知识以使其更清楚。
如果您愿意使用元素属性,那么可以创建自定义元素并根据需要向属性添加 Observers
。 attributeChangedCallback
是您可以为侦听器添加自定义代码的地方。
Custom Elements
属于 Web Components
,支持 Chrome
、Opera
和 Safari
。这是 link 解释了关于它们的一切。 https://developer.mozilla.org/en-US/docs/Web/Web_Components/Custom_Elements
您可以为 div
元素修改观察者,但我不知道这样,如果您选择这样做,您可能需要更深入地研究。
由于您正在尝试监听单个元素的 innerHTML,因此最好只创建一个自定义元素,如代码片段中的元素。
class ObservableDiv extends HTMLElement {
// Monitor the 'name' attribute for changes.
static get observedAttributes() {return ['name']; }
// Respond to attribute changes.
attributeChangedCallback(attr, oldValue, newValue) {
if (attr == 'name') {
this.textContent = `HELLO, ${newValue}`;
}
}
}
// Define the new element
customElements.define('observable-div', ObservableDiv);
setTimeout(() => { document.getElementById("change").setAttribute("name", "I CHANGED A LOTTTTTTTTTTT") }, 1000)
<observable-div id="change" name="BEFORE CHANGING"></observable-div>
PS :
这可能根本不是一个正确的答案,但我发布这个是因为这个策略对我来说更好,而不是依赖于过去偶尔工作但从不一致的子树监听器。唯一的缺点是它没有良好的浏览器支持。可能已经有一些不错的 polyfills
可用。
我想在 div
元素的 innerHTML 发生变化时触发一个函数。
已使用 element.addEventListener('DOMCharacterDataModified', myFunction());
进行测试,但它似乎无法正常工作。它在页面加载时触发一次但之后再也不会触发?请参阅下面的示例代码。
有人能解决我的任务吗?非常感谢任何帮助!
任务:
- 我有一个空的
div
。 - 它会随机输入来自外部来源的数据(我无法控制)。
- 每当 innerHTML 发生变化时,我都想触发
myFunction()
。
我当前的示例代码:
var element = document.getElementById('div');
element.addEventListener('DOMCharacterDataModified', myFunction());
function myFunction() {
console.log(element.innerHTML);
}
setTimeout(function(){
element.innerHTML = 'Hello World!';
}, 1000);
setTimeout(function(){
element.innerHTML = 'Hello Space!';
}, 2000);
setTimeout
可视化从外部源馈送的数据。
如果可能只需要 JS,但如果 确实 需要,可以使用 jQuery。
提前致谢!
// wirrew
使用DOMSubtreeModified
事件:
var element = document.getElementById('div');
element.addEventListener('DOMSubtreeModified', myFunction);
function myFunction(e) {
console.log(element.innerHTML);
}
setTimeout(function(){
element.innerHTML = 'Hello World!';
}, 1000);
setTimeout(function(){
element.innerHTML = 'Hello Space!';
}, 2000);
<div id="div"></div>
顺便说一句,DOM 突变事件是 deprecated. Use MutationObserver:
window.addEventListener('load', function () {
var element = document.getElementById('div');
var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;
var observer = new MutationObserver(myFunction);
observer.observe(element, {
childList: true
});
function myFunction() {
console.log(element);
console.log(element.innerHTML);
}
setTimeout(function(){
element.innerHTML = 'Hello World!';
}, 1000);
setTimeout(function(){
element.innerHTML = 'Hello Space!';
}, 2000);
});
<div id="div">
注意:可能不是最好的解释,请添加您的知识以使其更清楚。
如果您愿意使用元素属性,那么可以创建自定义元素并根据需要向属性添加 Observers
。 attributeChangedCallback
是您可以为侦听器添加自定义代码的地方。
Custom Elements
属于 Web Components
,支持 Chrome
、Opera
和 Safari
。这是 link 解释了关于它们的一切。 https://developer.mozilla.org/en-US/docs/Web/Web_Components/Custom_Elements
您可以为 div
元素修改观察者,但我不知道这样,如果您选择这样做,您可能需要更深入地研究。
由于您正在尝试监听单个元素的 innerHTML,因此最好只创建一个自定义元素,如代码片段中的元素。
class ObservableDiv extends HTMLElement {
// Monitor the 'name' attribute for changes.
static get observedAttributes() {return ['name']; }
// Respond to attribute changes.
attributeChangedCallback(attr, oldValue, newValue) {
if (attr == 'name') {
this.textContent = `HELLO, ${newValue}`;
}
}
}
// Define the new element
customElements.define('observable-div', ObservableDiv);
setTimeout(() => { document.getElementById("change").setAttribute("name", "I CHANGED A LOTTTTTTTTTTT") }, 1000)
<observable-div id="change" name="BEFORE CHANGING"></observable-div>
PS :
这可能根本不是一个正确的答案,但我发布这个是因为这个策略对我来说更好,而不是依赖于过去偶尔工作但从不一致的子树监听器。唯一的缺点是它没有良好的浏览器支持。可能已经有一些不错的 polyfills
可用。