카테고리 없음

[자바 스크립트] 요소를 입력하고 구성하여 찾는 jQuery 스크립트

행복을전해요 2021. 2. 2. 19:35

데모

아이디어는

 $("#ul_container").find("li").filter(function () {//your comparing logic here });

여기, 이것을 시도하십시오. 정직 당신의 코드를 읽을 수 없어서이 예제를 만들었습니다. datalist클래스 이름으로 배열 하위 항목 (검색 할 데이터가 포함 된 범위)을 추가했습니다 .

일반 검색 기능.

HTML

<input type="text" id="search" />

<ul id="ul_container">
    <li class="listItem">
            <span class="car">Honda</span>
                    <span class="country">Japan</span>
                        </li>
                            <li class="listItem">
                                    <span class="car">BMW</span>
                                            <span class="country">Germany</span>
                                                </li> 
                                                </ul>
                                                

스크립트:

  //Capture user input
 $("#search").on("keyup change", function () {
     var str = $.trim($(this).val());
         if (str) {
                 search(str);
                     } else {
                             // if no input, then show all
                                     $(".listItem").show();
                                         }
                                         });
                                         
                                         
                                         //the search part. 
                                          var datalist = ["car", "country"];
                                          function search(toFind) {
                                                   //select all li and loop thru them one by one
                                                           $("#ul_container").find("li").filter(function () {
                                                                      var $li = $(this);//hold current li in a variable
                                                                                   //loop thru all sub spans by their class and check if the toFind keyword is there
                                                                                               // you modify this step, i use it to specify which sub span to be searched. Sometimes I don't want all field to be searched, only the ones I select. 
                                                                                                           for (var i = 0; i < datalist.length; i++) {
                                                                                                                               //hold the span in a var called $item
                                                                                                                                               var $item = $li.children("." + datalist[i]);
                                                                                                                                                               var content_str = $item.html();//get the actual string
                                                                                                                                                                               //the comparing code
                                                                                                                                                                                               if (content_str.toLowerCase().indexOf(toFind.toLowerCase()) >= 0) {
                                                                                                                                                                                                                   $li.show();
                                                                                                                                                                                                                                       break;
                                                                                                                                                                                                                                                       } else {
                                                                                                                                                                                                                                                                           $li.hide();
                                                                                                                                                                                                                                                                                           }
                                                                                                                                                                                                                                                                                                       }
                                                                                                                                                                                                                                                                                                               });
                                                                                                                                                                                                                                                                                                                   }
                                                                                                                                                                                                                                                                                                                   
-------------------

해결 된 사람들. 다들 감사 해요.

http://jsfiddle.net/Sc9ys/29/ 에서 작동하는 다음 예제를 볼 수 있습니다.

$('#search').on('keyup change', function(){
     var str = $.trim($(this).val());
          if (str) {
                  search(str, $("#list"));
                       } else {
                               $("#list").find('li').show();
                                       /* The <li> are display: none, to show them again if the input type is clear, 
                                                we must find those <li> and show them. Showing only the #list isn't enough. */
                                                     }
                                                     });
                                                     
                                                     function search(toFind, list){
                                                         $(list).find('li').filter(function() {
                                                         
                                                                $li = $(this);
                                                                
                                                                       $li.find(".middle :contains(" + toFind +")").parent().parent().slideDown();
                                                                       
                                                                              $li.find(".middle").not(":contains(" + toFind + ")").parent().parent().slideUp();
                                                                              
                                                                                  });                        
                                                                                  }
                                                                                  
                                                                                  /* Function to search with the input lowercase */
                                                                                  $.expr[":"].contains = $.expr.createPseudo(function(arg) {
                                                                                      return function( elem ) {
                                                                                              return $(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
                                                                                                  };
                                                                                                  });
                                                                                                  

편집 : @Joraid 사용자의 도움에 따라 일부 조정했습니다.



출처
https://stackoverflow.com/questions/22049936