addEventListener で delegate
HTML
<div id="wrap">
<div class="item">
<span class="child" id="id1"><a href="1.html">item1</a></span>
</div>
<div class="item">
<span class="child" id="id2"><a href="2.html">item2</a></span>
</div>
<div class="item">
<span class="child" id="id3"><a href="3.html">item3</a></span>
</div>
<div class="item">
<span class="child" id="id4"><a href="4.html">item4</a></span>
</div>
<div class="item">
<span class="child" id="id5"><a href="5.html">item5</a></span>
</div>
</div>
<button id="btn">add</button>
<ul>
<li><a href="https://teratail.com/questions/79357">JavaScript - ネイティブのJSでデリゲートイベントを実装して子要素の情報を取得したいです(79357)|teratail</a></li>
</ul>
JavaScript
'use strict';
document.getElementById('wrap').addEventListener('click', function handleClick (event) {
var item = event.target, currentTarget = event.currentTarget;
if (item === currentTarget) {
return;
}
while (item && !item.classList.contains('item')) {
item = item.parentNode
}
var child = item.firstElementChild,
id = child.id,
href = child.firstChild.href; // 絶対URIがNGなら getAttribute()
console.log(id, href);
event.preventDefault();
}, false);