Neuere Browser
Neuere Browser unterstützen .matches
:
this.container.addEventListener('click', function(e){
if (e.target.matches('#game-again,#game-again *')) {
e.stopPropagation();
self.publish('primo:evento');
}
});
Sie können die Version ohne Präfix mit erhalten
var matches = document.body.matchesSelector || document.body.webkitMatchesSelector || document.body.mozMatchesSelector || document.body.msMatchesSelector || document.body.webkitMatchesSelector
Und dann .apply
für weitere Browser verwenden (immer noch IE9+).
Ältere Browser
Angenommen, Sie müssen ältere Browser unterstützen, können Sie den DOM durchlaufen:
function hasInParents(el,id){
if(el.id === id) return true; // das Element
if(el.parentNode) return hasInParents(el.parentNode,id); // ein Eltern-Element
return false; // nicht das Element oder seine Eltern
}
Allerdings wird dies den gesamten DOM durchlaufen und Sie möchten beim Delegationsziel aufhören:
function hasInParentsUntil(el,id,limit){
if(el.id === id) return true; // das Element
if(el === limit) return false;
if(element.parentNode) return hasInParents(el.parentNode,id); // ein Eltern-Element
return false; // nicht das Element oder seine Eltern
}
Was Ihren Code wie folgt aussehen lassen würde:
this.container.addEventListener('click', function(e){
if (hasInParentsUntil(e.target,'game-again',container)) { // container sollte
e.stopPropagation(); // für dieses verfügbar sein
self.publish('primo:evento');
}
});