有没有办法使用javascript/jquery搜索一组li标记并缩小搜索范围

有没有办法使用javascript/jquery搜索一组li标记并缩小搜索范围,javascript,jquery,search,Javascript,Jquery,Search,我一直在网上寻找如何做到这一点的想法。我已经创建了一个包含所有这些项目的xml文档,总共有106个不同的选项,用户可以仅在侧菜单中选择,这也是客户想要的。我想创建一个搜索框,允许我输入其中一个选项的名称,列表将缩小到仅显示带有用户输入的单词的选项 我的问题是有没有允许这种行为的插件 如果没有,如何在一组li元素中搜索文本?您可以尝试按包含选择器进行筛选: var matches = $( 'ul#myMenu' ).find( 'li:contains(search string) ' ); $

我一直在网上寻找如何做到这一点的想法。我已经创建了一个包含所有这些项目的xml文档,总共有106个不同的选项,用户可以仅在侧菜单中选择,这也是客户想要的。我想创建一个搜索框,允许我输入其中一个选项的名称,列表将缩小到仅显示带有用户输入的单词的选项

我的问题是有没有允许这种行为的插件

如果没有,如何在一组li元素中搜索文本?

您可以尝试按包含选择器进行筛选:

var matches = $( 'ul#myMenu' ).find( 'li:contains(search string) ' );
$( 'li', 'ul#myMenu' ).not( matches ).slideUp();
matches.slideDown();
参见上的示例

如何在一组li元素中搜索文本


参考资料:

此处使用向下钻取示例:

http://www.designchemical.com/lab/jquery-drill-down-menu-plugin/getting-started/
我的建议是:

$('#drilldown').find("a:contains('Product')");

要自己编写代码将相当简单,下面的jQuery从输入字符串中获取一个字符串,并将迭代列表项ulli和show/hide,具体取决于它们是否匹配输入字符串

如果需要,可以修改ul li选择器以包含其他列表

jQuery("#inputString").keyup(function () {
    var filter = jQuery(this).val();
    jQuery("ul li").each(function () {
        if (jQuery(this).text().search(new RegExp(filter, "i")) < 0) {
            jQuery(this).hide();
        } else {
            jQuery(this).show()
        }
    });
});

我希望有很多插件可以做同样的事情,给它一个谷歌

您可以尝试使用以下概念:

$('.search').keyup(function(){
    if( $(this).val().length > 0 ){
        var foundin = $('#drilldown').find('li a:contains("'+$(this).val()+'")');
    }
});

这一切都取决于最终的HTML结构以及要搜索的元素,例如,您希望搜索HTML值还是li标记中的值。li标记中只有值。其余页面基本上是用户希望查看的报告。搜索字段实际上只用于导航,以使导航更容易我怀疑在这一点上我用谷歌搜索了错误的东西我会根据答案改进我的搜索我会尝试其中一个答案,它只有几行代码非常好的答案
$('.search').keyup(function(){
    if( $(this).val().length > 0 ){
        var foundin = $('#drilldown').find('li a:contains("'+$(this).val()+'")');
    }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
    // Start here: Search Service area via jQuery
  window.filter = function(element)
  {
    var value = $(element).val().toUpperCase();
    $(".left_message > li").each(function() 
    {
      if ($(this).text().toUpperCase().search(value) > -1){
        $(this).show();
      }
      else {
        $(this).hide();
      }
    });
  }
});
</script>

<input type="text"  placeholder="Enter text to search" onkeyup="filter(this);">

<ul role="tablist" class="left_message">
    <li><a href="#"><span>Anupk Kumar</span></a></li>
    <li><a href="#"><span>Pradeep Kumar</span></a></li>
    <li><a href="#"><span>Zahid Gani</span></a></li>
    <li><a href="#"><span>Amitabh</span></a></li>
    <li><a href="#"><span>Chandan Gupta</span></a></li> 
</ul>



Result : Search Zahid , they return following output

<ul role="tablist" class="left_message">`enter code here`
    <li><a href="#"><span>Zahid Gani</span></a></li>    
</ul>