このリンクに似た仕切りのあるフィルター済みリストがあります。内容が空のときに仕切りが非表示にならないことを除いて、例とまったく同じように動作しています。これは、私が達成しようとしていることです。
http://jquerymobile.com/test/docs/lists/lists-search-with-dividers.html
keyupイベントのコードの最初のブロックはリストをフィルタリングするために機能しますが、2番目のブロックを追加すると壊れます。
$("#filter").keyup(function () {
var filter = $(this).val(), count = 0;
$(".filtered:first li").each(function () {
if ($(this).text().search(new RegExp(filter, "i")) < 0) {
$(this).addClass("hidden");
} else {
$(this).removeClass("hidden");
count++;
}
});
//code i've added
$('.li-group').each(function(){
if($(this).children(':visible').length == 0) {
$(this).prev().css('display','none');
}
}):
});
私のHTMLの構造は次のとおりです。
<li class="divider">A</li>
<div class="li-group">
<li>
<a href="#">Link</a>
</li>
<li>
<a href="#">Link</a>
</li>
</div>
<li class="divider">B</li>
<div class="li-group">
<li>
<a href="#">Link</a>
</li>
<li>
<a href="#">Link</a>
</li>
</div>
私が自分のコードでやろうとしていたのは、各キーアップイベントで、のすべての子div.li-group
が非表示になっているかどうかを確認し、非表示になっている場合は、リストの仕切りである前の要素を非表示にすることでした。
注:コードが現在無意味であることはわかっていますが、戻ってコードをクリーンアップする前に、デモを機能させたいと考えています。