【问题标题】:jQuery remove tr with no resultsjQuery 删除 tr 没有结果
【发布时间】:2013-10-28 15:15:55
【问题描述】:

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

有什么建议吗?

【问题讨论】:

  • 调试提示:在 javascript 控制台中执行您的选择器。例如。在 chrome 中的开发人员工具中,在 firefox 中的 firebug 控制台等中。
  • 你不能用$('#table tr')吗?
  • 您尝试的甚至不是有效的语法。当您将行替换为 bla bla bla... 时,我们如何为您推荐一种过滤行的方法?
  • 另外,如果我没记错的话,你想与$("#selectTown").val() 进行比较,这会将 HTML DOM 元素或 jQuery 对象与永远无效的字符串进行比较跨度>

标签: javascript php jquery sql


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    我不确定你从哪里得到这个代码的想法,但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. 绑定到select 元素的change 事件(一般来说,这比您在标记中执行的内联绑定更受欢迎)。
    2. 先隐藏所有tr 元素,稍后您会显示您想要的。
    3. 显示与过滤器匹配的所有tr 元素。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-20
      • 2016-01-10
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 2021-11-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多