上記の答えは決して機能しません。理由を知るためにフィドルを見て、あなたの答えも持ってください
説明
これはトリッキーなものです。解決策は簡単に思えるかもしれませんが、うまくいかないかもしれません。意志がないかどうかを確認
して戻ろうとしても無駄です。 <li>
<ul>
これは、<li>
を持っている人はその中に s を<ul>
持っている (かもしれない)からです。そのため、それらの s を一致させなかったとしても、それらの孫 (最も内側の s ) を正常に一致させたことになります。
したがって、最後に、DOM 内の すべてが一致しました。<li>
<ul>
<li>
<li>
<li>
よりよく理解するには、次のJS Fiddleを見てください。回答が含まれています
答え- フィドルから
追加のフィルターを使用する必要があると思います (提案を歓迎します)。IMOこれは、クラスまたはIDのいずれかによって parent-mostへの参照を取得し、結果をフィルタリングすることによってのみ実行できます。<ul>
$('li').not(':has(ul)').css('text-decoration','underline');
// Matches all the LIs, and therefore not useful
$('li').filter(function() {
return $('ul', this).length == 0;
}).css('color', 'blue');
// Nice try, but still Matches all the LIs
// This works, but need a reference to main parent, using a class, id etc.
$('li').not(':has(ul)').filter(function() {
return $(this).parent().hasClass('the-parent');
}).css('color', 'red');