44 lines
1.3 KiB
Markdown
44 lines
1.3 KiB
Markdown
---
|
|
title: Observe element mutations
|
|
tags: browser,event
|
|
cover: blue-sunrise
|
|
firstSeen: 2018-01-13T14:58:52+02:00
|
|
lastUpdated: 2020-10-22T20:24:04+03:00
|
|
---
|
|
|
|
Creates a new `MutationObserver` and runs the provided callback for each mutation on the specified element.
|
|
|
|
- Use a [`MutationObserver`](https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver) to observe mutations on the given element.
|
|
- Use `Array.prototype.forEach()` to run the callback for each mutation that is observed.
|
|
- Omit the third argument, `options`, to use the default [options](https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver#MutationObserverInit) (all `true`).
|
|
|
|
```js
|
|
const observeMutations = (element, callback, options) => {
|
|
const observer = new MutationObserver(mutations =>
|
|
mutations.forEach(m => callback(m))
|
|
);
|
|
observer.observe(
|
|
element,
|
|
Object.assign(
|
|
{
|
|
childList: true,
|
|
attributes: true,
|
|
attributeOldValue: true,
|
|
characterData: true,
|
|
characterDataOldValue: true,
|
|
subtree: true,
|
|
},
|
|
options
|
|
)
|
|
);
|
|
return observer;
|
|
};
|
|
```
|
|
|
|
```js
|
|
const obs = observeMutations(document, console.log);
|
|
// Logs all mutations that happen on the page
|
|
obs.disconnect();
|
|
// Disconnects the observer and stops logging mutations on the page
|
|
```
|