jquery - 使用 jQuery 仅按名称搜索和过滤

标签 jquery html

我有一个搜索和过滤脚本:

<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>

<input class="my-textbox" />
<table id="myTable">
    <tr class="header">
        <th style="width:60%;">Name</th>
        <th style="width:40%;">Country</th>
    </tr>
    <tr>
    <td id="name">Alfreds Futterkiste</td>
    <td>Germany</td>
  </tr>
  <tr>
    <td id="name">Berglunds snabbkop</td>
    <td>Sweden</td>
  </tr>
</table>
<div class="no-results" style="display:none;">No results!</div>
<script>
var $block = $(".no-results");
$(".my-textbox").keyup(function() {
    var value = $(this).val().toUpperCase();
    var isMatch = false;
    $("#myTable tr").each(function() {
        var content = $(this).html();
        if (content.toUpperCase().indexOf(value) == -1) {
            $(this).hide();
        } else {
            isMatch = true;
            $(this).show();
        }
    });
    $block.toggle(!isMatch);
});
</script>

问题是如何仅按名称过滤结果?

(因此,如果我搜索“Alfreds”,则显示“Alfreds Futterkiste”和“Germany”,但如果我搜索“Germany”,则显示“无结果!”)。

最佳答案

var content = $(this).html(); 替换为 var content = $(this).find('.name').html();

请使用类而不是相同的 ID(id="name"class="name")。

不要忘记通过将 :not(.header) 添加到选择器来循环遍历标题行。

$(document).ready(() => {
  var $block = $(".no-results");
  
  $(".my-textbox").keyup(function() {
    var value = $(this).val().toUpperCase();
    var isMatch = false;
    
    $("#myTable tr:not(.header)").each(function() {
        var content = $(this).find('.name').html();
        
        if (content.toUpperCase().indexOf(value) == -1) {
            $(this).hide();
        } else {
            isMatch = true;
            $(this).show();
        }
    });
    
    $block.toggle(!isMatch);
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input class="my-textbox" />
<table id="myTable">
    <tr class="header">
        <th style="width:60%;">Name</th>
        <th style="width:40%;">Country</th>
    </tr>
  <tr>
    <td class="name">Alfreds Futterkiste</td>
    <td>Germany</td>
  </tr>
  <tr>
    <td class="name">Berglunds snabbkop</td>
    <td>Sweden</td>
  </tr>
</table>
<div class="no-results" style="display:none;">No results!</div>

关于jquery - 使用 jQuery 仅按名称搜索和过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55372891/

相关文章:

javascript - 尝试使用选项卡更改 div 中的内容

javascript - 单击按钮后如何隐藏按钮?

javascript - 从工具提示中的按钮进行 Ajax 调用

javascript - 表单提交上的 Bootstrap 模式未在正确的位置显示

html - 第一层倾斜的 CSS 下拉菜单

php - 我们如何将 PHP 变量注入(inject) Javascript

javascript - Sweet Alert 2 提交前确认

javascript - 悬停时更改元素时的动画

jquery - 使用 JQuery 删除谷歌地图标记

由于文本内容,html 按钮上方有多余的空格