danik.js, это я сюда тестовый пример кинул, я сам там для себя пишу мини-библиотеку, там всё это предусмотрено, а сюда просто написал понятный код, так как код из библы написан в стиле ниндзя и может быть не понятен.
.......
_e = 'addEventListener' in w ? 'addEventListener' : 'attachEvent';
_eD = dE.matches || dE.matchesSelector || dE.webkitMatchesSelector || dE.oMatchesSelector || dE.mozMatchesSelector || dE.msMatchesSelector;
.......
.......
.......
e: function(a, b) { //event
this[_e](a, b, false);
return this;
},
eD: function(a, b, c) { //event delegate
this.e(a, function(e) {
var t = e && e.target || w.event.srcElement;
while(t != this) {
if(_eD.call(t, b)) {
c.call(t, e);
break;
}
t = t.parentNode;
}
});
return this;
},
.......