Reputation: 204
I'm trying to create a onpage search that searches within a certain container of the page no matter order of the keywords of the search e.g. if I put in "This is an apple" the results should be anything that contains "This", "is", "an", "apple".
I didn't get any errors but nothing seems to be firing up
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>
Here's the HTML just in case
<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>
Upvotes: 0
Views: 46
Reputation: 328
I made this change and it worked:
$.each(result,function(ele,val){
if (text.indexOf(val)!==-1) {
show = true;
}
});
Upvotes: 0
Reputation: 382130
this
, in your most inner loop, is a string, not an input (in fact it's an instance of String
, which introduces another difficulty). And indexOf
returns the index of the found element.
Change
$.each(result,function(){
if (text.indexOf($(this).val())) {
show = true;
}
});
to
$.each(result,function(_,v){
if (text.indexOf(v)!==-1) {
show = true;
}
});
Note that I also made a few other minor changes, like splitting on /[\s\.]/
rather than just on space.
Upvotes: 2