Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.08.2020, 14:03
Аспирант
Отправить личное сообщение для WadimS Посмотреть профиль Найти все сообщения от WadimS
 
Регистрация: 12.11.2016
Сообщений: 80

Поиск из нескольких слов
В условии поиска может быть задано несколько слов, например: 'брак техотсев инструмент' - нужно из списка UL/LI выбрать записи в которых встречается любое из слово из поиска.
Поиск идёт по значению атрибута
<li defected='Некондиционная поставка, брак. Списание в затраты.'>

Хотелось бы получить строку с условием поиска. Что-то вроде такого:
[defected*='брак'||'техотсев'...]

В регулярных выражениях я полнейший профан... Не бейте, но кроме делающей совершенно дебильную замену ничо не выдумал:
text = text.replace(/ /gim, '[*=$1]');
Ответить с цитированием
  #2 (permalink)  
Старый 02.08.2020, 16:17
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 28,906

WadimS,
зачем придумывать свои атрибуты, если есть data- ?
Ответить с цитированием
  #3 (permalink)  
Старый 02.08.2020, 16:33
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 28,906

фильтрация по списку слов
WadimS,
<!doctype html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
    li.red {
        background-color: hsla(0, 100%, 50%, 1);
    }
    </style>
</head>
<body>
    <ul>
        <li></li>
        <li data-defected='Некондиционная поставка, брак. Списание в затраты.'></li>
        <li data-defected='test'></li>
        <li data-defected='ИНСТРУМЕНТЫ'></li>
    </ul>
  <script>
const filterList = (list, value) => {
    let newList = [],
        words = value.split(/\s+/).map(str => str.toLowerCase());
    for (let li of list) {
        let defected = li.dataset.defected;
        if (defected) {
            defected = defected.toLowerCase();
            let include = words.some(str => defected.includes(str));
            if (include) newList.push(li)
        }
    }
    return newList;
}
let list = document.querySelectorAll('li'),
    value = 'брак техотсев инструмент';
list = filterList(list, value);
list.forEach(elem => elem.classList.add('red'));
</script>
</body>
</html>
Ответить с цитированием
  #4 (permalink)  
Старый 02.08.2020, 21:04
Аспирант
Отправить личное сообщение для WadimS Посмотреть профиль Найти все сообщения от WadimS
 
Регистрация: 12.11.2016
Сообщений: 80

рони, как я понимаю, использование "data-" и добавление атрибута вопрос семантики. Т.е. как бы и без особой разницы.

Принципиально преобразование строки поиска в массив и работа уже с массивом?
А сформировать строку с условием поиска ('брак'||'техотсев'), так, как Вы же и советовали, не получится?
Ответить с цитированием
  #5 (permalink)  
Старый 02.08.2020, 21:37
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,441

var find = 'брак техотсев инструмент';

console.log(new RegExp(find.replace(/\s+/g, '|'), 'gi'))
Ответить с цитированием
  #6 (permalink)  
Старый 02.08.2020, 21:55
Аспирант
Отправить личное сообщение для WadimS Посмотреть профиль Найти все сообщения от WadimS
 
Регистрация: 12.11.2016
Сообщений: 80

laimas, спасибо!
Ответить с цитированием
  #7 (permalink)  
Старый 02.08.2020, 23:07
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 28,906

WadimS,
на всякий случай.
если в строке есть служебные символы, их нужно перед RegExp экранировать.
Ответить с цитированием
  #8 (permalink)  
Старый 02.08.2020, 23:13
Аспирант
Отправить личное сообщение для WadimS Посмотреть профиль Найти все сообщения от WadimS
 
Регистрация: 12.11.2016
Сообщений: 80

рони, само-собой!
Ответить с цитированием
  #9 (permalink)  
Старый 02.08.2020, 23:19
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 28,906

Сообщение от WadimS
рони, как я понимаю, использование "data-" и добавление атрибута вопрос семантики. Т.е. как бы и без особой разницы.
если возможно то лучше совсем без любых атрибутов, есть данные их и фильтруйте, а не извлекайте из атрибутов.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск и замена слов по списку EvgenStor Общие вопросы Javascript 40 26.09.2017 03:29
document.body.innerHTML.replace. Замена нескольких слов nule Общие вопросы Javascript 10 11.03.2015 15:14
RegExp, поиск набора слов Беляш Общие вопросы Javascript 10 30.01.2011 22:00
Поиск определённых слов в контенте Yellow79 Элементы интерфейса 5 14.05.2010 19:37
Поиск русских слов с помощью \b не проходит Jury Общие вопросы Javascript 2 18.03.2010 11:05