Разве они не должны делать то же самое?
Нет. В первом примере вы выбираете все a
внутри li
; во втором вы выбираете все li
, которые имеют a
.
Из руководства , мина:
Описание: выбирает элементы, которые содержат хотя бы один элемент, соответствующий указанному селектору.
Выражение $('div:has(p)')
соответствует <div>
, если <p>
существует где-то среди его потомков, а не просто как прямой потомок.