【发布时间】:2014-01-06 11:10:57
【问题描述】:
我有一个功能,我想通过复选框根据用户制作的过滤器返回产品。
基本上:
每个产品都有多个数据属性,例如:data-brand="acer", data-price="2995", data-screensize="15.6", data-processor="intel"
假设我要排列 40 个产品,用户需要能够缩小产品列表的范围。
目前我的功能会显示所有点击的内容,并且不会缩小产品列表的范围。
不是 JQuery 鲨鱼,我可以使用 som 输入来了解如何过滤产品。
我在这里添加了一个小提琴:http://jsfiddle.net/Klemme/czE6x/14/
任何反馈都非常感谢,谢谢。
这是我目前拥有的:
function filterFunction()
{
//if( $( "input[name='screen_group[]']:checked" ).length > 0 )
if( $( "input[type='checkbox']:checked" ).length > 0 )
{
$( '.produkt_gruppe_div' ).hide();
searchScreens = $( "input[name='screen_group[]']:checked" ).map( function() { return $( this ).val(); }).get(); // <----
searchBrands = $( "input[name='brand_group[]']:checked" ).map( function() { return $( this ).val(); }).get(); // <----
// Combine marked filters (checkboxes)
var params = searchScreens.concat( searchBrands );
// Available data-atr, from the first product element
filterAttributtes = $( '.product_gruppe_div:first' ).data();
var searchValues = [];
// Loop marked checkboxes,display products that has a matching data-atr="value"
$.each( params, function( key, value )
{
$('[data-screensize="' + value + '"]').show();
$('[data-brand_name="' + value + '"]').show();
//$( '.produkt_gruppe_div' ).filter('[data-screensize="' + value + '"]').addClass('screen').fadeIn(300);
//$( '.produkt_gruppe_div' ).filter('[data-brand_name="' + value + '"]').addClass('brand').fadeIn(300);
});
}
else
{
// Vis alle, hvis der ikke er afmærket noget
$('.produkt_gruppe_div').show();
}
}
所以当用户选择“宏碁和联想”作为品牌,选择“15.6 和 14”作为屏幕尺寸时,我只需要显示 data-brand="acer of lenove" 和 data-screensize="15.6 或14" 等等。
目前每个产品都有 6 个过滤器,用于定义产品详细信息。我有一个 ID 对应于 data-atr="value" 的 tjeckboxes。
希望有人能看到我如何隐藏所有,然后只显示包含其中任何一个值的产品。
最好的问候,克莱姆
编辑编辑:::
这是我的标记:
<div class="product_gruppe_div" data-brand="acer" data-screensize="15.6" data-processor="intel"> - Product info - </div>
<div class="product_gruppe_div" data-brand="lenovo" data-screensize="15.6" data-processor="intel"> - Product info - </div>
<div class="product_gruppe_div" data-brand="acer" data-screensize="15.6" data-processor="intel"> - Product info - </div>
<div class="product_gruppe_div" data-brand="hp" data-screensize="15.4" data-processor="intel"> - Product info - </div>
<div class="product_gruppe_div" data-brand="hp" data-screensize="14" data-processor="intel"> - Product info - </div>
<div class="product_gruppe_div" data-brand="fujitsu" data-screensize="14" data-processor="intel"> - Product info - </div>
还有复选框:
<input type="checkbox" name="screen_group[]" value="18.4" id="18.4" onClick="filterFunction()" /> <span class="filter_paragraphs">18,4"</span><br />
<input type="checkbox" name="screen_group[]" value="17.3" id="17.3" onClick="filterFunction()" /> <span class="filter_paragraphs">17,3"</span><br />
<input type="checkbox" name="screen_group[]" value="15.6" id="15.6" onClick="filterFunction()" /> <span class="filter_paragraphs">15,6"</span><br />
<input type="checkbox" name="screen_group[]" value="15.5" id="15.5" onClick="filterFunction()" /> <span class="filter_paragraphs">15,5"</span><br />
<input type="checkbox" name="screen_group[]" value="15.4" id="15.4" onClick="filterFunction()" /> <span class="filter_paragraphs">15,4"</span><br />
<input type="checkbox" name="screen_group[]" value="14" id="14" onClick="filterFunction()" /> <span class="filter_paragraphs">14"</span><br />
<input type="checkbox" name="screen_group[]" value="13.3" id="13.3" onClick="filterFunction()" /> <span class="filter_paragraphs">13,3"</span><br />
<input type="checkbox" name="screen_group[]" value="12.5" id="12.5" onClick="filterFunction()" /> <span class="filter_paragraphs">12,5"</span><br />
<input type="checkbox" name="screen_group[]" value="11.6" id="11.6" onClick="filterFunction()" /> <span class="filter_paragraphs">11,6"</span><br />
<input type="checkbox" name="screen_group[]" value="11" id="11" onClick="filterFunction()" /> <span class="filter_paragraphs">11"</span><br />
<input type="checkbox" name="screen_group[]" value="10.1" id="10.1" onClick="filterFunction()" /> <span class="filter_paragraphs">10,1"</span><br />
品牌、处理器等原则相同。
编辑二:
这是另一个选项,我可以在其中列出多个品牌,然后 tjeck 屏幕上可见的内容,然后在屏幕尺寸上运行 tjeck。
这让我可以过滤所有品牌,屏幕尺寸为 15.6 英寸。
问题是,我只能选择一个屏幕尺寸复选框,如果我选择多个,我会丢失屏幕上的所有产品。
似乎看不到居所,我可以修改它。
帕特尔:
您认为它可以集成到您的代码中吗:http://jsfiddle.net/Klemme/czE6x/38/?
function filterFunction()
{
if( $( "input[type='checkbox']:checked" ).length > 0 )
{
$( '.produkt_gruppe_div' ).hide();
searchScreens = $( "input[name='screen_group[]']:checked" ).map( function() { return $( this ).val(); }).get(); // <----
searchBrands = $( "input[name='brand_group[]']:checked" ).map( function() { return $( this ).val(); }).get(); // <----
var searchValues = [];
$.each( searchBrands, function( key, value )
{
console.log( searchBrands );
// Vis kun de valgte brands på siden
$('[data-brand_name="' + value + '"]').show();
// $('[data-screensize="' + value + '"]').show();
// Align produkt_gruppe_div efter indlæsning
alignFilteredProducts();
});
$.each( searchScreens, function( key, value )
{
$('.produkt_gruppe_div').each(function( index, element )
{
if( $( this ).is( ':visible' ) )
{
// Vis kun de valgte screensizes på siden
//$( '[data-screensize="' + value + '"]' ).show();
$( '.produkt_gruppe_div' ).not('[data-screensize="' + value + '"]').fadeOut( 300 );
}
alignFilteredProducts();
});
});
}
else
{
$('.produkt_gruppe_div').show();
}
}
最好的,克莱姆
【问题讨论】:
-
分享示例html代码
-
你能提供一个示例标记
-
如果可能的话,创建一个小提琴jsfiddle.net
-
我最近在我的项目中为产品过滤做了这个......及其非常大的 jquery 代码......
标签: jquery sorting filtering product custom-data-attribute