【发布时间】:2020-04-04 01:13:35
【问题描述】:
我有一个待办事项应用程序,我被要求添加更多功能,例如:为粗体和斜体文本添加一些按钮。在输入中,在我按下粗体按钮后,将要输入的文本以粗体显示,而将之前的文本(我按下粗体按钮之前的文本)保持原样,常规。 我知道没有办法在输入中加粗一段文本,所以我用 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 中写“酷”之类的内容,然后按粗体按钮,然后键入一个字母。你会看到 div 得到了这个 innerHTML:letter+cool+boldletter。并且光标设置在 div 内容的开头。请帮助我或至少给出一个提示来完成想要的行为!我已经花了 3-4 个小时,我准备放弃了...
编辑: 我想我没有说清楚:我不想让 div 的整个内容都是粗体,而只是它的一部分/部分/部分。如果没有按下按钮,要写入的文本应该是规则的,如果按下粗体按钮,要写入的文本应该是粗体,与斜体按钮相同。也许如果同时选择粗体和斜体,未来的文本应该是粗体和斜体。但这是另一个问题......我想要的一个例子是 https://html-online.com/editor/ 。删除默认文本,只在左侧面板上写字,并尝试使用上面的粗体、斜体按钮。在左侧面板中将有 HTML 生成的代码。我需要相同的功能...
【问题讨论】:
-
你为什么不像
div.bold-selected {font-weight: bold;}这样使用css呢
标签: javascript html css