关于多个标准的jQuery表过滤器

问题描述 投票:3回答:3

我目前有一张桌子,上面有三个下拉列表。当用户从每个下拉列表中选择一个值来过滤结果时,我希望该表隐藏不符合到目前为止所选标准的所有行。我得到的最接近的是:

  $("#ReportControls #InventoryReports select").change(function(){

    $("#Report table tbody tr").hide();  

    var filterArray = new Array();
    filterArray[0] = $("#ddlStyle :selected").text()
    filterArray[1] = $("#ddlSize :selected").text()
    filterArray[2] = $("#ddlColor :selected").text()

    $.each(filterArray, function(i){
        if (filterArray[i].toString() != "Style" && filterArray[i].toString() != "Size" && filterArray[i].toString() != "Color")
        {
           $("#Report table tbody tr").find("td:contains('" + filterArray[i].toString() + "')").parents("tr").show();
        }
    });
});

唯一的问题是,它会拉回包含特定大小或某种颜色或某种样式的所有行,而不仅仅是具有特定大小和特定颜色以及某种样式的行。

jquery filtering
3个回答
2
投票

在这种情况下:

$.each(filterArray, function(i){
if (filterArray[i].toString() == "Style" || filterArray[i].toString() == "Size" || filterArray[i].toString() == "Color") 
  {
  filterArray[i] == ""
  }
});
$("#Report table tbody tr").find("td:contains('" + filterArray[0].toString() + "')").find("td:contains('" + filterArray[1].toString() + "')").find("td:contains('" + filterArray[2].toString() + "')").parents("tr").show();

它总会找到一个空白。


0
投票

代替

    $.each(filterArray, function(i){
    if (filterArray[i].toString() != "Style" && filterArray[i].toString() != "Size" && filterArray[i].toString() != "Color")
    {
       $("#Report table tbody tr").find("td:contains('" + filterArray[i].toString() + "')").parents("tr").show();
    }
});

你有没有尝试过:

var bolPass = true;
$.each(filterArray, function(i){
if (filterArray[i].toString() == "Style" || filterArray[i].toString() == "Size" || filterArray[i].toString() == "Color") 
  {
  bolPass = false
  }
});
if (bolPass) 
  {
  $("#Report table tbody tr").find("td:contains('" + filterArray[0].toString() + "')").find("td:contains('" + filterArray[1].toString() + "')").find("td:contains('" + filterArray[2].toString() + "')").parents("tr").show();
  }

我想这可能会给你你想要的东西。


0
投票

杰夫,谢谢你的帮助。出于某种原因,我无法正确过滤。它总是回来没有行。让它发挥作用的最终代码是:

$("#ReportControls #InventoryReports select").change(function(){

    $("#Report table tbody tr").hide();          
    var filterArray = new Array();
    filterArray[0] = $("#ddlStyle :selected").text()
    filterArray[1] = $("#ddlSize :selected").text()
    filterArray[2] = $("#ddlColor :selected").text()

    $.each(filterArray, function(i){
        if (filterArray[i].toString() == "Style" || filterArray[i].toString() == "Size" || filterArray[i].toString() == "Color")
        {
            filterArray[i] = "";
        }
    });   
    $("#Report table tbody tr").each(function(){
        if ($(this).find("td:eq(0):contains('" + filterArray[0].toString() + "')").html() != null
            && $(this).find("td:eq(1):contains('" + filterArray[1].toString() + "')").html() != null
            && $(this).find("td:eq(2):contains('" + filterArray[2].toString() + "')").html() != null)
        {
            $(this).show();
        }
    });  
});

任何想法为什么这有效?我尝试以另一种方式指定列号,但无法使其工作。

© www.soinside.com 2019 - 2024. All rights reserved.