我有一个SQL-PHP打印表,表顶部有一个选择。该表包含按城镇分类的联系人。
在开始时,该表显示所有联系人。如果我指定城镇,我想隐藏其余的。
我正在尝试使用 jQuery 脚本
<script>
function updateit(){
if ($("#table").filter("tr") === $("#selectTown").val()) $(this).show(););
else {$(this).hide();};
}
</script>
[...]
<select id="selectTown" onchange="updateit()"><option value="NY">New York</option><option value="TX">Texas</option></select>
<table id="table">
bla bla bla...
</table>
之前我尝试使用find()
功能,但没有成功。
有什么建议吗?
此行$("#table").filter("tr") === $("#selectTown").val()
将文档元素与字符串进行比较,则不起作用。
最简单的解决方案是隐藏所有元素,然后选择并显示所有匹配的元素。例:
$('tr').hide();
$('tr[value=' + $("#selectTown").val() + ']').show();
我不确定你从哪里得到这个代码的想法,但filter()
绝对没有做你认为它正在做的事情。 $("#table").filter("tr")
将为您提供表中tr
元素的列表。 该列表本身不会等于任何选定的值,它只是一个元素数组。
在这里用jsFiddle模拟一些东西,也许你想要更像这样的东西:
$('#selectTown').change(function () {
$('#table tr').hide();
$('#table tr').filter(function () {
return $(this).find('td:first').text() === $('#selectTown').val();
}).show();
});
这样做的是:
- 绑定到
select
元素的change
事件(通常,它优先于您在标记中执行的内联绑定)。 - 首先隐藏所有
tr
元素,稍后将显示所需的元素。 - 显示与筛选器匹配的所有
tr
元素。
在这种情况下,过滤器是一个函数,如果td
元素内部的文本(您可能需要更新该选择器)等于所选值,则返回true
。 这里与您尝试的主要区别在于,.filter()
返回匹配(过滤)元素的列表,而不是要比较的实际值。 过滤器内部是进行比较的地方,在这种情况下使用函数(对于被过滤的任何给定元素,该函数需要返回 true 或 false)。