event.stopPropagation и event.stopImmediatePropagation это все предоставляемые возможности, то есть отменять можно лишь то, что идёт после. А учитывая, что раньше capture-обработчика на document выполняется лишь такой же обработчик на window, то со стороны какого-либо вложенного элемента вы никак не сможете его отменить. Остаётся лишь вариант обернуть код обработчика на document проверкой:
document.addEventListener("click", function(event) {
if (!$(event.target).closest("#element").length) {
// ...
}
}, true);
Если jQuery не используется замена будет выглядеть например так:
if (!Element.prototype.matches) {
Element.prototype.matches =
Element.prototype.matchesSelector ||
Element.prototype.webkitMatchesSelector ||
Element.prototype.mozMatchesSelector ||
Element.prototype.msMatchesSelector;
}
Element.prototype.closest = function(selector) {
var target = this;
while (target && target != document) {
if (target.matches(selector)) {
return target;
}
target = target.parentNode;
}
return null;
};
document.addEventListener("click", function(event) {
if (!event.target.closest("#element")) {
// ...
}
}, true);