jQuery删除tr没有结果

时间:2013-10-28 15:15:55

标签: javascript php jquery sql

我有一个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()功能之前,但没有成功。

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

我不确定你对这段代码的想法在哪里,但是filter()肯定不会做你认为它正在做的事情。 $("#table").filter("tr")将为您提供表格中tr个元素的列表。该列表本身不会等于任何选定的值,它只是一个元素数组。

a jsFiddle here中嘲笑一些事情,也许你想要更像这样的东西:

$('#selectTown').change(function () {
    $('#table tr').hide();
    $('#table tr').filter(function () {
        return $(this).find('td:first').text() === $('#selectTown').val();
    }).show();
});

这是做什么的:

  1. 绑定到change元素的select事件(优先于您在标记中执行的内联绑定,一般情况下)。
  2. 首先隐藏所有tr元素,您稍后会显示所需的元素。
  3. 显示与过滤器匹配的所有tr元素。
  4. 在这种情况下,过滤器是一个函数,如果true元素内部的文本(您可能需要更新该选择器)等于所选值,则返回td。这里与您尝试的主要区别在于.filter()返回匹配(已过滤)元素的列表,而不是要比较的实际值。过滤器的内部是进行比较的地方,在这种情况下使用一个函数(对于任何被过滤的元素,它需要返回true或false)。

答案 1 :(得分:0)

这一行$("#table").filter("tr") === $("#selectTown").val()将文档元素与字符串进行比较,它不起作用。

最简单的解决方案是隐藏所有元素,然后选择并显示所有匹配的元素。例如:

$('tr').hide();
$('tr[value=' + $("#selectTown").val() + ']').show();