stackoverflow啓發了我使用複選框構建「類別過濾器」,並且我卡住了一半。我想實現以下:三個類別(品牌,類,顏色)通過3個「複選框柱」被呈現在表內:構建一個交叉類別過濾器,使用複選框(類)使用複選框顯示div(jQuery)
<table id="filters" width="620px">
<tr>
<td width="144" align="left" valign="top">
<input type="checkbox" value="Audi" id="filter-Audi" >Audi<br>
<input type="checkbox" value="BMW" id="filter-BMW" >BMW<br>
</td>
<td width="233" align="left" valign="top">
<input type="checkbox" value="Compact" id="filter-Compact" >Compact<br>
<input type="checkbox" value="Limousine" id="filter-Limousine" >Limousine<br>
<input type="checkbox" value="SUV" id="filter-SUV" >SUV<br>
<input type="checkbox" value="Sport" id="filter-Sport" >Sport<br>
</td>
<td width="233" align="left" valign="top">
<input type="checkbox" value="silver" id="filter-silver" >silver<br>
<input type="checkbox" value="blue" id="filter-blue" >blue<br>
<input type="checkbox" value="red" id="filter-red" >red<br>
<input type="checkbox" value="white" id="filter-white" >white<br>
</td>
</tr>
</table>
根據所選擇的複選框我想顯示包含類一定的div名稱與選中的複選框ID相同。這已經在工作。我現在需要的是爲每個類別制定一個「排除」過濾器的方法。
手段,如果用戶檢查以下內容:
奧迪&轎車&紅 - 只有div的方含這些類別應該出現。在我的例子中,所有包含奧迪&豪華轎車&紅色apper,但當然寶馬div也出現(這是錯誤的div)。換句話說:我需要一個額外的「過濾方法」,其中包括每個類別按類別劃分的類別:即:如果用戶檢查奧迪,第二和第三類別的複選框應只涉及包含奧迪的div類。如果用戶檢查奧迪&緊湊型&白色出現的div至少包含所有三個類。
jQuery的一部分,到目前爲止(發現這個計算器上):
$("#filters :checkbox").click(function() {
var re = new RegExp($("#filters :checkbox:checked").map(function() {
return this.value;
}).get().join("|"));
$.each($('.filterme'), function() {
var $this = $(this);
$this[re.source != "" && re.test($this.attr("class")) ? "slideDown" : "slideUp"]();
});
});
我把現有代碼的jsfiddle:
很想如果有人可以幫助這裏!
感謝您的幫助,但此方法不包括列中的檢查。如果單獨檢查奧迪,則會出現每三個包含奧迪級別的div。正確到目前爲止。但是:現在我們檢查了奧迪&豪華轎車和緊湊型轎車......我預計所有的轎車都會出現,包含奧迪和緊湊豪華轎車。但是隨着你的功能,兩個div(Compact和Limousine)消失。您知道,列中的每個checkbos應該以「附加」方式運行,但複選框以「獨佔」方式排成一行。任何想法? – bohnert 2012-07-11 17:42:54
此評論與您在問題中提供的解釋相矛盾。「我需要一個額外的」過濾方法「,其中包括每個類別的分類。」你能澄清嗎? – Chandu 2012-07-11 17:44:25
我正在使用的過濾器方法是查找每個選中的複選框及其對應的ID。如果其中一個ID被發現爲div類,則會出現相應的div。對於列(類別)內的複選框,這是可以的。此外,我需要的還有所有三個類別(列)的breadcrump。 – bohnert 2012-07-11 17:52:55