Example
<div class="item">
<ul class="menu">
<li>1</li>
<li>2</li>
<li class="item">3</li>
<li class="item">4</li>
</ul>
</div>
var menu = document.querySelector('.menu');
delegate(menu, '.item', 'click', function() {
console.log('here')
});
Maybe Solution
function closest (element, selector, stop) { // <----- add stop element
while (element && element !== stop && element.nodeType !== DOCUMENT_NODE_TYPE) {
if (typeof element.matches === 'function' &&
element.matches(selector)) {
return element;
}
element = element.parentNode;
}
}
function listener(element, selector, type, callback) {
return function(e) {
e.delegateTarget = closest(e.target, selector, element); // <------- +
if (e.delegateTarget) {
callback.call(element, e);
}
}
}
Example
Maybe Solution