製品のネストされたドロップダウンナビゲーションを構築していて、空のカテゴリを自動的に非表示にしたい。"ul"が含まれていないすべての "li"を選択
残念ながら、サーバーサイドの言語では効率的な方法ができないため、各カテゴリが直接持っている製品の数を出力してから、空のノードを削除するためにjQueryを使用できます。
私はli
ターゲットにする "のnav#top_nav
内秒:
ul
ネストの1つのレベルを考えると
<nav id="top_nav">
<nav class="nav1">
<ul>
<li data-num-products="0">
<a href="...">AAA</a>
<ul>
<li data-num-products="3"><a href="...">BBB</a></li>
<li data-num-products="0"><a href="...">CCC</a></li>
</ul>
</li>
<li data-num-products="7"><a href="">DDD</a></li>
</ul>
<nav>
</nav>
年代を、私はどのli
年代...
- を削除したいです
はネストされておらず、その内に
ul
があり、 は
data-num-products == 0
。それはul
子供を持っているので、そうAAA
上記の例では
は保持されますが、それはul
子供なしの製品を持っていないので、CCC
が削除されます。
UPDATE:Liはその李要素をすべて削除され、ULが含まれている場合、我々はあまりにもULを削除したいと思うので、それは除去の2回のパスが必要な場合があります
。
フィドル:http://jsfiddle.net/P8cy6/ – Interrobang
私はそれのreadibilityための最良の答えとして、このいずれかを選択します。最終的に私はこのような2つのパスを必要としました:// first pass $( "#top_nav li [data-online-products = '0']")フィルタ(function(){return $(this).children( "ul" ).length === 0;})。remove();フィルタ(function(){return $(this).children( "li")。length === 0;})。remove(); // 2回目のパス $( "#top_nav li [data-online-products = '0']")フィルタ(function(){return $(this).children( "ul")。 ;})。remove(); – Homan