Skip to content

Instantly share code, notes, and snippets.

@a-c-t-i-n-i-u-m
Created October 15, 2015 17:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save a-c-t-i-n-i-u-m/ce1d8f93fb6ebd8ccbbf to your computer and use it in GitHub Desktop.
Save a-c-t-i-n-i-u-m/ce1d8f93fb6ebd8ccbbf to your computer and use it in GitHub Desktop.
jQuery.on(event, selector, callback) in pure js, requies 'querySelectorAll'
/*
* how to use:
* fn: filterEventHandler(selector, callback)
* selector: selector for querySelectorAll, filtering event source, like jQuery.on(event, selector, callback)
* callback: event handler function
* returns: filtering function which contains reference of your callback
*
* code:
* element.addEventListener('eventname', filterEventHandler('.filter[selector*="for querySelectorAll"]', function (e) {
* // this code will be called only when element matched to selector
* console.log(e.filterdTarget, "This is matched element. You can use e.target as original source element.");
* }));
* or
* element.onEvent = filterEventHandler('.selector', function (e) { console.log("matched!"); });
*
* license: public domain
* author: <lianol> https://github.com/a-c-t-i-n-i-u-m
*/
var filterEventHandler = function (selector, callback) {
return (!callback || !callback.call) ? null : function (e) {
var target = e.target || e.srcElement || null;
while (target && target.parentElement && target.parentElement.querySelectorAll) {
var elms = target.parentElement.querySelectorAll(selector);
for (var i = 0; i < elms.length; i++) {
if (elms[i] === target) {
e.filterdTarget = elms[i];
callback.call(elms[i], e);
return;
}
}
target = target.parentElement;
}
};
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment