我想使用window.getSelection创建具有粗体功能的HTML文本编辑器

问题描述 投票:0回答:1

它使整个文本加粗。我只希望选定的文本变粗体(完全没有exec命令)

let boldBtn = document.getElementById('Bold-Btn');
let boldClickListener = (event) =>
{
    event.preventDefault();
    let selection = window.getSelection();
    let final = `<span class="text-bold">${selection.focusNode.textContent}</span>`;
    selection.anchorNode.parentElement.innerHTML=final;
    console.log(selection);
};

boldBtn.addEventListener('click',boldClickListener);
javascript html css dom selection
1个回答
0
投票

执行此操作的一种方法可能是执行以下操作:

  • 获取窗口选择。
  • 将选择内容转换为字符串以获取文本。
  • 创建将为粗体的元素。
  • 用粗体元素替换innerHTMLparentElement中包含的所选文本。

基于您提供的代码的示例:

let boldBtn = document.getElementById('Bold-Btn');
let boldClickListener = (event) => {
  event.preventDefault();
  // Get selection
  let selection = window.getSelection();
  // Get string of text from selection
  let text = selection.toString();
  // Create bolded element that will replace the selected text
  let final = `<span class="text-bold">${text}</span>`;
  // Replace the selected text with the bolded element
  selection.anchorNode.parentElement.innerHTML = selection.anchorNode.parentElement.innerHTML.replace(text, final);
};

boldBtn.addEventListener('click', boldClickListener);
.text-bold {
  font-weight: bold;
}
<div>
Test this text
</div>
<button id="Bold-Btn">
Bold
</button>

请注意,如果任何现有文本已经为粗体,则在创建要处理的粗体元素时可能需要添加更多逻辑。

© www.soinside.com 2019 - 2024. All rights reserved.