Baseline Widely available
DOM ã® MutationObserver()
ã³ã³ã¹ãã©ã¯ã¿ã¼ã¯ãMutationObserver
ã¤ã³ã¿ã¼ãã§ã¤ã¹ã®ä¸é¨ã§ãæå®ãããã³ã¼ã«ããã¯ã DOM ã¤ãã³ããçºçããã¨ãã«å®è¡ãããªãã¶ã¼ãã¼ã使ãã¦è¿ãã¾ãã
DOM ã®ç£è¦ã¯ããã«éå§ãããããã§ã¯ããã¾ãããæåã« observe()
ã¡ã½ãããå¼ã³åºããDOM ã®ã©ã®é¨åãç£è¦ããã©ã®ãããªå¤æ´ãç£è¦ããããæ±ºããªããã°ãªãã¾ããã
new MutationObserver(callback)
弿°
callback
対象ã¨ãªããã¼ãããµãããªã¼ãããã³æå®ããããªãã·ã§ã³ã®æ¡ä»¶ãæºãã DOM ã®å¤æ´ãèµ·ãããã³ã«å¼ã³åºããã颿°ã§ãã
ãã® callback
颿°ã¯ã2 ã¤ã®å¼æ°ãåãåãã¾ãã
MutationRecord
ãªãã¸ã§ã¯ãã®é
åãcallback
ãå¼ã³åºãã MutationObserver
ã§ãããã㯠MutationObserver.disconnect()
ã使ç¨ãã¦ãªãã¶ã¼ãã¼ãåæããã¨ãã«ãã使ããã¾ãã詳細ã«ã¤ãã¦ã¯ã以ä¸ã®ä¾ãåç §ãã¦ãã ããã
æå®ãããã³ã¼ã«ããã¯ã DOM ã®å¤æ´ãçºçããã¨ãã«å¼ã³åºãããã«è¨å®ããã MutationObserver
ãªãã¸ã§ã¯ãã
ãã®ä¾ã«ã¯ããªã¹ãã« <li>
è¦ç´ ã追å ãããã¿ã³ã¨ããªã¹ãããæåã® <li>
ãé¤å»ãããã¿ã³ãããã¾ãã
ãªã¹ãã®å¤æ´ãéç¥ãã¦ãããããã«ãMutationObserver
ã使ç¨ãã¾ããã³ã¼ã«ããã¯å
ã§ã追å ã¨é¤å»ããã°åºåãããªã¹ãã空ã«ãªã£ããããã«ãªãã¶ã¼ãã¼ãåæãã¾ãã
ãä¾ããªã»ããããã¿ã³ã¯ããã®ä¾ãå ã®ç¶æ ã«ãªã»ãããã¾ãã
HTML<button id="add">åã追å </button>
<button id="remove">åãé¤å»</button>
<button id="reset">ä¾ããªã»ãã</button>
<ul id="container"></ul>
<pre id="log"></pre>
CSS
#container,
#log {
height: 150px;
overflow: scroll;
}
#container li {
background-color: paleturquoise;
margin: 0.5rem;
}
JavaScript
const add = document.querySelector("#add");
const remove = document.querySelector("#remove");
const reset = document.querySelector("#reset");
const container = document.querySelector("#container");
const log = document.querySelector("#log");
let namePrefix = 0;
add.addEventListener("click", () => {
const newItem = document.createElement("li");
newItem.textContent = `item ${namePrefix}`;
container.appendChild(newItem);
namePrefix++;
});
remove.addEventListener("click", () => {
const itemToRemove = document.querySelector("li");
if (itemToRemove) {
itemToRemove.parentNode.removeChild(itemToRemove);
}
});
reset.addEventListener("click", () => {
document.location.reload();
});
function logChanges(records, observer) {
for (const record of records) {
for (const addedNode of record.addedNodes) {
log.textContent = `追å : ${addedNode.textContent}\n${log.textContent}`;
}
for (const removedNode of record.removedNodes) {
log.textContent = `é¤å»: ${removedNode.textContent}\n${log.textContent}`;
}
if (record.target.childNodes.length === 0) {
log.textContent = `åæãã¾ãã\n${log.textContent}`;
observer.disconnect();
}
console.log(record.target.childNodes.length);
}
}
const observerOptions = {
childList: true,
subtree: true,
};
const observer = new MutationObserver(logChanges);
observer.observe(container, observerOptions);
çµæ
ãåã追å ããã¯ãªãã¯ããã¨ãªã¹ãã¢ã¤ãã ã追å ããããåãé¤å»ããã¯ãªãã¯ããã¨ãªã¹ãã¢ã¤ãã ãé¤å»ããã¾ãã ãªãã¶ã¼ãã¼ã®ã³ã¼ã«ããã¯ã¯è¿½å ã¨é¤å»ããã°åºåãã¾ãã ãªã¹ãã空ã«ãªãã¨ããã«ããªãã¶ã¼ãã¼ã¯ãåæãã¡ãã»ã¼ã¸ããã°åºåãããªãã¶ã¼ãã¼ãåæãã¾ãã
ãä¾ããªã»ããããã¿ã³ãæ¼ãã¨ããã®ä¾ãåèªã¿è¾¼ã¿ãããã®ã§ãããä¸åº¦è©¦ããã¨ãã§ãã¾ãã
仿§æ¸ ãã©ã¦ã¶ã¼ã®äºææ§RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4