jQuery remove tr 没有结果


jQuery remove tr with no results

我有一个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();
});

这样做的是:

  1. 绑定到 select 元素的 change 事件(通常,它优先于您在标记中执行的内联绑定)。
  2. 首先隐藏所有tr元素,稍后将显示所需的元素。
  3. 显示与筛选器匹配的所有tr元素。

在这种情况下,过滤器是一个函数,如果td元素内部的文本(您可能需要更新该选择器)等于所选值,则返回true。 这里与您尝试的主要区别在于,.filter()返回匹配(过滤)元素的列表,而不是要比较的实际值。 过滤器内部是进行比较的地方,在这种情况下使用函数(对于被过滤的任何给定元素,该函数需要返回 true 或 false)。