javascript - 简单的 jQuery 页面内容搜索显示不准确的结果

标签 javascript jquery html keyup

我有要搜索其内容的 div 列表。如果有一个包含搜索词的 div,我想显示那个 div 并隐藏所有其他的。

我的脚本只能正常工作。它显示结果,但有时结果不准确。这是我的 html:

<form>
    <input class="searchbox" type="text">
</form>
<div id="staff-directory-wrapper">
    <div class="single-staff" style="display: block;">
            <img src="">
        <div class="name">
            Mark
        </div>
        <div class="position">
            position
            <br>
            Cardiology
        </div>
    </div>
    <div class="single-staff" style="display: block;">
            <img src="">
        <div class="name">
            sam Bob
        </div>
        <div class="position">
            position
            <br>
            Cardiovascular Surgery
        </div>
    </div>
    <div class="single-staff" style="display: block;">
            <img src="">
        <div class="name">
            David charles
        </div>
        <div class="position">
            position
            <br>

        </div>
    </div>
    <div class="single-staff" style="display: block;">
            <img src="">
        <div class="name">
            Richard rick
        </div>
        <div class="position">
            position
            <br>

        </div>
    </div>
    <div class="single-staff" style="display: block;">
            <img src="">
        <div class="name">
            Michael
        </div>
        <div class="position">
            position
            <br>
            Anesthesiology
        </div>
    </div>
</div>

这是我的 jQuery:

$('.searchbox').keyup(function() {
    var searchTerm = $('.searchbox').val().toLowerCase();
    var content = $('#staff-directory-wrapper .single-staff');

    content.each(function() {
        $(this).text();
        if ( $(this).is(":contains('"+ searchTerm + "')") ) {
            $(content).hide();
            $(this).fadeIn(400);
        }
        if ($('.searchbox').val() == '') {
            $(content).show();
        } 
    });
});

我认为问题在于搜索是基于字符而不是单词进行的。例如,如果我搜索术语“cardio”,会弹出几个没有该词或“cardiovascular”一词的结果。我注意到这是确实显示的结果,字母 c ard i o 全部存在并按该顺序存在。这方面的一个例子是在包含文本的 div 中:

理查德瑞克 位置

这些行包含字母 c a r d i o。

最佳答案

我已经修复了一些你的代码,你引用了一些错误的变量,错过了一个 else 并且错过了另一个 toLowerCase,因为你在每次迭代中隐藏了所有内容在每个内容上。

我还将字符串比较更改为 indexOf(var substr) 调用,这样速度更快,问题更少。

$('.searchbox').keyup(function() {
  var searchTerm = $('.searchbox').val().toLowerCase();
  var contents = $('#staff-directory-wrapper .single-staff');
  contents.each(function() {
    var text = $(this).text().toLowerCase();
    if (text.indexOf(searchTerm) !== -1) {
      $(this).fadeIn(400);
    } else
      $(this).hide();

    if ($('.searchbox').val() == '') {
      $(this).show();
    }
  });
});
.single-staff {
  margin-bottom: 5px;
  padding: 3px;
  border-bottom: 1px dashed #ccc
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form>
  <input class="searchbox" type="text">
</form>
<div id="staff-directory-wrapper">
  <div class="single-staff" style="display: block;">
    <img src="" />
    <div class="name">
      Mark
    </div>
    <div class="position">
      position
      <br>Cardiology
    </div>
  </div>
  <div class="single-staff" style="display: block;">
    <img src="" />
    <div class="name">
      sam Bob
    </div>
    <div class="position">
      position
      <br>Cardiovascular Surgery
    </div>
  </div>
  <div class="single-staff" style="display: block;">
    <img src="" />
    <div class="name">
      David charles
    </div>
    <div class="position">
      position
      <br>

    </div>
  </div>
  <div class="single-staff" style="display: block;">
    <img src="">
    <div class="name">
      Richard rick
    </div>
    <div class="position">
      position
      <br>

    </div>
  </div>
  <div class="single-staff" style="display: block;">
    <img src="" />
    <div class="name">
      Michael
    </div>
    <div class="position">
      position
      <br>Anesthesiology
    </div>
  </div>
</div>

关于javascript - 简单的 jQuery 页面内容搜索显示不准确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41963693/

相关文章:

html - 当位置设置为绝对时垂直显示韩文文本 (HTML CSS)

javascript - Disney+ 如何防止对其内容进行屏幕录制?

javascript - JQuery 按顺序动画列表项然后淡出列表并重复

javascript - Google map InfoWindows 未关闭

javascript - 正则表达式 - javascript 替换所有非数字

javascript - 淡入/淡出阵列循环停止

html - 如何防止滚动条覆盖 IE10 中的内容?

html - 更改浏览器分辨率时的设计问题

javascript - 如何使用 Javascript 将带有复选框的列表更改为下拉列表?

jquery - 如何以编程方式覆盖表单提交上的 select2 css?