虽然我不怀疑这已经得到了回答,但我找不到与我的问题相匹配的好方法。
我有一个表,我想根据它们是否包含与值匹配的隐藏字段来过滤行。
据我所知,该技术倾向于“显示所有行”,“过滤集合”,“显示/隐藏过滤集”
我有以下jquery,但我对过滤器感到厌倦,我的过滤集似乎总是不包含任何元素。
我的桌子是通常的
<table>
<tr><td>header></td><td> </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生成的idallRows.show();
allRows.filter(function(){
return $(this).find(
"input[type='hidden'][id$='IsAutoMatchHiddenField']").val() == "False";
}).hide();
答案 0 :(得分:3)
$('#mySelector :hidden').filter(
function (index)
{
return $(this).find('.repeatedObject').val() == 'someValue';
}
).hide();
filter()
函数需要返回一个布尔值来实际确定是否在列表中保留一个元素。检查API(http://api.jquery.com/filter/)以获取更多信息。
另外,作为旁注,val()
,html()
,text()
和其他相关函数会从集合中的第一个元素返回信息。如果您想循环播放,则必须使用each
或for
循环。
答案 1 :(得分:2)
一些建议。
[id~='IsAutoMatchHiddenField']
[attribute~=value]
会在由空格分隔的值中查找单词,例如:[value~='foo']
将与value="foo-bar"
不匹配,但会匹配{{1} }}。
value="foo bar"
答案 2 :(得分:1)
我认为你需要从filter
函数返回一个布尔值或等价物。怎么样:
allrows.filter(function() {
return $(this).find(':hidden').length;
}).hide();
或者:
$('tr :hidden').closest('tr').hide();