Вместо того, чтобы выбирать все и исключать некоторые элементы и привязывать обработчики событий к каждому из них, более простым способом (imo) было бы присоединить обработчик событий только к div
и проверить, была ли нажата ссылка или нет ( делегирование события ):
$('#yourDiv').click(function(event) {
if(event.target.nodeName !== 'A') {
// do your stuff
}
});
Это будет работать только в том случае, если ссылки не имеют никаких других элементов в качестве дочерних.
Более надежным может быть использование .delegate
[документы] и :not
[документы] псевдоселектор:
$ ('# yourDiv'). Делегат (': not (a)', 'click', function (event) {// do your stuff}); Обновление: По-видимому, вам нужно добавить еще один обработчик событий click
к div
, чтобы иметь возможность обнаруживать щелчки на самом div
(мои тесты с использованием делегата)только селектор не удался):
$('#yourDiv')
.delegate(':not(a)', 'click', handler)
.click(function(event) {
if(event.target === this) { // only if the `div` was clicked
handler.apply(this, arguments);
}
});
Здесь handler
- фактический обработчик события, который вы хотите выполнить.Используя дополнительную функцию, вам не нужно повторять код.