jQuery:仅显示包含搜索值的内容

时间:2013-09-18 13:59:25

标签: jquery search

我想只显示包含输入的搜索值的div。 因此,如果我在搜索框中键入upload login,则应仅显示问题1和问题3.

注意:它应该适用于多个搜索输入值(例如:应搜索值uploadlogin并显示包含此值的div

注意2 :如果搜索输入如下所示,它还应显示问题1和问题3:upl log

注3 :不敏感。因此,upload应使用内容Upload过滤div(问题1)。

这就是我得到的:

<section id="content">
<div id="search-block">
    <input type="text" id="inpSearch" placeholder="Search.." />
</div>
<div>
    <div class="wrapper">
        <h1>Question 1</h1>
        <p>Harry Markus Upload</p>
    </div>
</div>
<div>
    <div class="wrapper">
        <h1>Question 2</h1>
        <p>Registration Append August Download</p>
    </div>
</div>
<div>
    <div class="wrapper">
        <h1>Question 3</h1>
        <p>Login July Dad</p>
    </div>
</div>

$('#inpSearch').keyup(function(){
    var sSearch = this.value;
    $('section#content > div:not(:first-child)').hide();
    $('section#content > div:contains("' + sSearch + '"):not(:first-child)').show();
});

2 个答案:

答案 0 :(得分:2)

这里有两个问题。

  1. 您需要使用不区分大小写的jQuery:包含选择器。例如:如果您搜索uploadUpload,则应获取结果。
  2. <强> CODE:

     jQuery.expr[':'].Contains = function(a, i, m) {
                 return jQuery(a).text().toUpperCase()
                     .indexOf(m[3].toUpperCase()) >= 0;
               };
               jQuery.expr[':'].contains = function(a, i, m) {
                 return jQuery(a).text().toUpperCase()
                     .indexOf(m[3].toUpperCase()) >= 0;
               };
    

    消息来源:Is there a case insensitive jQuery :contains selector?

    2.拆分搜索字符串并使用.each解析,如:

    <强> CODE:

        $('#inpSearch').keyup(function(){
        var sSearch = this.value;
        sSearch = sSearch.split(" ");
        $('section#content > div:not(:first-child)').hide();
        $.each(sSearch, function(i){
        $('section#content > div:contains("' + sSearch[i] + '"):not(:first-child)').show();
        });
    });
    

    DEMO FIDDLE

答案 1 :(得分:1)

试试这个

    $('#content div').not("#search-block").hide();
$('#inpSearch').on('keyup',function(){
    $('#content div').not("#search-block").hide();
    var val = this.value;
    val = val.split(" ");
    var contains="";
    for(var i = 0; i < val.length;i++){
        contains.length >0?contains+=",div":"";
        contains+=":contains('"+val[i]+"')";
    }
    $('#content div'+contains).show();
});

DEMO

对于区分大小写,请查看this