我有一个待办事项应用程序,要求我添加更多功能,例如:添加一些用于粗体和斜体文本的按钮。在输入中,按下“粗体”按钮后,要输入的文本将变为粗体,而前一个文本(按下“粗体”按钮之前的文本)将保持常规状态。我知道无法将输入中的文本部分加粗,因此我用 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 中写下“cool”之类的内容,然后按粗体按钮,然后键入一个字母。你会看到 div 得到了这个innerHTML:letter+cool+boldletter。并且光标设置在div内容的开头。请帮助我或至少给出一个提示来完成想要的行为!我已经花了3-4个小时了,我准备放弃了......
编辑:我想我没有说清楚:我不想使 div 的整个内容变为粗体,而只是其中的一部分/部分/部分。如果没有按下任何按钮,则要写入的文本应该是常规的,如果按下粗体按钮,则要写入的文本应该是粗体,与斜体按钮相同。也许如果同时选择粗体和斜体,则未来的文本应该是粗体和斜体。但这是另一个问题......我想要的一个例子是https://html-online.com/editor/。删除默认文本,只在左侧面板上写字,然后尝试使用上面的粗体、斜体按钮。左侧面板中将显示 HTML 生成的代码。我需要相同的功能...
泛舟湖上清波郎朗
月关宝盒
相关分类