DOM:
- 一、正確的事件委托
錯(cuò)誤的寫法:
ul.addEventListener('click', function (e) {
if (e.target.tagName.toLowerCase() === 'li') {
console.log('...');
}
})
這么寫的原因是假如想要點(diǎn)擊的是li就執(zhí)行回調(diào),但是li里面嵌套了其他標(biāo)簽如span。此時(shí)就需要用while循環(huán)一直到找不到指定的節(jié)點(diǎn)再跳出循環(huán)。
function enTrust (element, eventType, selector, fn) {
element.addEventListener(eventType, e => {
let el = e.target;
while (!el.matches(selector)) {
if (element == el) {
el = null;
break;
}
el = el.parentNode;
}
el && fn.call(el);
});
return element;
}