Я не силен в js и только начинаю разбираться с ним. Смог смастерить вот такой код, его задача:
найти в тексте который вводят в input слово и если оно есть, подгрузить html из файла в elementID на страницу.
Таких запросов около 10, каждый выводит разные файлы
var text = "разный всякий текст где есть слово которое надо определить"
if (text.toUpperCase().indexOf("слово".toUpperCase()) != -1) {
fetch('pageurl.html')
.then(data => data.text())
.then(html => document.getElementById('elementID').innerHTML = html);
}
<div id='elementID'> </div>
Все работает, но никак не получается в indexOf()
указать несколько вариантов которые нужно проверить. Что-то типа .indexOf("слово" или "слово" или "слово".toUpperCase())
как это сделать
можно так:
сработает, если все слова будут найдены
если есть необходимость делать какое-то действие на 1 совпадение, то counter
можно убрать, после if
сразу делать return true;
, а после цикла return: false;
function checker(text, words) {
let counter = 0;
for (let i = 0; i < words.length; i++) {
if (text.includes(words[i]))
counter++;
}
return counter === words.length ? true : false;
}
function init() {
const text = 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Ullam, minus!';
const words = ['amet', 'minus!'];
if (checker(text, words))
console.log('do something...');
}
init();
UPD. если любое совпадение
function checker(text, words) {
for (let i = 0; i < words.length; i++) {
if (text.includes(words[i]))
return true;
}
return false;
}
function init() {
const text = 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Ullam, minus!';
const words = ['foo', 'baz', 'dolor'];
if (checker(text, words))
console.log('do something...');
}
init();
var words = new Set(["слово", "другое", "ещё", "и", "ёж"])
// ...
for (var x of text.toLowerCase().split(/[^a-zа-яё]/i)) {
if (words.has(x)) {
// ...
break;
}
}
let text = 'разный всякий текст где есть слово которое надо определить';
const words = new Set(text.split(/\s+/).map(w => w.toLowerCase()));
const result = ['текст', 'есть', 'сепульки'].map(
word => ({ [word]: words.has(word) })
);
const allWordsIncluded = result.every(rslt => Object.values(rslt)[0]);
console.log(result);
console.log('все ли слова есть в тексте: ' + allWordsIncluded);
В общем виде, можно все реализовать примерно так:
const foo = (text, outputElem, rules) => {
const words = new Set(text.split(/\s+/).map(w => w.toLowerCase()));
const fetches = rules
.filter(rule => words.has(rule.word))
.map(rule => fetch(rule.file).then(response => response.text());
Promises.all(fetches).then(html => outputElem.innerHTML = html.join('\n'));
};
const rules = [
{ word: 'текст', file: 'one.html' },
{ word: 'есть', file: 'two.html' },
{ word: 'слово', file: 'three.html' },
];
const input = document.querySelector('#input'),
output = document.querySelector('#output');
input.addEventListener('change', e => foo(e.target.value, output, rules));
, но сомневаюсь что разметка полных документов (с доктайпом, <head>
, и т.д.) будет корректно отображаться в элементе...
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском
Помогите разместить блок(content) под меню, а то я голову уже сломалИ все ни как не получается
Пользователь с клавиатуры вводит некую информацию, если она не соответствует заранее заданным критериям, то выводится сообщение об ошибкеПри...