MutationObserverサンプル
動的に追加・削除される要素に対して既存のスクリプトをあてるサンプル
by STSHISHO
HTML
<div id="container">
<input type="button" id="btn_genDiv" value="click">
<!-- ここにid0~id9のdivを生成 -->
</div>
CSS
#container {
margin: 0 auto;
width: 300px;
height: 250px;
background-color: #ccc;
}
[id^=div] {
margin: 2px auto;
width: 200px;
height: 20px;
background-color: #fff;
text-align: center;
}
#div3{
background-color: #fcf;
font-weight: bold;
}
JavaScript
window.onload = () => {
const showAlert = () => alert('clicked')
const genDiv = e => {
const container = document.querySelector('#container')
if (container.querySelectorAll('[id^=div]').length) return
for (let i = 0; i < 10; i++) {
let div = document.createElement('div')
container.appendChild(div)
div.id = `div${i}`
div.innerText = i
}
}
// ボタンクリクでdiv要素を生成
const btn = document.querySelector('#btn_genDiv')
btn.addEventListener('click', genDiv, false)
const target = document.querySelector('#container') // スクリプト設定対象の親要素を設定
const config = {childList: true} // 監視条件の設定
//親要素に変化があった場合の処理設定
const observer = new MutationObserver(() => {
const div3 = document.querySelector('#div3')
div3.addEventListener('click', showAlert, false)
})
// 監視開始
observer.observe(target, config)
}