andセレクターを使用して、子を<li>
持たない要素を選択します。<a>
:has
:not
$("li:not(:has(a))").addClass("current");
jsフィドル
- 編集 -
これは最短の解決策かもしれませんが、読みやすさは別として、速度に関しては間違いなく最善の解決策ではありません。
それを念頭に置いて、@bazmegakapaが提供する素晴らしい回答を確認することをお勧めします。
これはあなた (または私を含む他の誰か) が複数回使用する可能性があるため、コードをDRYするために使用できるこのプラグイン/メソッドで jQuery を少し拡張しました。
jQuery.fn.thatHasNo = function(element, method) {
if (typeof method === "undefined" || method === null) method = "children";
return this.not(function() {
return $(this)[method](element).length;
});
};
あなたが呼び出すことができるもの:
$("li").thatHasNo("a").addClass("current");
この拡張機能は、デフォルトで (メソッドの 2 番目の引数が渡されない場合)、提供されたセレクターに一致する直接の子孫 ( children ) があるかどうかを確認します。ただし、任意のツリー トラバーサル パラメーターをメソッドの 2 番目の引数として指定できます。したがって、これは次のいずれかのように記述できます。
$("li").thatHasNo("a", "children").addClass("current");
//...
$("li").thatHasNo("a", "find").addClass("current");
//...
$("li").thatHasNo(".class", "siblings").addClass("lame");
それを反映するようにjsFiddleを更新しました。