#javascript
#javascript
Вопрос:
Я пытаюсь обернуть слова, введенные в текстовую область, разделив их на массив, и используя метод foreach, чтобы обернуть каждое слово в разные стили ключевых слов. Все это работает в консоли. Но когда я пытаюсь вывести его в DOM, он отображает только ПОСЛЕДНИЙ элемент в массиве, поскольку они перезаписывают предыдущие элементы… Возможно, я делаю это неправильно, открыт для предложений по повторному факторингу.
Например:
Если вы введете «мужская обувь, дешевая мужская обувь, доступная мужская обувь»
Отображается только: доступная мужская обувь.
Я хочу, чтобы он отображал их все в новом формате.
const mainInput = document.getElementById('main-input');
const mainOutput = document.getElementById('main-output');
let keywordsArray;
mainInput.addEventListener('input', updateValue);
function updateValue(e) {
const mainInput = document.getElementById('main-input');
const mainOutput = document.getElementById('main-output');
keywordsArray = mainInput.value.split('n');
keywordsArray.forEach(textUpdater);
function textUpdater(item, index, array) {
console.log(item)
console.log(item.replace(/(^|s )/g, "$1 "))
console.log('[' item ']');
console.log('"' item '"');
mainOutput.innerText = '[' item ']';
};
}
<div class="container">
<div class="input-box">
<textarea name="main-input" id="main-input" class="main-input" cols="30" rows="10" placeholder="Enter Keywords Here..."></textarea>
<p>What match types?</p>
<div class="type-selectors">
<p>Broad:</p> <input type="checkbox" id="broadCheck" checked onclick="updateValue()">
<p>Modified:</p> <input type="checkbox" id="modifiedCheck" checked onclick="updateValue()">
<p>Phrase:</p> <input type="checkbox" id="phraseCheck" checked onclick="updateValue()">
<p>Exact:</p> <input type="checkbox" id="exactCheck" checked onclick="updateValue()">
</div>
</div>
<div class="output-box">
<textarea class="main-output" id="main-output"></textarea>
</div>
</div>
Ответ №1:
Вы должны использовать =
для добавления текста вместо перезаписи предыдущего текста. Кроме того, вы должны установить значение текстовой области вместо его innerText
.
mainOutput.innerText = '[' item ']';
Следует изменить на:
mainOutput.value = '[' item ']';
const mainInput = document.getElementById('main-input');
const mainOutput = document.getElementById('main-output');
let keywordsArray;
mainInput.addEventListener('input', updateValue);
function updateValue(e) {
const mainInput = document.getElementById('main-input');
const mainOutput = document.getElementById('main-output');
keywordsArray = mainInput.value.split('n');
keywordsArray.forEach(textUpdater);
function textUpdater(item, index, array) {
//console.log(item)
//console.log(item.replace(/(^|s )/g, "$1 "))
//console.log('[' item ']');
//console.log('"' item '"');
mainOutput.value = '[' item ']';
};
}
<div class="container">
<div class="input-box">
<textarea name="main-input" id="main-input" class="main-input" cols="30" rows="10" placeholder="Enter Keywords Here..."></textarea>
<p>What match types?</p>
<div class="type-selectors">
<p>Broad:</p> <input type="checkbox" id="broadCheck" checked onclick="updateValue()">
<p>Modified:</p> <input type="checkbox" id="modifiedCheck" checked onclick="updateValue()">
<p>Phrase:</p> <input type="checkbox" id="phraseCheck" checked onclick="updateValue()">
<p>Exact:</p> <input type="checkbox" id="exactCheck" checked onclick="updateValue()">
</div>
</div>
<div class="output-box">
<textarea class="main-output" id="main-output"></textarea>
</div>
</div>