2010-04-15 83 views
3

虽然我不怀疑这已得到解答,但我找不到与我的问题匹配的很好的匹配项。jQuery隐藏包含隐藏字段匹配值的所有表行

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

据我所知,技术趋于“显示所有行”,“过滤设置”,“显示/隐藏过滤设置”

,我有以下的jQuery但我aweful带有过滤器和我过滤集似乎总是不包含任何元素。

我的表是通常

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

感谢好心

大厦在那些伟大的建议,下面我发现下面做的伎俩。我错过了过滤器关闭函数必须根据过滤条件返回真/假的事实。另外,使端部 - 与选择器是非常适合asp.net生成基于作INamingContainer

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

回答

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

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

另外,作为旁注的val()html()text(),和其它相关函数返回从所述组中的第一元件的信息。如果你想循环,你必须使用eachfor循环。

+0

很好,非常感谢你对这个重要的信息。我觉得不好。 此外,对于做asp.net的人,如果你想做ID结束请参考这里:http://stackoverflow.com/questions/609382/jquery-selector-id-ends-with – 2010-04-15 21:09:51

+0

不客气!不要担心感觉不好,每周在工作中发生在我身上。错误的路径,忘记输入'return'...谢天谢地,我的同事们不会因为这些错误而取笑我。 =) – 2010-04-15 23:28:24

1

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

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

或者:

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

我相信我刚刚发现我错过了那个关键点。谢谢你..过滤器行为像在C#中的谓语 – 2010-04-15 21:08:54

2

夫妇的建议。

  1. find函数需要返回一个布尔值。
  2. 你正在寻找一个ID?或寻找价值?[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'; 
    });