通过鼠标选中文字,实现对文字进行标注,取消标注

本文详细介绍了如何使用JavaScript通过`mouseup`事件和`window.getSelection`获取选中文字,创建和插入``标签进行标注,以及如何通过删除``标签来取消标注的过程。
摘要由CSDN通过智能技术生成

1.选中标注文字

实现思路:通过@mouseup和window.getSelection();获取选中文字范围,创建一个新的span标签,将选中内容放入新的span标签中并可以设置选中样式。删除选中文字,在选中区域插入新的span标签进行替换。

通过@mouseup获取鼠标选中文字事件

使用window.getSelection()获取选中文本范围相关信息

const selection = window.getSelection();

将选中范围保存到rang中:const range = selection.getRangeAt(0);

获取选中文字:const selectedText = selection.toString()获取 

选中范围起点节点:selection.anchorNode;

选中范围末点节点: selection.focusNode;

创建span标签: const span = document.createElement("span")

设置标签样式:span.style.textDecoration = "underline"; 

将选中内容放到span标签中:span.appendChild(document.createTextNode(selectedText));

将选中文字删除:range.deleteContents(); 

将创建的span标签插入到文字中:range.insertNode(span);

2.选中取消标注

实现思路:通过删除选中范围内的span标签并保留span标签中的文字,实现标注的取消。

获取选中文字对应的HTML元素对象textElements 

const selection = window.getSelection();
const range = selection.rangeCount > 0 ? selection.getRangeAt(0) : null;

const textElements = [];
if (range) {
   const walker =         
   document.createTreeWalker(range.commonAncestorContainer,NodeFilter.SHOW_TEXT);
   let node = walker.nextNode();
       while (node) {
         const parentElement = node.parentElement;
         if (parentElement) {
           textElements.push(parentElement);
         }
         node = walker.nextNode();
       }
      }

    删除span标签并将span标签的内筒添加到新节点内

        let children = textElements
        //删除div标签里面的span标签并保存span标签中的文字内容
        // 遍历所有子节点
        for (let i = 0; i < children.length; i++) {
          const child = children[i];
          console.log(child.tagName);
          //
          // 如果子节点是span标签
          if (child.tagName === "SPAN") {
            // 提取span标签中的内容
            // 提取span标签中的内容
            const textContent = child.textContent;

            // 创建一个新的文本节点,并将span标签中的内容添加到这个新节点中
            const newTextNode = document.createTextNode(textContent);
            // 用新的文本节点替换原来的span标签
            child.parentNode.replaceChild(newTextNode, child);
          } else if (child.hasChildNodes()) {
            // 如果子节点还有子节点,递归处理这个子节点
            console.log("是有子节点呢");
            console.log(child)
          }

  • 13
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值