jQuery: diferença sutil entre .has () e: has ()
Quando usado com o seletor infantil>
, as duas variantes do jQuery "se comportam" de maneira diferente.
Veja este HTML:
<div>
<span>Text</span>
</div>
Agora:
$("div:has(>span)");
retornaria, enquanto:
$("div").has(">span");
não faria. É um bug ou um recurso? Compare aqui:http://jsfiddle.net/aC9dP/
EDITAR: Isso pode ser um bug ou pelo menos um comportamento inconsistente não documentado.
De qualquer forma, acho que seria benéfico ter o seletor de filhosconsistentemente trabalhar como um operador unário. Ele permite que você faça algo que exigiria uma função de filtro personalizada - permite selecionar diretamente elementos que possuem determinados filhos:
$("ul:has(>li.active)").show(); // works
$("ul").has(">li.active)").show(); // doesn't work, but IMHO it should
em oposição a:
$("ul").filter(function () {
return $(this).children("li.active").length > 0;
}).show();
Eu abrium tíquete jQuery (7205) por esta.