2016-06-16 1 views
0

라이브 검색 상자를 사용하여 정의를 필터링하려고합니다. 그것은 작동하지만, 매우 느립니다. JS/jQuery를 더 빨리 실행하려면 어떻게 최적화 할 수 있습니까?라이브 검색 결과 숨기기 및 표시

JSFiddle : https://jsfiddle.net/JFlattery/2c9dpp8p/

HTML :

<div class="ms-rte-layoutszone-inner"> 
     <div id="floatNav"><a href="#outerShell">&uarr; Back to Top &uarr;</a></div> 
     <div id="outerShell"> 
     <div class="backButton"> 
      <div>&laquo;Back</div> 
     </div> 
     <div id="PageTitle"> 
      <center> 
      <h1>Terminology</h1> 
      </center> 
     </div> 
     <div id="letterMenu"> 
      <a href="#A" class="letterA">&nbsp;A&nbsp;</a> 
      <a href="#B" class="letterB">&nbsp;B&nbsp;</a> 
      <a href="#C" class="letterC">&nbsp;C&nbsp;</a> 
      <a href="#D" class="letterD">&nbsp;D&nbsp;</a> 
      <a href="#E" class="letterE">&nbsp;E&nbsp;</a> 
      <a href="#F" class="letterF">&nbsp;F&nbsp;</a> 
      <a href="#G" class="letterG">&nbsp;G&nbsp;</a> 
      <a href="#H" class="letterH">&nbsp;H&nbsp;</a> 
      <a href="#I" class="letterI">&nbsp;I&nbsp;</a> 
      <a href="#J" class="letterJ">&nbsp;J&nbsp;</a> 
      <a href="#K" class="letterK">&nbsp;K&nbsp;</a> 
      <a href="#L" class="letterL">&nbsp;L&nbsp;</a> 
      <a href="#M" class="letterM">&nbsp;M&nbsp;</a> 
      <a href="#N" class="letterN">&nbsp;N&nbsp;</a> 
      <a href="#O" class="letterO">&nbsp;O&nbsp;</a> 
      <a href="#P" class="letterP">&nbsp;P&nbsp;</a> 
      <a href="#Q" class="letterQ">&nbsp;Q&nbsp;</a> 
      <a href="#R" class="letterR">&nbsp;R&nbsp;</a> 
      <a href="#S" class="letterS">&nbsp;S&nbsp;</a> 
      <a href="#T" class="letterT">&nbsp;T&nbsp;</a> 
      <a href="#U" class="letterU">&nbsp;U&nbsp;</a> 
      <a href="#V" class="letterV">&nbsp;V&nbsp;</a> 
      <a href="#W" class="letterW">&nbsp;W&nbsp;</a> 
      <a href="#X" class="letterX">&nbsp;X&nbsp;</a> 
      <a href="#Y" class="letterY">&nbsp;Y&nbsp;</a> 
      <a href="#Z" class="letterZ">&nbsp;Z&nbsp;</a> 
     </div> 

     <form id="live-search" action="" class="styled" method="post"> 
      <fieldset> 
      <legend>Search:</legend> 
      <input type="text" class="text-input" id="filter" value="" /> 
      </fieldset> 
     </form> 
     <div class="table" id="letterTable"> 
      <h3 id="A" class="letterA">A...</h3> 
      <div class="letterSection letterA"> 
      <ul> 
       <li class="wordLine"><span class="term"></span> - <span class="definition"></span> <span class="example"></span></li> 
       <li class="wordLine"><span class="term"></span> - <span class="definition"></span> <span class="example"></span></li> 
      </ul> 
      </div> 
      <h3 id="B" class="letterB">B...</h3> 
      <div class="letterSection letterB"> 
      <ul> 
       <li class="wordLine"><span class="term"></span> - <span class="definition"></span> <span class="example"></span></li> 
      </ul> 
      </div> 
      <h3 id="C" class="letterC">C...</h3> 
      <div class="letterSection letterC"> 
      <ul> 
       <li class="wordLine"><span class="term"></span> - <span class="definition"></span> <span class="example"></span></li> 
      </ul> 
      </div> 
      <h3 id="D" class="letterD">D...</h3> 
      <div class="letterSection letterD"> 
      <ul> 
       <li class="wordLine"><span class="term"></span> - <span class="definition"></span> <span class="example"></span></li> 
      </ul> 
      </div> 
      <h3 id="E" class="letterE">E...</h3> 
      <div class="letterSection letterE"> 
      <ul> 
       <li class="wordLine"><span class="term"></span> - <span class="definition"></span> <span class="example"></span></li> 
      </ul> 
      </div> 
      <h3 id="F" class="letterF">F...</h3> 
      <div class="letterSection letterF"> 
      <ul> 
       <li class="wordLine"><span class="term"></span> - <span class="definition"></span> <span class="example"></span></li> 
      </ul> 
      </div> 
      <h3 id="G" class="letterG">G...</h3> 
      <div class="letterSection letterG"> 
      <ul> 
       <li class="wordLine"><span class="term"></span> - <span class="definition"></span> <span class="example"></span></li> 
      </ul> 
      </div> 
      <h3 id="H" class="letterH">H...</h3> 
      <div class="letterSection letterH"> 
      <ul> 
       <li class="wordLine"><span class="term">Hubris</span> - <span class="definition">exaggerated pride or self-confidence</span> <span class="example"></span></li> 
       <li class="wordLine"><span class="term"></span> - <span class="definition"></span> <span class="example"></span></li> 
      </ul> 
      </div> 
      <h3 id="I" class="letterI">I...</h3> 
      <div class="letterSection letterI"> 
      <ul> 
       <li class="wordLine"><span class="term"></span> - <span class="definition"></span> <span class="example"></span></li> 
      </ul> 
      </div> 
      <h3 id="J" class="letterJ">J...</h3> 
      <div class="letterSection letterJ"> 
      <ul> 
       <li class="wordLine"><span class="term"></span> - <span class="definition"></span> <span class="example"></span></li> 
      </ul> 
      </div> 
      <h3 id="K" class="letterK">K...</h3> 
      <div class="letterSection letterK"> 
      <ul> 
       <li class="wordLine"><span class="term"></span> - <span class="definition"></span> <span class="example"></span></li> 
      </ul> 
      </div> 
      <h3 id="L" class="letterL">L...</h3> 
      <div class="letterSection letterL"> 
      <ul> 
       <li class="wordLine"><span class="term"></span> - <span class="definition"></span> <span class="example"></span></li> 
      </ul> 
      </div> 
      <h3 id="M" class="letterM">M...</h3> 
      <div class="letterSection letterM"> 
      <ul> 
       <li class="wordLine"><span class="term"></span> - <span class="definition"></span> <span class="example"></span></li> 
      </ul> 
      </div> 
      <h3 id="N" class="letterN">N...</h3> 
      <div class="letterSection letterN"> 
      <ul> 
       <li class="wordLine"><span class="term"></span> - <span class="definition"></span> <span class="example"></span></li> 
      </ul> 
      </div> 
      <h3 id="O" class="letterO">O...</h3> 
      <div class="letterSection letterO"> 
      <ul> 
       <li class="wordLine"><span class="term"></span> - <span class="definition"></span> <span class="example"></span></li> 
      </ul> 
      </div> 
      <h3 id="P" class="letterP">P...</h3> 
      <div class="letterSection letterP"> 
      <ul> 
       <li class="wordLine"><span class="term"></span> - <span class="definition"></span> <span class="example"></span></li> 
      </ul> 
      </div> 
      <h3 id="Q" class="letterQ">Q...</h3> 
      <div class="letterSection letterQ"> 
      <ul> 
       <li class="wordLine"><span class="term"></span> - <span class="definition"></span> <span class="example"></span></li> 
      </ul> 
      </div> 
      <h3 id="R" class="letterR">R...</h3> 
      <div class="letterSection letterR"> 
      <ul> 
       <li class="wordLine"><span class="term"></span> - <span class="definition"></span> <span class="example"></span></li> 
      </ul> 
      </div> 
      <h3 id="S" class="letterS">S...</h3> 
      <div class="letterSection letterS"> 
      <ul> 
       <li class="wordLine"><span class="term"></span> - <span class="definition"></span> <span class="example"></span></li> 
      </ul> 
      </div> 
      <h3 id="T" class="letterT">T...</h3> 
      <div class="letterSection letterT"> 
      <ul> 
       <li class="wordLine"><span class="term"></span> - <span class="definition"></span> <span class="example"></span></li> 
      </ul> 
      </div> 
      <h3 id="U" class="letterU">U...</h3> 
      <div class="letterSection letterU"> 
      <ul> 
       <li class="wordLine"><span class="term">Urbane</span> - <span class="definition"></span>notably polite or polished in manner<span class="example"></span></li> 
       <li class="wordLine"><span class="term"></span> - <span class="definition"></span> <span class="example"></span></li> 
      </ul> 
      </div> 
      <h3 id="V" class="letterV">V...</h3> 
      <div class="letterSection letterV"> 
      <ul> 
       <li class="wordLine"><span class="term"></span> - <span class="definition"></span> <span class="example"></span></li> 
      </ul> 
      </div> 
      <h3 id="W" class="letterW">W...</h3> 
      <div class="letterSection letterW"> 
      <ul> 
       <li class="wordLine"><span class="term"></span> - <span class="definition"></span> <span class="example"></span></li> 
      </ul> 
      </div> 
      <h3 id="X" class="letterX">X...</h3> 
      <div class="letterSection letterX"> 
      <ul> 
       <li class="wordLine"><span class="term"></span> - <span class="definition"></span> <span class="example"></span></li> 
      </ul> 
      </div> 
      <h3 id="Y" class="letterY">Y...</h3> 
      <div class="letterSection letterY"> 
      <ul> 
       <li class="wordLine"><span class="term"></span> - <span class="definition"></span> <span class="example"></span></li> 
      </ul> 
      </div> 
      <h3 id="Z" class="letterZ">Z...</h3> 
      <div class="letterSection letterZ"> 
      <ul> 
       <li class="wordLine"><span class="term"></span> - <span class="definition"></span> <span class="example"></span></li> 
      </ul> 
      </div> 
     </div> 
     </div> 
     <div class="backButton"> 
     <div>&laquo;Back</div> 
     </div> 
    </div> 

