<li>
ページの更新時にすべてのアイテムがロードされるわけではないので、これをどのように処理するかについては困惑しています。フィルタリングは、「フィルター」の各リンク選択で正常に機能し<ul>
ますが、ページのリロード時に、フィルターされた<li>
アイテムだけでなく、すべてのアイテムが表示されます。
HTML:
<div id="container">
<li>home.com</li>
<ul id="filter">
<li><a href="#">books</a></li>
<li><a href="#">essays</a></li>
<li><a href="#">film</a></li>
</ul>
<ul id="portfolio">
<li class="books"><a href="#"><img src="images/one.gif" alt="" height="120" width="200" />Book One</a></li>
<li class="books"><a href="#"><img src="images/two.gif" alt="" height="120" width="200" />Book Two</a></li>
<li class="essays"><a href="#"><img src="images/three.gif" alt="" height="120" width="200" />Essay One</a></li>
<li class="essays"><a href="#"><img src="images/four.gif" alt="" height="120" width="200" />Essay Two</a></li>
<li class="film"><a href="#"><img src="images/five.gif" alt="" height="120" width="200" />Film One</a></li>
<li class="film"><a href="#"><img src="images/six.gif" alt="" height="120" width="200" />Film Two</a></li>
</ul></div>
JS:
$(document).ready(function() {
$('ul#filter a').click(function() {
$(this).css('outline','none');
$('ul#filter .current').removeClass('current');
$(this).parent().addClass('current');
var filterVal = $(this).text().toLowerCase().replace(' ','-');
if(filterVal == 'all') {
$('ul#portfolio li.hidden').fadeIn('slow').removeClass('hidden');
} else {
$('ul#portfolio li').each(function() {
if(!$(this).hasClass(filterVal)) {
$(this).fadeOut('normal').addClass('hidden');
} else {
$(this).fadeIn('slow').removeClass('hidden');
}
});
}
return false;
});
});