jQuery "不包含" 选择器

56
:contains() jQuery选择器允许您匹配包含特定文本串的元素。我的需求似乎相关:我提供用户一个“过滤”文本框,他们可以输入,然后我有一组列表项。 我想要的是,当用户输入文本时,将所有不包含用户在文本框中输入的文本的列表项隐藏起来。 我可以侦听文本框上的keyup事件,但是我不知道如何做两件事:
  1. “反转”:contains()选择器结果-- 我想要选择不匹配的元素,并将它们隐藏。
  2. 使匹配区分大小写。
我意识到我可以使用.filter(function(index)),但我想知道是否存在已经内置在jQuery中的选择器或函数可以实现这个功能?

14
只需使用 $(".something:not(:contains('text'))") 即可。我在这个帖子上尝试过:$(".question:not(:contains('filter2134234'))") - megawac
3个回答

107
假设您的用户文本存储在一个名为userString的变量中:
$(':not(:contains('+ userString +'))').hide(); 

将隐藏不包含该字符串的所有元素。

编辑: 如果你可以控制列表项中的元素,当你将它存储在userString变量中时,你可以转换用户的文本。


我最终还是使用了过滤函数,因为我需要进行不区分大小写的搜索,并且没有简单的转换用户输入的方法使其与列表项的文本匹配。但是,我认为这是我能得到的最好答案。 - Josh
我查看了有关问题https://dev59.com/7XVC5IYBdhLWcg3wxEN1的讨论,我觉得使用过滤器函数比尝试修改:contains以实现不区分大小写更简单。 - Josh
存在注入漏洞,例如输入:test)),other... - e-info128

16
假设您想要包含所有不包含字符串“Dinesh”的列表。(假设Dinesh是name属性中的一部分)
$('tableId > tbody > tr > td').not("[name*='Dinesh']")

7
请使用以下内容:
$("div:not(:contains('John'))").css("text-decoration", "underline");

1
请添加您的源代码,这个可以通过快速的互联网搜索找到。 - alexander

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接