Я все еще работаю над фильтром слов. Я пробовал разные вещи, но я всегда зацикливаюсь на том, чтобы помещать мои обновленные слова обратно в DOM. Цель состоит в том, чтобы собрать все плохие слова, заменить их строкой (например, ****) и вывести ее вместо исходного термина. Например, с текстом «это текст с плохим словом», который превратился бы в «это текст с **** словом». У меня есть массив плохих слов, хранящихся и объявленных как badStuff
.
Сначала я получаю все inputs type = text
и превращаю эту коллекцию HTML в массив. То же самое с textareas
. Затем я объединяю эти массивы в submittedWords
.
. Я использую функцию, которая сравнивает и заменяет слова следующим образом:
function validateText() {
// get the values from all input fields
for (let i = 0; i < inputs.length; i++) {
submittedWords.push(inputs[i].value);
}
// add the values from all textareas
for (let i = 0; i < textareas.length; i++) {
submittedWords.push(textareas[i].value);
}
// loop through the submitted words and if one matches an item in badStuff,
// replace the original term with a censored version
for ( let i = 0; i < submittedWords.length; i++) {
if (badStuff.includes(submittedWords[i].toLowerCase())) {
submittedWords[i] = submittedWords[i].replace(submittedWords[i], "****");
//return submittedWords[i] into DOM
// return? print?
}
}
// clear submittedWords array after each check
submittedWords = [];
}
validateText();
Теперь моя проблема в том, что я не уверен, как выводитьмои результаты в DOM, так что каждое плохое слово заменяется на **** каждый раз, когда validateText()
запускается и встречает его. Я знаю, как заменить текст в, скажем, некоторых <p>
или других тегах или обменять / обновить классы CSS через JS для отображения результатов. Но здесь у меня есть массив с элементами из различных полей ввода и текстовых областей, которые необходимо заменить.
Может быть, я не вижу очевидного.