首页 > 其他分享 >Range范围选区的理解

Range范围选区的理解

时间:2024-10-18 22:59:17浏览次数:1  
标签:选区 referenceNode 位置 range Range 理解 spanNode1 节点

<!--
 * @Date: 2024-10-14 10:02:56
 * @Description: Modify here please
-->
<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Range范围选区的理解</title>
    <style>
      *,
      *::before,
      *::after {
        box-sizing: border-box;
      }
      body {
        font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji",
          "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
        font-variant: tabular-nums;
      }
      .edit {
        width: 100%;
        min-height: 210px;
        overflow-x: hidden;
        border: none;
        outline: none;
        background-color: transparent;
        color: #333;
        font-size: 14px;
        white-space: pre-wrap;
        word-break: break-all;
      }
      p {
        line-height: 1.5;
      }
    </style>
  </head>
  <body>
    <p style="margin-bottom: 20px"><a href="https://developer.mozilla.org/zh-CN/docs/Web/API/Range/toString" target="_blank">Range文档</a></p>
    <div class="edit" contenteditable="true" spellcheck="true" id="edit">
      <p><span>123456789</span><span style="color: red">高亮啦</span><span>abcde</span></p>
    </div>

    <script>
      // Range 接口表示一个包含节点与文本节点的一部分的文档片段
      var range = document.createRange();
      // Selection 对象表示用户选择的文本范围或插入符号的当前位置。它代表页面中的文本选区,可能横跨多个元素。文本选区由用户拖拽鼠标经过文字而产生。
      var s = window.getSelection();

      var editRef = document.getElementById("edit");

      var spanNode1 = document.getElementsByTagName("span").item(0);

      var spanNode2 = document.getElementsByTagName("span").item(1);

      var spanNode3 = document.getElementsByTagName("span").item(2);

      /**
       * 1: 以其它节点为基准,来设置 Range 的起始点或者终点---  Api
       */
      /**
       * range.setStartBefore(referenceNode)方法用于将一个范围(range)的起始位置设置在指定的参考节点(referenceNode)之前。
       * 理解为:用于将某个节点的起点位置设置为range对象的起点位置。
       */
      // range.setStartBefore(spanNode1);

      /**
       * range.setStartAfter(referenceNode)方法用于将一个范围(range)的起始点设置在指定的参考节点(referenceNode)之后。
       * 理解为:用于将某个节点的终点位置设置为range对象的起点位置。
       */
      // range.setStartAfter(spanNode1);

      /**
       * range.setEndBefore(referenceNode)方法用于将一个范围(range)的结束位置设置在指定的参考节点(referenceNode)之前。
       * 理解为:用于将某个节点的起点位置设置为range对象的终点位置。
       */
      // range.setEndBefore(spanNode1);

      /**
       * range.setEndAfter(referenceNode)方法用于将一个范围(range)的结束位置设置在指定的参考节点(referenceNode)之后
       * 理解为:表示用于将某个节点的终点位置设置为range对象的终点位置。
       */
      // range.setEndAfter(spanNode1);

      /**
       * 2. 选中节点, 把range的开始和结束
       */
      /**
       * 2.1 此操作将会选中spanNode1节点
       */
      // range.setStartBefore(spanNode1);
      // range.setEndAfter(spanNode1);

      /**
       * 2.2 此操作将会选中spanNode2节点
       */
      // range.setStartAfter(spanNode1);
      // range.setEndBefore(spanNode3);

      /**
       * 3. 选中某个节点, 把光标设置为节点的开始或结束位置
       */
      // 选中某个节点
      // range.selectNode(spanNode1);
      /**
       * ‌range.collapse()方法可以将某一区域或所选内容折叠到起始位置或结束位置。‌ 折叠后,起始位置和结束位置会相同。
       * 一个布尔值: true 折叠到 Range 的 start 节点,false 折叠到 end 节点。如果省略,则默认为 false
       * 要确定 Range 是否已折叠,使用Range.collapsed 属性
       */
      // range.collapse(true);

      /**
       * 4. Range.setStart(startNode, startOffset)方法用于设置一个范围(Range)的起始位置。
          参数说明:
          startNode:指定范围起始位置所在的节点,可以是一个元素节点、文本节点等。
          startOffset:一个整数,表示在startNode中的字符偏移量。如果startNode是一个元素节点,偏移量表示子节点的索引;如果startNode是一个文本节点,偏移量表示字符位置。
      */
      // range.setStart(spanNode1.firstChild, 0);
      // range.setEnd(spanNode1.firstChild, 3);
      console.log(range);

      s.addRange(range);
    </script>
  </body>