JS :

$(document).ready(function() { 
    function hideEmpties() { 
    $(".term:empty").parent().hide(); 

    $('.letterSection').each(function() { 
     $("." + (/letter[A-Z]\b/g).exec($(this).attr("class"))).show(); 
     if (!($(this).children('ul').children('li').is(':visible'))) { 
     $("." + (/letter[A-Z]\b/g).exec($(this).attr("class"))).hide(); 
     } 
    }); 
    } 
    hideEmpties(); 

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

    // Retrieve the input field text 
    var filter = $(this).val(); 

    // Loop through the comment list 
    $(".wordLine").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(); 
     hideEmpties(); 

     // Show the list item if the phrase matches 
     } else { 
     $(this).show(); 
     hideEmpties(); 
     } 
    }); 
    }); 
}); 
+0

당신이 도움이 : http://stackoverflow.com/questions/23969702/why-each-is-slower-than-for-loop-in-jquery –

답변

0

2 일 당신은

  1. 저장을 기억해야합니까 var list = $('.wordLine').toArray()

이렇게하면 현재 목록을 가져 와서 페이지를로드 할 때 배열 Object 1 시간으로 저장합니다.

  1. 각각의 대신에 for 루프를 사용하는 것이 훨씬 빠르기 때문에 트리 검색 알고리즘을 구현할 수도 있습니다. 초기로드에서는 더 오랜 시간이 걸리지 만 페이지가로드되면 그리스 번개가됩니다. Javascript 트리 알고리즘의 경우 related post그러나 먼저 트리 개체에 배열을 만들어야합니다. 그렇지 않으면 당신은 (n)이 O를하고있을 것입니다 quick reference