[英]Filtering table row by select option
我有一个要使用选择选项进行过滤的表,但无法弄清楚如何返回并显示初始过滤器后的所有数据。 我也需要帮助来干燥我的代码。
// SHOWS INDIVIDUAL FILTER BUT CAN'T SHOW ALL
$(document).ready(function($) {
$("#sortAwardType").change(function() {
$("table").show();
var selection = $(this).val().toUpperCase();
var dataset = $(".awards-body").find("tr");
dataset.show();
if(selection) {
dataset.filter(function(index, item) {
// Filter shows table row with the word 'General'
return $(item).find(":contains('General')").text().toUpperCase().indexOf(selection) === -1;}).hide();
} else {
// .all corresponds to a "Show All" option. When selected the data doesn't show
$("#sortAwardTable").change(function(){
$(".all").dataset.show();
});
}
});
});
// ATTEMPTING DRY CODE. NOW I CAN'T FILTER AT ALL
$(document).ready(function($) {
$("#sortAwardType").change(function() {
$("table").show();
var selection = $(this).val().toUpperCase();
var dataset = $(".awards-body").find("tr");
var match = [
":contains('General')",
":contains('Free')",
":contains('Regional')",
":contains('Demographic')"];
dataset.show();
if(selection) {
dataset.filter(function(index, item) {
return $(item).find(match).text().toUpperCase().indexOf(selection) === -1;}).hide();
} else {
// .all corresponds to a "Show All" option. When selected I want all data to show but instead it only shows an empty table (header present but no rows)
$("#sortAwardTable").change(function(){
$(".all").dataset.show();
});
}
});
});
我不想仅重复if block
来更改":contains('_____')"
。 我尝试将它们分组到一个数组中,然后将它们分配给var match
,但是过滤器不起作用。
salam,您只需将所有包含选择器放在同一字符串中
$(item).find(":contains('General'),:contains('Free'),:contains('Regional'),:contains('Demographic')").
但如果您想放轻松,请遵循我的前任:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <input id="searchBox"> <table id='testTable'> <tr > <td>aa</td> <td>bb</td> <td>cc</td> </tr> <tr > <td>ab</td> <td>bc</td> <td>cd</td> </tr> <tr > <td>zz</td> <td>ee</td> <td>ff</td> </tr> </table> <script> $('#searchBox').keyup(function(){ var val = $(this).val().toLowerCase(); if(val ===""){ $("#testTable > tbody > tr").toggle(true); return; } $("#testTable > tbody > tr").toggle(false); $("#testTable").find("td").each(function(){ if($(this).text().toLowerCase().indexOf(val)>-1) $(this).parent().toggle(true); }); }); </script>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.