</html>

 

标签:选区,referenceNode,位置,range,Range,理解,spanNode1,节点
From: https://www.cnblogs.com/plBlog/p/18475200

相关文章

  • Python学习的自我理解和想法(15)
    学的是b站的课程(千锋教育),跟老师写程序,不是自创的代码!今天是学Python的第15天,从今天开始,每天一到两个常用模块,更完恢复到原来的,开学了,时间不多,写得不多,见谅。目录OS模块(1).获取当前目录(2)获取当前路径(3)创建文件夹(4)删除文件夹(5)重命名文件或者文件夹(6)删除文件......
  • 通过比较list与vector在简单模拟实现时的不同进一步理解STL的底层
     cplusplus.com/reference/list/list/?kw=list当我们大致阅读完list的cplusplus网站的文档时,我们会发现它提供的接口大致上与我们的vector相同。当然的,在常用接口的简单实现上它们也大体相同,但是它们的构造函数与迭代器的实现却大有不同。(食用本文时建议与文末的模拟实现代......
  • 【Java后端】SpringBoot 自动配置原理解析
    为什么就这一个注解,就可以让SpringBoot自动配置呢?为了更清晰地阐述SpringBoot自动配置的底层原理,我们将结合源码进行更深入的分析,并加入一些关键步骤的代码片段。 注意:按住Ctrl键不松,点击相应注解,即可进入对应源码1. @SpringBootApplication 注解的秘密:开启自动配置......
  • 如何理解分布式事务
    在分布式系统环境中,分布式事务是一个关键的技术挑战。那么,什么是分布式事务呢?让我们一起来深入理解。一、分布式事务的定义分布式事务是指在分布式系统中,为了保证数据的一致性,涉及多个节点的事务操作。在传统的单体应用中,事务通常由数据库管理系统来处理,保证了数据的一致......
  • 堆栈!言简意赅理解!
    前言        在我们的生活中,常常会遇到需要整理和管理物品的情况,比如在玩具箱中放置玩具。我们可以把最后放进箱子的玩具放在最上面,这样我们每次玩耍时,只需从最上面拿出玩具即可。这种管理方式称为“堆栈”。在计算机科学中,堆栈是一种重要的数据结构,能够以“后进先出......
  • 深入理解浮点数的运算
    浮点数的运算步骤浮点数的加减运算一般由以下五个步骤完成:对阶、尾数运算、规格化、舍入处理、溢出判断所谓对阶是指将两个进行运算的浮点数的阶码对齐的操作。对阶的目的是为使两个浮点数的尾数能够进行加减运算。因为,当进行$M_{x}\times2^{E_{x}}$与$M_{y}\times2^{E......
  • 【人工智能-初级】第5章 支持向量机(SVM):原理解析与代码实现
    文章目录一、支持向量机简介二、支持向量机的数学原理2.1线性可分支持向量机2.2软间隔与非线性支持向量机2.3核函数三、SVM的优缺点3.1优点3.2缺点四、Python实现支持向量机4.1导入必要的库4.2生成数据集并进行预处理4.3创建SVM分类器并进行训练4.4模型预测与......
  • SpringBoot驱动的智能物流管理解决方案
    1系统概述1.1研究背景随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理智能物流管理系统的相关信息成为必然。开发合适的智能物流管理系统,可以方便管理人员对智能......
  • 深入理解浮点数的表示
    浮点数的表示通常,浮点数表示为:\[N=(-1)^{S}\timesM\timesR^{E}\]其中,S取值为0或者1,用来决定浮点数的符号;M是一个二进制定点小数,称为尾数,一般用定点原码小数表示;E是一个二进制顶点整数,称为阶码或者指数,用移码表示。R是基数(隐含),可以约定为2、4、16等浮点数的表示范围......
  • 【Linux线程】Linux多线程编程:深入理解线程互斥与同步机制
    ......