【问题标题】:Filtering table row by select option通过选择选项过滤表格行
【发布时间】:2019-01-25 04:58:57
【问题描述】:

我有一个表,我正在使用选择选项进行过滤,但我不知道如何返回并显示初始过滤后的所有数据。我还需要帮助干燥我的代码。

// 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,但是过滤器不起作用。

【问题讨论】:

标签: javascript jquery html filter


【解决方案1】:

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>

【讨论】:

  • 谢谢!我不敢相信它就像将所有 :contains('____') 放在同一个字符串中一样简单。我怎么没想到?!我正在使用下拉列表来解决这个特殊问题,但也感谢搜索示例!
猜你喜欢
  • 2022-12-15
  • 1970-01-01
  • 1970-01-01
  • 2020-06-09
  • 1970-01-01
  • 1970-01-01
  • 2016-10-31
  • 2020-07-21
  • 2011-10-27
相关资源
最近更新 更多