子セレクター>
で使用すると、jQuery の「has」の 2 つのバリアントは異なる動作をします。
次の HTML を使用します。
<div>
<span>Text</span>
</div>
今:
$("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)をオープンしました。