Поиск из нескольких слов
В условии поиска может быть задано несколько слов, например: 'брак техотсев инструмент' - нужно из списка UL/LI выбрать записи в которых встречается любое из слово из поиска.
Поиск идёт по значению атрибута <li defected='Некондиционная поставка, брак. Списание в затраты.'> Хотелось бы получить строку с условием поиска. Что-то вроде такого: [defected*='брак'||'техотсев'...] В регулярных выражениях я полнейший профан... Не бейте, но кроме делающей совершенно дебильную замену ничо не выдумал: text = text.replace(/ /gim, '[*=$1]'); |
WadimS,
зачем придумывать свои атрибуты, если есть data- ? |
фильтрация по списку слов
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>
|
рони, как я понимаю, использование "data-" и добавление атрибута вопрос семантики. Т.е. как бы и без особой разницы.
Принципиально преобразование строки поиска в массив и работа уже с массивом? А сформировать строку с условием поиска ('брак'||'техотсев'), так, как Вы же и советовали, не получится? |
var find = 'брак техотсев инструмент'; console.log(new RegExp(find.replace(/\s+/g, '|'), 'gi')) |
laimas, спасибо!
|
WadimS,
на всякий случай. если в строке есть служебные символы, их нужно перед RegExp экранировать. |
рони, само-собой!
|
Цитата:
|
| Часовой пояс GMT +3, время: 13:04. |