代码之家  ›  专栏  ›  技术社区  ›  Famous Nerd

jQuery隐藏包含与值匹配的隐藏字段的所有表行

  •  3
  • Famous Nerd  · 技术社区  · 16 年前

    我知道这种技术倾向于“显示所有行”、“过滤集”、“显示/隐藏过滤集”

    我的桌子和往常一样

    <table>
    <tr><td>header></td><td>&nbsp;</tr>
    <tr>
    <td>a visible cell</td><td><input type='hidden' id='big-asp.net-id' value='what-im-filtering-on' />
    </td>
    </tr>
    </table>
    

    我的目标是能够匹配tr谁的后代包含一个隐藏的输入包含真或假。

    这就是我如何尝试选择器(它的变体),我甚至还没有测试值。

    function OnFilterChanged(e){
        //debugger;
        var checkedVal = $("#filters input[type='radio']:checked").val();
        var allRows = $("#match-grid-container .tabular-data tr");
        if(checkedVal=="all"){        
             allRows.show();
        }
        else if(checkedVal=="matched"){
             allRows.show();
             allRows.filter(function(){$(this).find("input[type='hidden'][id~='IsAutoMatchHiddenField']")}).hide();
    
        }
        else if(checkedVal=="unmatched"){
    
        }
    }
    

    我离过滤器太远了吗?筛选器中是否需要$(this),以便我可以执行后代搜索?

    在下面这些伟大建议的基础上,我发现下面的方法是可行的。我忽略了一个事实,即filter闭包函数必须根据过滤条件返回true/false。另外,对于基于INamingContainer的asp.net生成的ID,以选择器结尾也很有用

    allRows.show();
    allRows.filter(function(){
                return $(this).find(
                   "input[type='hidden'][id$='IsAutoMatchHiddenField']").val() == "False";
             }).hide();
    
    3 回复  |  直到 16 年前
        1
  •  3
  •   Jeff Rupert    16 年前
    $('#mySelector :hidden').filter(
        function (index)
        {
            return $(this).find('.repeatedObject').val() == 'someValue';
        }
    ).hide();
    

    filter() 函数需要返回一个布尔值来实际确定是否将某个元素留在列表中。检查API( http://api.jquery.com/filter/

    另外,作为旁注 val() , html() text() ,以及其他相关函数从 第一 集合中的元素。如果你想循环通过,你必须使用 each 或者 for 循环。

        2
  •  2
  •   guzart    16 年前

    一些建议。

    1. find函数需要返回一个布尔值。
    2. 你在找身份证吗?或者寻找价值? [id~='IsAutoMatchHiddenField']
    3. [attribute~=value] ,将在值中查找由分隔的单词 空白 ,示例: [value~='foo'] 将不匹配 value="foo-bar" 但会匹配的 value="foo bar" .

    // Chain your functions, the beauty of jQuery.
    allRows.show()
       .filter(function(index){
          // function needs to return a boolean.
          return $(this)
             .find("input[type='hidden'][id~='IsAutoMatchHiddenField']")
             .val() == 'valuetocheck';
       });
    
        3
  •  1
  •   David Hellsing    16 年前

    我认为您需要从 filter

    allrows.filter(function() {
        return $(this).find(':hidden').length;
    }).hide();
    

    或:

    $('tr :hidden').closest('tr').hide();