Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #31 (permalink)  
Старый 25.01.2019, 19:51
Интересующийся
Отправить личное сообщение для Alexko64 Посмотреть профиль Найти все сообщения от Alexko64
 
Регистрация: 17.04.2018
Сообщений: 26

Парни, упустил один момент. В тексте по которому идет поиск, присутствуют html теги, соответственно поиск их учитывает, попытался решить проблему вот так
function fnSearch(arr, pattern) {
    return arr.filter(function(product) {
        return pattern
	         .replace(/\<.*?>/g, "")
            .trim()
            .toLowerCase()
            .split(/\s+/)
            .every(function(p) {
                return product.html.toLowerCase().includes(p)
            });
    });
}

не помогло, потом вот так
function fnSearch(arr, pattern) {
    return arr.filter(function(product) {
        return pattern
	      .text()
            .trim()
            .toLowerCase()
            .split(/\s+/)
            .every(function(p) {
                return product.html.toLowerCase().includes(p)
            });
    });
}

не сработало
Подсобите еще разок?
Ответить с цитированием
  #32 (permalink)  
Старый 25.01.2019, 19:59
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

Alexko64,
name чем не устроило?
Ответить с цитированием
  #33 (permalink)  
Старый 25.01.2019, 20:05
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

Alexko64,
function fnSearch(arr, pattern) {
    return arr.filter(function(product) {
        return pattern
            .trim()
            .toLowerCase()
            .split(/\s+/)
            .every(function(p) {
                return $("<div/>", {html : product.html}).text().toLowerCase().includes(p)
            });
    });
}
Ответить с цитированием
  #34 (permalink)  
Старый 25.01.2019, 20:35
Интересующийся
Отправить личное сообщение для Alexko64 Посмотреть профиль Найти все сообщения от Alexko64
 
Регистрация: 17.04.2018
Сообщений: 26

Сообщение от рони Посмотреть сообщение
Alexko64,
name чем не устроило?
Решил уменьшить количество кода, не дублировать данные , убрпть name совсем и искать по html
Ответить с цитированием
  #35 (permalink)  
Старый 26.01.2019, 19:55
Интересующийся
Отправить личное сообщение для Alexko64 Посмотреть профиль Найти все сообщения от Alexko64
 
Регистрация: 17.04.2018
Сообщений: 26

Нашел баг или вернее специфику работы скрипта. Он не учитывает место нахождения первой буквы из запроса.
Если есть такие вариенты на сайте:

Samsung Galaxy Note 5 4GB RAN 64GB ROM
Samsung Galaxy Note 6 2GB RAM 128 ROM
Samsung Galaxy Note 7 4GB RAM 256 GB ROM
SAmsung Galaxy Note 8 6GB RAM 512 GB ROM

И поискать Samsung Galaxy Note 6, то скрипт покажет все результаты, потому-что везде есть цифра 6 и не важно в каком месте она находится.
Аналогично скрипт покажет все результаты на любой из следующих запросов:
sung alaxy, laxy 6 и тд...
Для наглядности залил пример на хостинг
http://mobidor.zzz.com.ua/test.php
Ответить с цитированием
  #36 (permalink)  
Старый 26.01.2019, 20:18
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

Alexko64,
медитируйте над постом №7, и на потом, лучше формулируйте условия.

Последний раз редактировалось рони, 26.01.2019 в 20:27.
Ответить с цитированием
  #37 (permalink)  
Старый 26.01.2019, 20:35
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Alexko64, ну тут палка о двух концах, если говорить о цифрах.

Samsung Galaxy Note 5 4GB RAN 64GB ROM - здесь 6, но это размер и полный 64
Samsung Galaxy Note 6 2GB RAM 128 ROM - здесь 6, но модель

Как понять при вводе чего ищет пользователь - модель или размер. Пусть угадали, размер, но и 64 не равно 64GB. К тому же размер ведь не только у ROM, но и RAM, что нужно возвращать если не указано GB (128 ROM) - нет или где попадется подходящее?

Вообще все это похоже на фильтр, вот только фильтр всегда определяет не только значения, но и какому параметру они принадлежат, в строке же искать такое задача нелегкая.

PS. Да еще если строки имеют ошибки, как у вас, не обязательно, что это так и есть, но от них никто не застрахован.

Последний раз редактировалось laimas, 26.01.2019 в 20:41.
Ответить с цитированием
  #38 (permalink)  
Старый 26.01.2019, 20:39
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

Alexko64,
function escapeRegExp(string){
    return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}

function fnSearch(arr, pattern) {
    return arr.filter(function(product) {
             var text = $("<div/>", {html : product.html}).text().toLowerCase();
        return pattern
            .trim()
            .toLowerCase()
            .split(/\s+/)
            .every(function(p) {
                p = escapeRegExp(p);
                p = new RegExp("(^|\\s)"  + p, "i");
                return p.test(text)
            });
    });
}
Ответить с цитированием
  #39 (permalink)  
Старый 26.01.2019, 21:16
Интересующийся
Отправить личное сообщение для Alexko64 Посмотреть профиль Найти все сообщения от Alexko64
 
Регистрация: 17.04.2018
Сообщений: 26

Сообщение от laimas Посмотреть сообщение
Alexko64, ну тут палка о двух концах, если говорить о цифрах.

Samsung Galaxy Note 5 4GB RAN 64GB ROM - здесь 6, но это размер и полный 64
Samsung Galaxy Note 6 2GB RAM 128 ROM - здесь 6, но модель

Как понять при вводе чего ищет пользователь - модель или размер. Пусть угадали, размер, но и 64 не равно 64GB. К тому же размер ведь не только у ROM, но и RAM, что нужно возвращать если не указано GB (128 ROM) - нет или где попадется подходящее?

Вообще все это похоже на фильтр, вот только фильтр всегда определяет не только значения, но и какому параметру они принадлежат, в строке же искать такое задача нелегкая.

PS. Да еще если строки имеют ошибки, как у вас, не обязательно, что это так и есть, но от них никто не застрахован.
Согласитесь что 6 это не 64, а 64 не равно 64GB, по этому логично ожидать что в результатах поиска их не будет. Я виже решение в сравнении жесткого соответствия каждого слова, тоисть not=not, но not не равно note, или возможно включить пробел как елемент играющий роль в запросе, тогда если после 6 поставить пробел то оно не будет равно 64...как то так. В любом случае мне кажется что вы мне помогли уже больше чем я мог надеятся по этому спасибо за все.
Ответить с цитированием
  #40 (permalink)  
Старый 27.01.2019, 19:30
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Alexko64
логично ожидать что в результатах поиска их не будет
А польза от такого поиска если то чего ищут имеется, но не выдается? Получается, что это "как повезет", будут подбирать по объему ROM и вводить только объем без единиц, а записи только с GB, неудача, или же наоборот, или часть.

Уж тогда организовывать на клиенте фильтр, как это бы был запрос в базу по параметрам. Искать не в строке, а объектах:

{
    brand: "Samsung",
    line: "Galaxy Note",
    model: 5,
    ram: 4,
    rom: 64
},
....


Тогда проблем с подбором не будет. Главная проблема, это сделать интерактивное поле для поиска (если поиск, а не фильтр с выбором параметров), которое бы по мере ввода предлагало выбор следующего параметра, следующего, сопоставляя каждый ввод с предложенным параметром, и так до завершения ввода. В итоге нужно искать среди параметров объектов совпадения из полученного при вводе объекта.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Управление скроллом "а-ля тач" 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