Как исключить потомка в селекторе jquery?
Есть контент, подгруженный через ajax:
<div class="content"> <div class="child"></div> </div> |
<div class="content"> <div class="child"></div> </div>
К нему применяется:
$(document).on('click', '.content', function(){ ... }); |
$(document).on('click', '.content', function(){ ... });
Вопрос: как в данном примере средствами псевдоклассов jquery исключить потомка .child из селектора в методе on? Чтобы при клике на .child ничего не происходило. Пример ниже не работает:
$(document).on('click', '.content:not(.child)', function(){ ... }); |
$(document).on('click', '.content:not(.child)', function(){ ... });
Дополнительно:
если .child всегда дитё .content, а не находится где-то глубже, то .content > :not(.child) должно помочь
Добавьте
$(document).on('click', '.content .child', function(event){ event.stopPropagation(); }); |
$(document).on('click', '.content .child', function(event){ event.stopPropagation(); });
- Тоже хотел предложить, затестил на jsfiddle, target всё ещё .child, как и лог выводится после клика на ребёнка.
- historydev, может тогда так:
document.querySelector('#test').addEventListener('click', (event) => { if (event.target !== event.currentTarget) { return; } console.log('click'); });
document.querySelector('#test').addEventListener('click', (event) => { if (event.target !== event.currentTarget) { return; } console.log('click'); });
- Спасибо! Все работает, вы очень помогли))
- historydev,
test.onclick = e => { if (e.target.closest('.test22')) return; console.log(e.target.className, e.target.id) }
test.onclick = e => { if (e.target.closest('.test22')) return; console.log(e.target.className, e.target.id) }
- IvanU7n, странно что погружение всё ещё работает, а проверить родителя не проблема, да
- historydev, Погружение работает если его задать явно.
- Александр, чтобы его остановить, нужно его запустить, интересно)snippet
- Александр, хотя даже так не работает
- Александр,
test.addEventListener("click", function(e) { e.stopPropagation(); console.log(e.target.className, e.target.id) }, true); test.addEventListener("click", function(e) { e.stopPropagation(); console.log(e.target.className, e.target.id) }, false);
test.addEventListener("click", function(e) { e.stopPropagation(); console.log(e.target.className, e.target.id) }, true); test.addEventListener("click", function(e) { e.stopPropagation(); console.log(e.target.className, e.target.id) }, false);
С явно заданным работает:
test22.onclick = (e) => console.log('test22 log'); test.addEventListener("click", function(e) { e.stopPropagation(); console.log(e.target.id) }, true); /* test.onclick = e => { e.stopPropagation(); console.log(e.target.id) } */
test22.onclick = (e) => console.log('test22 log'); test.addEventListener("click", function(e) { e.stopPropagation(); console.log(e.target.id) }, true); /* test.onclick = e => { e.stopPropagation(); console.log(e.target.id) } */
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для исключения потомка в селекторе jQuery можно использовать метод `.not()`. Этот метод позволяет исключить определенные элементы из выборки, основываясь на определенных критериях.
Например, если у нас есть следующая структура HTML:
```html
```
И мы хотим выбрать все потомки элемента с классом `parent`, за исключением элемента с классом `child`:
```javascript
$('.parent').find('.child').not('.child:first').css('color', 'red');
```
В данном примере мы выбираем все потомки элемента с классом `parent`, затем с помощью метода `.not()` исключаем первого потомка с классом `child` из выборки, и устанавливаем им стиль цвета текста на красный.
Таким образом, использование метода `.not()` позволяет легко исключить определенные элементы из выборки с помощью jQuery.