Search code examples
javascriptjquerysearchtextlive

Live text search jquery, wrong selector?


So i'm pretty new to this, please bear with me :)

And it's kinda working for me, this is what I have:

HTML:

<form id="live-search" action="" class="styled" method="post">
<fieldset>
    <input type="text" class="text-input" id="filter" value="" placeholder="Søg efter skole..." />
    <span id="filter-count"></span>
</fieldset>

jQuery:

$(document).ready(function(){
$("#filter").keyup(function(){

    // Retrieve the input field text and reset the count to zero
    var filter = $(this).val(), count = 0;

    // Loop through the comment list
    $(".ss_voting_manual .ss_voting_entry_list").find("li").each(function(){

        // If the list item does not contain the text phrase fade it out
        if ($(this).text().search(new RegExp(filter, "i")) < 0) {
            $(this).fadeOut();

        // Show the list item if the phrase matches and increase the count by 1
        } else {
            $(this).show();
            count++;
        }
    });

    // Update the count
    var numberItems = count;
    $("#filter-count").text("Klasser fundet = "+count);
});
});

But when I make a search it do find the li, but it lose most of the style, if you see the screenshot it will make better sense then I can do in writing.

 <div id="manual_voting" class="ss_voting_manual">
<ul class="ss_voting_entry_list">
  <li class="my_db_entry item_handle_22924874" id="my_db_entry_22924874" style="">
    <div class="entry_title entry_details">
      <h4>Koge Handelsskole - 3C</h4>
    </div>

    <div class="entry_photo">
      <ol>
        <li style="display: list-item;"><img alt="" src=
        "https://d2ndy3xguswqvu.cloudfront.net/images/220405/22924874/original_89bf1593506cabda8ec9fd63ac6e35d0.png"></li>
      </ol>
    </div>

    <div class="entry_votes entry_details">
      <span class="votes">65</span> Stemmer
    </div>

    <div class="entry_description entry_details ss_preserve_ws"></div>

    <div class="itemActions entry_actions">
      <ul>
        <li class="item_vote" style="display: inline;"><a class="vote_link vote"
        href="#" onclick=
        "SST.vote_for(widget_14972805, 22924874, this); return false;">Stem</a></li>

        <li class="item_share" style="display: inline;"><a class="share_link" href=
        "#" onclick="ss_share(widget_14972805, 22924874); return false;">Del med dine
        venner</a></li>
      </ul>
    </div>

    <div class="clear"></div>
  </li>

  <li class="my_db_entry item_handle_22924821" id="my_db_entry_22924821" style=
  "display: list-item;">
    <div class="entry_title entry_details">
    </div>

    <div class="clear"></div>
  </li>
</ul>

<div class="clear"></div>

<div class="ss_voting_paging" id="paging_voting"></div>


Solution

  • Wrong Selector

    In your target code you are searching for all the li's under .ss_voting_manual .ss_voting_entry_list including grand children.

    $(".ss_voting_manual .ss_voting_entry_list").find("li")
    

    This is causing your grandchildren li's, the one's that are wrapping the img tags, to be hidden.

    Solution

    Change your selector to fetch only direct descendant li's:

    $(".ss_voting_manual .ss_voting_entry_list").children("li")
    

    or

     $(".ss_voting_manual .ss_voting_entry_list > li")
    

    This will only fetch the first direct set of li's after the ul.