Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 25.01.2019, 13:48
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Alexko64
попробуйте найти Galaxy, Samsung note 6
Тут надо определится с поиском, либо вы ищите точное совпадение, то есть режим "И", либо одно из совпадений, то есть режим "ИЛИ". Ибо баг при поиске по совпадению строк предполагает поиск в режиме ИЛИ, что и достигается рег выражением. Теперь же речь идет о "Galaxy, Samsung note 6", которого нет, и его не должно быть, а это уже означает режим И, фактически полное совпадение строк.
Ответить с цитированием
  #22 (permalink)  
Старый 25.01.2019, 13:52
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

function fnSearch(arr, pattern) {
	var parts = pattern.trim().toLowerCase().split(/\s+/);
	
	return arr.filter(function(product) {
		return parts.every(function(part) {
			return product.name.toLowerCase().includes(part)
		});
	});
}


Кстати вы можете менять some на every, посмотрите, может вам нужен такой эффект!

Последний раз редактировалось Malleys, 25.01.2019 в 14:13. Причина: Если вы смотрели решение до 10:56 по Гринвичу, то посмотрите ещё раз.
Ответить с цитированием
  #23 (permalink)  
Старый 25.01.2019, 13:57
Интересующийся
Отправить личное сообщение для Alexko64 Посмотреть профиль Найти все сообщения от Alexko64
 
Регистрация: 17.04.2018
Сообщений: 26

Сообщение от рони Посмотреть сообщение
Alexko64,
замените
function fnSearch(arr, pattern) {
        pattern = escapeRegExp(pattern);
        pattern = new RegExp("(" + pattern.trim().replace(/\s+/g, "|") + ")", "i");
        return arr.filter(function(el) {
                pattern.lastIndex = 0;
                return pattern.test(el.name)
        })
};
Работает, но ищет совпадения любого из слов в запросе по отдельности.
Перезалил на хост. При поиске Samsung 2GB находит все где есть слово samsung и все где есть 2GB.

Я так понимаю что алгоритм поиска должен быть такой:
Показывать все результаты где было совпадение всех слов введенных в запросе но не обращать внимание на порядок слов в искомой строке.
Ответить с цитированием
  #24 (permalink)  
Старый 25.01.2019, 14:00
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

НУ может быть тогда такое как Malleys написал?
Ответить с цитированием
  #25 (permalink)  
Старый 25.01.2019, 14:00
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,103

Сообщение от Alexko64
где было совпадение всех слов введенных
пост №22 замените some на every
Ответить с цитированием
  #26 (permalink)  
Старый 25.01.2019, 14:03
Интересующийся
Отправить личное сообщение для Alexko64 Посмотреть профиль Найти все сообщения от Alexko64
 
Регистрация: 17.04.2018
Сообщений: 26

Сообщение от Malleys Посмотреть сообщение
function fnSearch(arr, pattern) {
	return arr.filter(function(product) {
		return toSearch
			.trim()
			.toLowerCase()
			.split(/\s+/)
			.some(function(p) {
				return product.name.toLowerCase().includes(p)
			});
	});
}


Кстати вы можете менять some на every, посмотрите, может вам нужен такой эффект!
Попробовал, поиск перестал работать совсем, если не слоэно скиньте целым куском с моим кодом, а то я уже запутался к какому варианту относится ваша правка
Ответить с цитированием
  #27 (permalink)  
Старый 25.01.2019, 14:05
Интересующийся
Отправить личное сообщение для Alexko64 Посмотреть профиль Найти все сообщения от Alexko64
 
Регистрация: 17.04.2018
Сообщений: 26

Залил на хостинг вариант с правкой Malleys
Не работает поиск совсем
http://mobidor.zzz.com.ua/test.php
Ответить с цитированием
  #28 (permalink)  
Старый 25.01.2019, 14:06
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Последний раз редактировалось Malleys, Сегодня в 13:05. Причина: Если вы смотрели решение до 10:56 по Гринвичу, то посмотрите ещё раз.
Ответить с цитированием
  #29 (permalink)  
Старый 25.01.2019, 14:06
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,103

Alexko64,
function fnSearch(arr, pattern) {
    return arr.filter(function(product) {
        return pattern
            .trim()
            .toLowerCase()
            .split(/\s+/)
            .every(function(p) {
                return product.name.toLowerCase().includes(p)
            });
    });
}


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();
Ответить с цитированием
  #30 (permalink)  
Старый 25.01.2019, 14:14
Интересующийся
Отправить личное сообщение для Alexko64 Посмотреть профиль Найти все сообщения от Alexko64
 
Регистрация: 17.04.2018
Сообщений: 26

Урааа) заработало
Вы лучшие. Плюсики в карму всем кто старался.
Залил на хост рабочий вариант, можете глянуть

Последний раз редактировалось Alexko64, 25.01.2019 в 14:18.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Управление скроллом "а-ля тач" HonesT Элементы интерфейса 2 27.08.2013 14:25
Помогите, подскажите. Просмотр изображений на сайте с помощью javascript. Max25 Работа 1 13.04.2013 03:01
Помогите найти статью на этом сайте Опан Общие вопросы Javascript 2 20.03.2013 16:29
Нашел на сайте XSS скрипт. Помогите разобраться. klermonte Общие вопросы Javascript 0 15.02.2013 23:35
Мгновенный поиск, подсветка, переход к найденному rdfhnbhf Javascript под браузер 0 05.07.2012 12:28