|
Помогите подправить поиск на сайте
Есть у меня скрипт для сортировки и поиска элементов на странице.
Поиск учитывает последовательность слов в запросе. Тоисть если у меня элемент называется Samsung Galaxy и я делаю поиск по запросу Galaxy Samsung то ничего не находит, а запрос Samsung находит элемент. Помогите поправить скрипт что-бы он не учитывал последовательность слов. Вот кусок кода отвечающего за поиск: SLS.isearch.on('keyup',function(){ var results = []; var toSearch = SLS.isearch.val(); if(toSearch=='') { SLS.prod = products; }else{ for(var i=0; i<SLS.sproducts.length; i++) { if(SLS.sproducts[i].name.toLowerCase().indexOf(toSearch.toLowerCase())!=-1) { results.push(SLS.sproducts[i]); } } SLS.prod = results; } SLS.page=1; SLS.products.html(''); SLS.sorta(SLS.isort); }); |
Alexko64,
вы что-то не договариваите ... alert("Samsung Galaxy".toLowerCase().indexOf("Galaxy".toLowerCase()) != -1); |
В каком смысле? Я не автор скрипта, что не так?
Скинул часть, вроде она отвечает за поиск, там еще кусок для сортировки. Нужен целиком? |
Alexko64,
могу только гадать, возможно в name продукта есть только Samsung SLS.sproducts[i].name, Samsung Galaxy в другом месте. |
Цитата:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script> <div>Search: <input type="search" class="simple-input" id="isearch" placeholder="Start typing..."> </div> <br><br><br> <div id="products"></div> <script> var products = [ {name:'Samsung Galaxy s9', html:'<div>Samsung Galaxy S9</div>' }, {name:'Galaxy S9 Samsung', html:'<div>Galaxy S9 Samsung</div>' }, ]; </script> <script> var SLS = { products: $('#products'), plow:$('#plow'), phigh:$('#phigh'), isearch:$('#isearch'), prod:products, sproducts: products, page:1, limit:12, isort:0, init:function(){ SLS.pload(SLS.page,SLS.limit); SLS.events(); }, pload:function(page,limit){ for(var i=((page-1)*limit);i<(limit*page);i++){ if(SLS.prod[i]) SLS.products.append($(SLS.prod[i].html)); } }, sorta:function(type){ var byPrice = SLS.prod.slice(0); byPrice.sort(function(a,b) { return a.price - b.price; }); if(type==1) byPrice=byPrice.reverse(); SLS.prod=byPrice; SLS.page=1; SLS.products.html(''); SLS.pload(SLS.page,SLS.limit); }, events:function(){ $(window).on('scroll',function(){ if($(this).scrollTop()+250>=($(document).height() - window.innerHeight-$('footer').height())){ SLS.page++; SLS.pload(SLS.page,SLS.limit); } }); SLS.plow.on('click',function(){ SLS.isort=0; SLS.sorta(SLS.isort); }); SLS.phigh.on('click',function(){ SLS.isort=1; SLS.sorta(SLS.isort); }); SLS.isearch.on('keyup',function(){ var results = []; var toSearch = SLS.isearch.val(); if(toSearch=='') { SLS.prod = products; }else{ for(var i=0; i<SLS.sproducts.length; i++) { if(SLS.sproducts[i].name.toLowerCase().indexOf(toSearch.toLowerCase())!=-1) { results.push(SLS.sproducts[i]); } } SLS.prod = results; } SLS.page=1; SLS.products.html(''); SLS.sorta(SLS.isort); }); } }; SLS.init(); </script> </div> |
Цитата:
|
Alexko64,
<script> function escapeRegExp(string){ return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); } function fnSearch(arr, pattern) { pattern = escapeRegExp(pattern); pattern = new RegExp("^(" + pattern.trim().replace(/\s+/g, "|") + ")", "i"); return arr.filter(function(el) { return Object.values(el).some(function(val) { return pattern.test(val) }) }) }; var products = [ {name:'Samsung Galaxy s9', html:'<div>Samsung Galaxy S9</div>' }, {name:'Galaxy S9 Samsung', html:'<div>Galaxy S9 Samsung</div>' }, ]; </script> <script> var SLS = { products: $('#products'), plow:$('#plow'), phigh:$('#phigh'), isearch:$('#isearch'), prod:products, sproducts: products, page:1, limit:12, isort:0, init:function(){ SLS.pload(SLS.page,SLS.limit); SLS.events(); }, pload:function(page,limit){ for(var i=((page-1)*limit);i<(limit*page);i++){ if(SLS.prod[i]) SLS.products.append($(SLS.prod[i].html)); } }, sorta:function(type){ var byPrice = SLS.prod.slice(0); byPrice.sort(function(a,b) { return a.price - b.price; }); if(type==1) byPrice=byPrice.reverse(); SLS.prod=byPrice; SLS.page=1; SLS.products.html(''); SLS.pload(SLS.page,SLS.limit); }, events:function(){ $(window).on('scroll',function(){ if($(this).scrollTop()+250>=($(document).height() - window.innerHeight-$('footer').height())){ SLS.page++; SLS.pload(SLS.page,SLS.limit); } }); SLS.plow.on('click',function(){ SLS.isort=0; SLS.sorta(SLS.isort); }); SLS.phigh.on('click',function(){ SLS.isort=1; SLS.sorta(SLS.isort); }); SLS.isearch.on('keyup',function(){ var results = []; var toSearch = SLS.isearch.val(); if(toSearch=='') { SLS.prod = products; }else{ SLS.prod = fnSearch(SLS.sproducts, toSearch); } SLS.page=1; SLS.products.html(''); SLS.sorta(SLS.isort); }); } }; SLS.init(); </script> |
Цитата:
|
пока писал ответ не увидел что уже ответили )
|
рони, надо бы наверное trim() для входного значения, и \s более одного?
Видимо перепил, trim есть. :) |
Часовой пояс GMT +3, время: 06:20. |
|