javascript - 过滤掉不包含搜索字符串的元素[有解决方案,寻求改进]

标签 javascript jquery html css

好吧,这很难用标题来描述。 我有一个输入字段和三个段落[将它们称为“Ps”]

<p>ABCD</p>
<p>CDEF</p>
<p>XYZ</p>

现在,当在输入字段中按下按钮时,不包含搜索字符串的段落将被过滤掉 hide()。完成以下操作:

$("input").keyup(function(){
    var x = $(this).val();
    $("p:not(:contains('" + x + "'))").hide();
});

当按下退格键或删除键时,不包含搜索字符串的 Ps 会再次显示 show(),如下所示:

$("input").keydown(function(){
        var x = $(this).val();
        var key = event.keyCode || event.charCode;

        if( key == 8 || key == 46 ){
            $("p:not(:contains('" + x + "'))").show();
        }
});

现在这会导致奇怪的行为。我真的不好解释这个。。 要了解我在说什么,请按照本 fiddle result 中的这些步骤操作

  1. 点击进入输入框

  2. 键入“abc”[在键入“a”后立即隐藏最后两个 P]

  3. 输入“x”[因此输入现在是“abcx”并且第一个 P 已被隐藏]
  4. 按退格键并密切注意 [所有 P 都会显示一瞬间,然后只有第一个按预期显示]

这是 full JSFiddle

所以,我想知道的是,是否有办法不在那一瞬间显示所有 P,而是在按下退格键时只显示第一个 P。

最佳答案

你可以这样简单地做

$("input").keyup(function(){
        var x = $(this).val();
        $("p:not(:contains('" + x + "'))").hide();
        $("p:contains('" + x + "')").show();
});

Fiddle

关于javascript - 过滤掉不包含搜索字符串的元素[有解决方案,寻求改进],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33790879/

相关文章:

ajax - 计算 Json 字符串中的重复值并将值和标签存储在另一个字符串中

php - php页面中左上角和右上角的奇怪边距

javascript - 当字符数超过一定限制时,如何从文本框中删除字符?

javascript - 在没有 React 的情况下在 TypeScript 中使用 JSX

javascript - 根据Rails 3中另一个collection_select中的选定项目自动填充text_fields

css - 将各种图像居中到一个div

java - Spark web框架无法加载静态文件

javascript - 如何避免 Angular 服务中的重复方法

javascript - CSS/HTML 画廊

javascript - jQuery - 我怎样才能做到这一点(标签替换)