function delegateHandler(selector, handler, event) { var eventTarget = event._target || event.target, currentTarget = closest.call([eventTarget], selector, this)[0]; if (currentTarget && currentTarget !== this) { if (currentTarget === eventTarget || !(event.isPropagationStopped && event.isPropagationStopped())) { handler.call(currentTarget, event); } } }
return !Element.prototype.closest ? closest : function (selector, context) { if (!context) { var nodes = []; each(this, function (node) { var n = node.closest(selector); if (n) { nodes.push(n); } }); return $(uniq(nodes)); } else { return closest.call(this, selector, context); } };