我有一个表,每行都是一个地址。每行还有一个邮政编码,但它是隐藏的。我需要一个文本框来过滤与输入的zip匹配的地址行。要搜索的字段命名为“zip”。
这是我的表:
<asp:DataList
id="list1"
runat="server">
<ItemTemplate>
<cc1:SWCLabel
runat="server"
Text ='<%# Eval("address")%>'
zip='<%# Eval("zip")%>'
/>
</ItemTemplate>
每个表行都是这样呈现的,请注意zip属性到span中:
<tr>
<td>
<span zip="11">address mmomo</span>
</td>
</tr>
更新的演示:这是演示:zip文本框完全匹配zip,但我需要匹配包含或以输入文本开头的拉链:http://jsfiddle.net/QFQ5k/83/
$.expr[':'].containsIgnoreCase = function (n, i, m) {
return jQuery(n).text().toUpperCase().indexOf(m[3].toUpperCase()) >= 0;
};
var gridAddr = $("#t1");
var filtroCP = $('#txtbox');
$("#txtbox").keyup(function () {
gridAddr .find("tr").hide();
var data = this.value.split(" ");
var jo = gridAddr .find("tr");
if ($(this).val().length != 0) {
$.each(data, function (i, v) {
jo = jo.filter(function(index){
return $(this).find("span").attr("zip").search($("#txtbox").val())!=-1;
});
});
jo.show();
}
else {
jo.show();
}
});
更新如果您确定该行的任何一个子元素都包含属性“zip”,那么使用它来过滤行而不管它们的呈现如何:
代替
return $(this).find("span").attr("zip").search($("#txtbox").val())!=-1;
写
return $(this).find("[zip*='"+$("#txtbox").val()+"']").length>0;
使用linq.js http://linqjs.codeplex.com/
<!DOCTYPE>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script type="text/javascript" src="jquery.linq.min.js"></script>
</head>
<body>
<table border="1">
<tr><td zip="112233">112233</td></tr>
<tr><td zip="232323">232323</td></tr>
<tr><td zip="454567">454567</td></tr>
</table>
<input type="text" id="filter">
<script>
$('#filter').change(function(){
$("[zip]").show();
$("[zip]").toEnumerable()
.Select( function(x){ return x.attr('zip').indexOf($('#filter').val())==-1 ? x : null})
.TojQuery()
.each(function(){
$(this).hide();
});
});
</script>
</body>
</html>