При использовании с селектором дочерних элементов >
два варианта jQuery "имеют" ведут себя по-разному.
Возьмите этот HTML:
<div>
<span>Text</span>
</div>
Сейчас:
$("div:has(>span)");
вернет его, а:
$("div").has(">span");
не будет. Это ошибка или функция? Сравните здесь: http://jsfiddle.net/aC9dP/
EDIT: Это может быть ошибка или, по крайней мере, недокументированное непоследовательное поведение.
В любом случае, я думаю, было бы полезно, чтобы дочерний селектор последовательно работал как унарный оператор. Это позволяет вам делать что-то, что в противном случае потребовало бы специальной функции фильтра - оно позволяет вам напрямую выбирать элементы с определенными дочерними элементами:
$("ul:has(>li.active)").show(); // works
$("ul").has(">li.active)").show(); // doesn't work, but IMHO it should
в отличие от:
$("ul").filter(function () {
return $(this).children("li.active").length > 0;
}).show();
Я открыл билет jQuery (7205) для этого.