При использовании с дочерним селектором >
два варианта jQuery "has" ведут себя по-разному.
Возьмите этот HTML:
Text
Теперь:
$("div:has(>span)");
вернет его, а:
$("div").has(">span");
- нет. Это ошибка или особенность? Сравните здесь: http://jsfiddle.net/aC9dP/
РЕДАКТИРОВАТЬ: Это может быть ошибка или, по крайней мере, недокументированное несогласованное поведение.
В любом случае, я думаю, было бы полезно, чтобы дочерний селектор постоянно работал как унарный оператор. Он позволяет вам делать то, что в противном случае потребовало бы настраиваемой функции фильтра - он позволяет вам напрямую выбирать элементы, у которых есть определенные дочерние элементы:
$("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) для этого.