【问题标题】:jQuery - Trying to filter divs on keyupjQuery - 尝试在 keyup 上过滤 div
【发布时间】:2009-10-22 01:54:25
【问题描述】:

修改后的代码

jQuery(function($) {
$("#filter").keyup(function () {
    var filter = $(this).val(), count = 0;
    $(".filtered h2").each(function () {
    if ($(this).text().search(new RegExp(filter, "i")) != -1) {
            $(this).parent().addClass("hidden");
    } else {
            $(this).parent().removeClass("hidden");
            count++;
    }
    $("#filter-count").text(count);
    });
});

});

我列出了许多 div,我希望能够添加一个允许用户开始输入的输入字段,并根据每个 div h2 标签过滤 div。我正在尝试下面的代码,但它没有过滤。它也没有抛出任何错误,所以我现在不知道该怎么做......

这是 html 标记:

    <input id="filter" name="filter" size="40"/>

    <div class="filtered">

        <div class="archive-row clearfix">
             <label>Creator: </label><h2 class="hidden">Alchemy</h2>
                <label>Title: </label> <p>Cras velit eros, eleifend ut viverra </p>
                <label>Summary: </label><p>Etiam lobortis, risus a dignissim tempor, neque sapien lobortis mi, quis semper sapien nisi dictum nisi. Integer neque neque</p>
        </div>

     <div class="archive-row clearfix">
         <label>Creator: </label><h2 class="hidden">Mathematics</h2>
            <label>Title: </label> <p>Cras velit eros, eleifend ut viverra </p>
            <label>Summary: </label><p>Etiam lobortis, risus a dignissim tempor, neque sapien lobortis mi, quis semper sapien nisi dictum nisi. Integer neque neque</p>
        </div>

     <div class="archive-row clearfix">
         <label>Creator: </label><h2 class="hidden">English</h2>
            <label>Title: </label> <p>Cras velit eros, eleifend ut viverra </p>
            <label>Summary: </label><p>Etiam lobortis, risus a dignissim tempor, neque sapien lobortis mi, quis semper sapien nisi dictum nisi. Integer neque neque</p>
        </div>

    </div>

这里是 jquery...

$(document).ready(function() {

$("#filter").keyup(function () {
    var filter = $(this).val(), count = 0;
    $(".filtered h2").each(function () {
 if ($(this).text().search(new RegExp(filter, "i")) < 0) {
            $(this).addClass("hidden");
 } else {
            $(this).removeClass("hidden");
            count++;
 }
    });
    $("#filter-count").text(count);
});

});

【问题讨论】:

    标签: jquery html filter


    【解决方案1】:
        <input id="filter" name="filter" size="40"/>
    
        <div class="filtered">
    
            <div class="archive-row clearfix">
                 <label>Creator: </label><h2 >Alchemy</h2>
                    <label>Title: </label> <p>Cras velit eros, eleifend ut viverra </p>
    
                    <label>Summary: </label><p>Etiam lobortis, risus a dignissim tempor, neque sapien lobortis mi, quis semper sapien nisi dictum nisi. Integer neque neque</p>
            </div>
    
         <div class="archive-row clearfix">
             <label>Creator: </label><h2 >Mathematics</h2>
                <label>Title: </label> <p>Cras velit eros, eleifend ut viverra </p>
    
                <label>Summary: </label><p>Etiam lobortis, risus a dignissim tempor, neque sapien lobortis mi, quis semper sapien nisi dictum nisi. Integer neque neque</p>
            </div>
    
         <div class="archive-row clearfix">
             <label>Creator: </label><h2>English</h2>
                <label>Title: </label> <p>Cras velit eros, eleifend ut viverra </p>
    
                <label>Summary: </label><p>Etiam lobortis, risus a dignissim tempor, neque sapien lobortis mi, quis semper sapien nisi dictum nisi. Integer neque neque</p>
            </div>
    
        </div>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
        <script>
    $(document).ready(function() {
    
        $("#filter").keyup(function () {
        var filter = $(this).val(), 
            count = 0;
    
        $(".filtered h2").each(function () {
            var parent = $(this).parent(), length = $(this).text().length>0;
    
            if ( length && $(this).text().search(new RegExp(filter, "i")) < 0) {
            parent.hide();
             } else {
            parent.show();
            count++;
             }
        });
        $("#filter-count").text(count);
        });
    
    });
    
    </script>
    <div id="filter-count"></div>
    

    【讨论】:

    • 不... :-( 什么都没有发生。仍然没有错误消息。我尝试了原始方式和您建议的方式,但仍然没有...
    • 你到底在隐藏什么? h2s 还是父元素? 困惑
    • 我有萤火虫,我根本没有任何错误......自从我最初发布以来,我已经取得了一些进展,但方向错误......首先,我意识到我需要隐藏h2所属的整个div,所以我使用了parent(),但是当我删除我在输入字段中输入的字符时,一切都消失了。其次,当我输入一个字符时,它会删除以该字母开头的 h2 div,而不是隐藏其他...我将修改后的代码放在我原来的帖子中...非常感谢指导。
    • 我更新了我的答案,应该会好一点。您绝对应该在过滤时准确指出您想要什么,因为如果您只是说“过滤”,我们不知道想要什么
    • 好的,nvm...一旦我把它改回0,它就起作用了:)谢谢!
    【解决方案2】:

    您似乎在实际的 H2 标签上使用 .each() 函数,并从中添加/删除隐藏类。我的猜测是,您想从 div 本身而不是 H2 添加/删除隐藏类?

    $(document).ready(function() {
        $("#filter").keyup(function () {
            var filter = $(this).val(), count = 0;
            $(".filtered h2").each(function () {
                if ($(this).text().search(new RegExp(filter, "i")) < 0) {
                    $(this).parent().addClass("hidden");
                } else {
                    $(this).parent().removeClass("hidden");
                    count++;
                }
            });
            $("#filter-count").text(count);
        });
    });
    

    【讨论】:

      【解决方案3】:

      我可能错了,但我认为您想隐藏父 div,因此调用父级应该可以解决此问题。

      $(document).ready(function() {
      
          $("#filter").keyup(function () {
              var filter = $(this).val(), 
                  count = 0;
              $(".filtered h2").each(function () {
                  if ($(this).text().search(new RegExp(filter, "i")) < 0) {
                      $(this).parent().addClass("hidden");
                  } else {
                      $(this).parent().removeClass("hidden");
                      count++;
                  }
              });
              $("#filter-count").text(count);
          });
      });
      

      【讨论】:

        【解决方案4】:

        这个 jquery 插件适合你,它的文件管理器是一些按标题的 div 或按类名的其他元素

        https://opengeo.tech/jquery-filterbox/

        $('#findbox1').filterbox({
            container: '.boxlist',
            child: '.box',
            childKey: '.title'
        });
        

        【讨论】:

          猜你喜欢
          • 2017-08-09
          • 2019-01-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多