更新 2:
非常感谢你们的帮助。虽然所有三种解决方案都有效,但我喜欢 Bill 的可读性和性能。与往常一样,我对这里的专业水平和帮助感到惊讶。非常感谢您的帮助。
更新:
将演示放在 jsfiddle 上:http: //jsfiddle.net/FC4QE/17/
我需要创建一个过滤器。用户单击品牌名称链接,如果匹配,则我需要过滤掉其他产品。品牌包含在产品名称中,因此我正在搜索匹配项,如果有一个或多个,我需要隐藏其他产品。
我有以下 javascipt/jquery 代码:
$(function(){
$('#filter-by-brand li a').click(function(){
// get html string of clicked item
var brandNameSelected = $(this).html();
var productContainer = $('#product-collection div.productBoxWrapper');
// reset products in the view
if (brandNameSelected == 'All Brands'){
productContainer.fadeIn("slow");
}
// for each product title (a tag)
$("#product-collection h4 a").each(function(){
var productTitle = jQuery(this).html();
// if item clicked is contained inside product title, hide all
// products and only show the ones where the title matched
if(productTitle.indexOf(brandNameSelected) != -1){
// hide container of all products, this hides all products
productContainer.fadeOut("slow");
// then show only ones that match. the problem is that only the one product is
// displayed since we're inside the .each. How can I show all products where product title contains the item clicked?
$(this).parent().parent().parent().parent().fadeIn("slow");
}
});
});
});
我在代码内的注释中解释了所有内容,但基本上,当代码有效时,因为我显示的产品单击的项目包含在 .each 方法中,它只显示匹配的最后一个项目。如何在 .each 中显示所有匹配的,或者这是不可能的,还有其他方法吗?
希望这是有道理的,并且有人可能会有一些建议!谢谢。