1ページに複数のリスト(製品の複数のカテゴリ)があります:
<h3>Category 1</h3>
<ul id="category1">
<li>item1</li>
<li>item2</li>
<li>item3</li>
</ul>
<h3>Category 2</h3>
<ul id="category2">
<li>item27</li>
<li>item28</li>
</ul>
リストの数は可変です。
こちらのデモページのようなフィルターが欲しいです http://static.railstips.org/orderedlist/demos/quicksilverjs/jquery.html 。
ただし、さまざまなリストを検索する必要があります。
ユーザーが「2」を検索すると、結果は次のようになります。
<h3>Category 1</h3>
<ul id="category1">
<li>item2</li>
</ul>
<h3>Category 2</h3>
<ul id="category2">
<li>item27</li>
<li>item28</li>
</ul>
彼が「1」を検索した場合は、次のようになります(結果がないリストのh3タイトルは表示しないでください)。
<h3>Category 1</h3>
<ul id="category1">
<li>item1</li>
</ul>
誰かが私を助けることができますか?
前もって感謝します!
このようなものはどうですか:
[〜#〜] html [〜#〜]
<input type="text" />
<ul id="category1">
<li>item1</li>
<li>item2</li>
<li>item3</li>
</ul>
<ul>
<li>item27</li>
<li>item28</li>
</ul>
[〜#〜] js [〜#〜]
$(function(){
$('input[type="text"]').keyup(function(){
var searchText = $(this).val();
$('ul > li').each(function(){
var currentLiText = $(this).text(),
showCurrentLi = currentLiText.indexOf(searchText) !== -1;
$(this).toggle(showCurrentLi);
});
});
});
http://jsfiddle.net/EFTZR/146/
filter() を使用した別の解決策。これについては以下で説明します。
$('input[type="text"]').keyup(function(){
var that = this, $allListElements = $('ul > li');
var $matchingListElements = $allListElements.filter(function(i, li){
var listItemText = $(li).text().toUpperCase(),
searchText = that.value.toUpperCase();
return ~listItemText.indexOf(searchText);
});
$allListElements.hide();
$matchingListElements.show();
});
これは、jQueryのfilterメソッドを使用して実行できます。
var valueToSearch = "item1"; // this one should come from the search box
var allListItems = $("ul > li");
var filteredItems = allListItems.filter(function(index) {
var listItemValue = $(this).text();
var hasText = listItemValue.indexOf(valueToSearch) > -1;
return hasText;
});
次に、forループを使用して、filteredItems変数の値をリストなどに表示できます。