首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Window.getSelection()加粗/取消加粗所选文本

问使用Window.getSelection()加粗/取消加粗所选文本
EN

Stack Overflow用户
提问于 2020-08-12 02:23:10
回答 2查看 382关注 0票数 1

我正在尝试制作一个简单的文本编辑器,以便用户能够加粗/取消加粗选定的文本。我想使用Window.getSelection(),而不是Document.execCommand()。它做的正是我想要的,但是当你加粗任何文本时,你不能取消加粗。我希望它的方式,我可以加粗和取消加粗任何选定的文本。我尝试了几种方法,但都没有成功。

​

代码语言:javascript
复制
function addBold(){
const selection = window.getSelection().getRangeAt(0);
const selectedText = selection.extractContents();
const span = document.createElement("span");
span.classList.toggle("bold-span");
span.appendChild(selectedText);
selection.insertNode(span);
};
代码语言:javascript
复制
.bold-span {font-weight: bold;}
代码语言:javascript
复制
<p contentEditable>Bold anything here and unbold it</p>
<button onclick="addBold()">Bold</button>

​

EN

回答 2

Stack Overflow用户

发布于 2020-08-12 04:21:43

这接近于您想要的,但将单词分组在一起,因此取消选择将从整个单词中删除。我不能完成这一点,因为我必须去,但应该是一个很好的起点。

​

代码语言:javascript
复制
function addBold(){
  const selection = window.getSelection().getRangeAt(0);
  
  let selectedParent = selection.commonAncestorContainer.parentElement;
  
  //console.log(parent.classList.contains("bold-span"))
  //console.log(parent)
  let mainParent = selectedParent;
  if(selectedParent.classList.contains("bold-span"))
  {
    var text = document.createTextNode(selectedParent.textContent);
    mainParent = selectedParent.parentElement;
    mainParent.insertBefore(text, selectedParent);
    mainParent.removeChild(selectedParent);
    mainParent.normalize();
  }
  else
  {
    const span = document.createElement("span");
    span.classList.toggle("bold-span");
    span.appendChild(selection.extractContents());
    //selection.surroundContents(span);
    selection.insertNode(span);
    mainParent.normalize();
  }
  
  //selection is set to body after clicking button for some reason
  //https://stackoverflow.com/questions/3169786/clear-text-selection-with-javascript
  if (window.getSelection) {
    if (window.getSelection().empty) {  // Chrome
      window.getSelection().empty();
    } else if (window.getSelection().removeAllRanges) {  // Firefox
      window.getSelection().removeAllRanges();
    }
  } else if (document.selection) {  // IE?
    document.selection.empty();
  }

};
代码语言:javascript
复制
.bold-span {font-weight: bold;}
代码语言:javascript
复制
<p contentEditable>Bold anything here and unbold it</p>
<button onclick="addBold()">Bold</button>

​

票数 2
EN

Stack Overflow用户

发布于 2020-08-12 02:33:06

代码语言:javascript
复制
var span = '';

jQuery(function($) {
    $('.embolden').click(function(){
        var highlight = window.getSelection();
        if(highlight != ""){
            span = '<span class="bold">' + highlight + '</span>';
        }else{
            highlight = span;
            span = $('span.bold').html();
        }
        var text = $('.textEditor').html();
        $('.textEditor').html(text.replace(highlight, span));
    });
});

您可以像这样定义一个函数,其中您的类的名称是"embolden“

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63364212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档