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

时间:2010-04-15 20:45:47

标签: asp.net jquery

虽然我不怀疑这已经得到了回答,但我找不到与我的问题相匹配的好方法。

我有一个表,我想根据它们是否包含与值匹配的隐藏字段来过滤行。

据我所知,该技术倾向于“显示所有行”,“过滤集合”,“显示/隐藏过滤集”

我有以下jquery,但我对过滤器感到厌倦,我的过滤集似乎总是不包含任何元素。

我的桌子是通常的

<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>

我的目标是能够匹配后代包含隐藏输入的内容,包含真或假。

这就是我尝试选择器的方式(这个的变化),我甚至没有测试该值。

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),以便我可以进行后代搜索?

非常感谢

在以下这些伟大的建议的基础上,我发现以下是诀窍。我错过了过滤器闭包函数必须根据过滤条件返回true / false的事实。此外,ends-with选择器非常适合基于INamingContainer

的asp.net生成的id
allRows.show();
allRows.filter(function(){
            return $(this).find(
               "input[type='hidden'][id$='IsAutoMatchHiddenField']").val() == "False";
         }).hide();

3 个答案:

答案 0 :(得分:3)

$('#mySelector :hidden').filter(
    function (index)
    {
        return $(this).find('.repeatedObject').val() == 'someValue';
    }
).hide();

filter()函数需要返回一个布尔值来实际确定是否在列表中保留一个元素。检查API(http://api.jquery.com/filter/)以获取更多信息。

另外,作为旁注,val()html()text()和其他相关函数会从集合中的第一个元素返回信息。如果您想循环播放,则必须使用eachfor循环。

答案 1 :(得分:2)

一些建议。

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

答案 2 :(得分:1)

我认为你需要从filter函数返回一个布尔值或等价物。怎么样:

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

或者:

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