У меня есть приложение для работы, и меня попросили добавить больше функций, таких как: добавить несколько кнопок для текста, выделенного жирным шрифтом и текста Itali c. На входе после нажатия кнопки «Полужирный» текст, который будет набираться жирным шрифтом, оставляя прежний текст (тот, что был до нажатия кнопки «Полужирный») обычным. Я понял, что нет способа выделить часть текста на входе, поэтому я имитировал вход с помощью div:
const div = document.querySelector('div');
div.innerHTML = '';
const bold = document.getElementById('boldBtn');
const italic = document.getElementById('italicBtn')
bold.style.backgroundColor = 'white';
let previousText = '';
let boldString = '';
boldBtn.addEventListener('click', () => {
boldBtn.classList.toggle('bold-selected');
if (boldBtn.classList.contains('bold-selected')) {
boldBtn.style.backgroundColor = "gray";
previousText = div.innerHTML;
console.log(previousText)
div.addEventListener('keydown', boldText)
}
else {
bold.style.backgroundColor = "white";
div.removeEventListener('keydown', boldText);
}
})
function boldText(e) {
div.innerHTML = div.innerHTML.substr(1)
console.log("Previous text: " + previousText);
const NOT_ALLOWED = ['Backspace', 'Shift', 'Control', 'Alt'];
if (!NOT_ALLOWED.includes(e.key)) {
boldString += e.key;
console.log("Bold text: " + boldString)
console.log(previousText + boldString)
div.innerHTML = previousText + "<strong>" + boldString + "</strong>"
}
}
div {
border: 1px solid black;
width: 200px;
height: 20px;
}
.font-style {
border: 1px solid blue
}
<div contenteditable="true"></div>
<button id="boldBtn" class="font-style">Bold</button>
<button id="italicBtn" class="font-style">Italic</button>
Попробуйте написать что-то вроде «круто» в div, затем нажмите кнопку Bold, а затем введите букву. Вы увидите, что div получает этот внутренний HTML: буква + круто + полужир. И курсор установлен в начале содержимого div. Пожалуйста, помогите мне или, по крайней мере, дайте подсказку о совершенном желаемом поведении! Я провел уже 3-4 часа, и я готов сдаться ...
РЕДАКТИРОВАТЬ: я думаю, что я не дал понять: я не хочу, чтобы все содержание div было жирным , но только часть / раздел / часть этого. Если ни одна кнопка не нажата, то текст, который будет написан, должен быть обычным, если нажата кнопка «Жирный шрифт», то текст, который будет написан, должен быть жирным, как и кнопка «Itali c». Возможно, если жирный шрифт и Itali c выбраны одновременно, будущий текст должен быть выделен жирным шрифтом и itali c. Но это другой вопрос ... Пример того, что я хочу, это https://html-online.com/editor/. Удалите текст по умолчанию и просто напишите слова на левой панели, и попробуйте использовать полужирные, itali c кнопки выше. На левой панели будет сгенерированный код HTML. Мне нужна такая же функциональность ...