我目前有JQuery代码来搜索第一列的表并按行排序。但是,它包含我们希望从搜索中排除的其他注释信息,因此搜索仅限于系统名称信息。
SearchFilter.customfilter = function(searchInput, table) {
var input, filter, table, tr, td, i;
input = document.getElementById(searchInput);
filter = input.value.toUpperCase();
table = document.getElementById(table);
tr = table.getElementsByTagName("tr");
// Loop through all table rows, and hide those who don't match the search query
for (i = 0; i < tr.length; i++) {
td = tr[i].getElementsByTagName("td")[0];
if (td) {
if (td.innerText.toUpperCase().indexOf(filter) > -1) {
tr[i].style.display = "";
} else {
tr[i].style.display = "none";
}
}
}
}
这是正在搜索的HTML表的示例行:
<tr>
<td><a href="site.html">System Name</a>
<p class="tablenote"><small>Note: System note information. </small></p>
</td>
<td>N/A</td>
<td>N/A</td>
</tr>
是否有一种很好的方法来修改jquery代码以从搜索中排除表格信息,例如排除该tablenote类或排除小文本?
答案 0 :(得分:-1)
您可以使用jQuery&#39; .filter()
(与:contains
选择器一起)来过滤掉类.tablenote
中任何元素内的结果。关键代码如下:
var inputText = "Joel";
var $matches = $('.row').find(':contains(' + inputText + ')').filter(function(){
// only include matches that are *not* inside an .info element
return $(this).closest('.tablenote').length == 0;
});
var rowContainsInput = ($matches.length > 0);
因此,基本上说&#34;告诉我此行是否包含输入文本,但不如果它在.tablenote
元素内。< / p>
查看我的JSFiddle here。
注意:但是,如果您首先控制了标记,最好将类添加到系统名称锚点(如<a href="..." class="system-name">System Name</a>
),然后具体目标$row.find('.system-name')
。或者更好的是,最好使用数据属性标记系统名称锚点:<a href="..." data-system-name>System Name</a>
,然后您可以将其定位为:$row.find('[data-system-name]')
。