2015-05-13 4 views
0

Я пытаюсь создать onpage поиск, который ищет в определенном контейнере страницы независимо от порядка ключевых слов поиска например. если я добавлю «Это яблоко», результатом должно быть все, что содержит «Это», «есть», «а», «яблоко».Javascript на странице поиска, что поиск по всем ключевым словам

я не получил каких-либо ошибок, но ничего не кажется, разжигая

JavaScript/JQuery

<script type="text/javascript"> 
$(document).ready(function() { 
    $(".searchable").hide(); 


}); 
function searchFunction() { 
    var result = $("input[name='searchHelp']").val(); 
    result = result.split(" "); 
    $('.searchable').each(function(){ 
     var text = $(this).html().toString(); 
     text = text.split(" "); 
     show = false; 
     $.each(result,function(){ 
      if (text.indexOf($(this).val())) { 
       show = true; 
      } 
     }); 
     if (show) { 
      $(this).show(); 
     } 
    }); 

} 
</script> 

Вот HTML только в случае

<div class="search-help-bar" name = "searchBox"> 
    <input type="text" name="searchHelp" class="help"> 
    <input type="submit" class="search-btn" onclick = "searchFunction();"> 
</div> 
    <ul id="resultsList"> 
     <li class = "searchable"><a href="/">This is result 1</a><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque iaculis orci vel finibus scelerisque. Aliquam erat volutpat. Ut ut felis ac magna ultricies ullamcorper et id tortor. Sed porta quis orci a iaculis.</p></li> 
     <li class = "searchable"><a href="/">This is result 2</a><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque iaculis orci vel finibus scelerisque. Aliquam erat volutpat. Ut ut felis ac magna ultricies ullamcorper et id tortor. Sed porta quis orci a iaculis.</p></li> 
     <li class = "searchable"><a href="/">This is result 3</a><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque iaculis orci vel finibus scelerisque. Aliquam erat volutpat. Ut ut felis ac magna ultricies ullamcorper et id tortor. Sed porta quis orci a iaculis.</p></li> 
     <li class = "searchable"><a href="/">This is result 4</a><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque iaculis orci vel finibus scelerisque. Aliquam erat volutpat. Ut ut felis ac magna ultricies ullamcorper et id tortor. Sed porta quis orci a iaculis.</p></li> 
     <li class = "searchable"><a href="/">This is result 5</a><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque iaculis orci vel finibus scelerisque. Aliquam erat volutpat. Ut ut felis ac magna ultricies ullamcorper et id tortor. Sed porta quis orci a iaculis.</p></li> 
    </ul> 

ответ

2

this, в ваш самый внутренний цикл, это строка, а не вход (на самом деле это экземпляр String, что представляет собой еще одну трудность). И indexOf возвращает индекс найденного элемента.

Изменить

$.each(result,function(){ 
     if (text.indexOf($(this).val())) { 
      show = true; 
     } 
}); 

в

$.each(result,function(_,v){ 
     if (text.indexOf(v)!==-1) { 
      show = true; 
     } 
}); 

Demonstration

Обратите внимание, что я также сделал несколько других незначительных изменений, как расщепление на /[\s\.]/, а не только на пространстве.

+0

только что сделал правку, я попытался поместить текст, который существует в контейнере, но ничего до сих пор, кажется, разжигая:/ – user2809321

+0

ах да, я посмотрел на ваша демонстрация и она отлично работала в моем коде, и это хорошо, спасибо тоже! – user2809321

0

Я сделал это изменение, и она работала:

$.each(result,function(ele,val){ 

     if (text.indexOf(val)!==-1) { 
      show = true; 

     } 
    }); 
Смежные вопросы