JS中的selection事件与range

前言

本文简单总结下文本输入中的 Selection 与 Range 事件。

测试地址见: 在线效果预览

::selection && Selection

自定义选取颜色

项目中一般有主题色的需求,这时候可以通过 css 中的::selection伪类可以自定义选中背景颜色

::selection {background: yellow;
}

去除第三方的 UI 库的选取选中可能要自定义 css 插件

// 去除antd样式文件中的 ::selection,原因是::selection难以被取消
module.exports = function runtime(params) {return params.replace(/::selection \{[^}]+\}/g, "");
};

Selection 对象表示用户选择的文本范围或插入符号的当前位置。它代表页面中的文本选区,可能横跨多个元素。文本选区由用户拖拽鼠标经过文字而产生.

var selObj = window.getSelection();
var range = selObj.getRangeAt(0);

selObj 被赋予一个 Selection 对象, range 被赋予一个 Range 对象

selection 事件
document.addEventListener("selectionchange", () => {const selection = window.getSelection();if (selection.toString()) {const selectedText = selection.toString();document.querySelector("#text-selected").textContent = selectedText;}
});

可编辑元素的选中

1. 主动选中某一区域
// 主动选中文本框中的一部分文本
function selectText() {const inputElement = document.getElementById("text-input");inputElement.setSelectionRange(2, 4);inputElement.focus();
}
2. 聚焦到某一位置
// 将光标聚焦到Textarea元素的指定位置
function focusCursor() {const textareaElement = document.getElementById("textarea");textareaElement.focus();textareaElement.setSelectionRange(10, 10); // 聚焦到第10个字符
}
3. 在指定选区插入(替换)内容
// 在Textarea的指定选区位置插入文本
function insertText() {const textareaElement = document.getElementById("textarea");const selectionStart = textareaElement.selectionStart;const selectionEnd = textareaElement.selectionEnd;const textToInsert = "被插入的文本";

// 插入文本
const currentValue = textareaElement.value;
const newValue =
currentValue.substring(0, selectionStart) +
textToInsert +
currentValue.substring(selectionEnd, currentValue.length);

textareaElement.value = newValue;
}

普通元素的选取选中

由于普通元素的选中夹杂了富文本,处理起来会相对麻烦一点,有时间再开一篇。

参考

  • Selection
  • Web 中的“选区”和“光标”
  • 划词评论与 Range 开发若干经验分享
  • selectionchange 事件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/234117.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【论文笔记】Distilling the Knowledge in a Neural Network

Abstract 几乎任何机器学习算法性能提升的一个非常简单的方法是在相同数据上训练多个不同的模型,然后对它们的预测结果进行平均。 不幸的是,使用整个模型集合进行预测繁琐,可能会因为计算成本过高而难以部署给大量用户,尤其是如果…

MyBatis的原始DAO开发!!!

引用:MyBatis的删除、修改、插入操作!!!-CSDN博客的准备工作!!!(准备工作都一样只不过文件名称有所不同) 1.利用原始DAO开发,查询所有的信息。 UserDao&#…

【数据库模拟题目集】选择题

数据库应用程序的编写是基于数据库三级模式中的(外模式) 对创建数据库模式一类的数据库对象的授权可由CREATE USER时实现。新创建的数据库用户有三种权限,CONNECT、RESOURCE和DBA。拥有RESOURCE权限的用户(不能创建模式 &#xf…

关于通信基站综合防雷方案介绍

为了获取更好的通信效果,通信基站在选址时通常地势要高于周围环境,气候条件恶劣,夏季通讯及机房设备及发射铁塔遭受雷击灾害的风险较高,而现代的电信设备对雷电又较为敏感,使得雷害问题日益凸显出来,如果防…

裂解汽油行业分析:到2027 年将达到 202.4 亿美元

裂解汽油,又称pygas,是石化工业中用石脑油或瓦斯油生产乙烯和丙烯的副产品。热解气是一种复杂的碳氢化合物混合物,主要由苯、甲苯和二甲苯等芳烃组成。热解汽油是生产苯乙烯、苯酚和合成橡胶等化学品的宝贵原料。 全球市场: 预计在…

延迟消息队列的几种实现方案,哪种更适合业务,要看具体情况分析

延迟消息队列的几种实现方案,延迟消息怎么实现,很多人可能一想到的是rabbitmq的死信队列来实现,但是一旦引入mq的话,就依赖这个中间件,另外维护成本,开发成本都很大,那有么有简单点的实现方式呢…

Linux安全之SELinux理解

安全增强式 Linux,即SELinux(Security-Enhanced Linux)是一个 Linux 内核的安全模块,其提供了访问控制安全策略机制,包括了强制访问控制(Mandatory Access Control,MAC)。SELinux 是一组内核修改和用户空间工具,已经被…

9ACL访问控制列表

为什么要有访问控制(Access Control List)? 因为我可能在局域网中提供了一些服务,我只希望合法的用户可以访问,其他非授权用户不能访问。 原理比较简单,通过对数据包里的信息做过滤,实现访问控…

houdini 神经网络

实现个神经网络的3D可视化,美爆了!-腾讯云开发者社区-腾讯云 https://vimeo.com/stefsietz GitHub - julrog/nn_vis: A project for processing neural networks and rendering to gain insights on the architecture and parameters of a model throu…

unity2d 关闭全局重力

UNITY2D项目默认存在Y轴方向重力,创建俯视角2D场景时可通过以下配置关闭 Edit > Project Settings > Physics 2D > General Settings > Gravity 设置Y0

Elasticsearch——索引数据

索引可以说是Elasticsearch中非常重要的模块,一个索引可以视作关系数据库中的一张表,本帖将详细介绍与Elasticsearch索引相关的各种功能等。主要内容如下: 索引映射(mapping)结构的定义方法,常用的各种字段类型和动态映射的使用。…

细说 MySQL 用户安全加固策略

这是一篇关于如何加强 MySQL 用户安全的文章,通读全文您可以了解密码复杂度策略、连接控制插件以及密码变更策略的相关知识。本文内容仅供参考,请在操作时以实际环境为准,避免造成经济损失。 作者:余振兴,爱可生 DBA 团…

Linux系统LVS+Keepalived群集

目录 一、概述 (一)群集特性 1.负载均衡 2.健康检查(探针) 3.故障转移 (二)Keepalived 1.作用 (1)支持故障自动转移 (2)支持节点健康状态检…

【HTML】解析垂直滚动轮播效果的HTML、CSS和JavaScript实现

解析垂直滚动轮播效果的HTML、CSS和JavaScript实现 在现代Web开发中,滚动轮播效果是网页设计中常见的交互元素之一。在本文中,我们将深入解析一段HTML、CSS和JavaScript的代码,实现了一个简单而高效的垂直滚动轮播效果。通过该代码&#xff…

云仓酒庄的品牌雷盛红酒分享红酒的颜色越深代表越好吗?

红酒颜色从宝石红、石榴红到紫红甚至砖红,颜色各异色彩纷呈。有朋友问云仓酒庄品酒师,是不是红酒的颜色越深代表酒越好? 颜色较深的葡萄酒,一般酒体比较厚重,风格比较强劲,单宁含量也较高,是好…

在vue中通过js动态绘制table,并且合并连续相同内容的行,支持点击编辑单元格内容

首先是vue代码 <template><div id"body-container"style"position: absolute"><div class"box-container"><div class"lsb-table-box" ><div class"table-container" id"lsb-table"&…

jenkins入门

文章目录 前言一、 jenkins的安装二、新建简单任务总结 前言 本篇文章是 jenkins 的入门级别案例&#xff0c;包括安装、基础概念介绍、新建简单任务 一、 jenkins的安装 下载 jenkins https://www.jenkins.io/download/ 当前案例下载的是 2.426.2 LTS 版本 下载安装jdk11 …

电商平台商品详情API接口|商品详情页(一)

电商网站上&#xff1a; 小电商&#xff1a;页面静态化的方案; 比如 电商平台商品详情API接口商品的信息放到表中 页面模板&#xff0c;渲染成html页面&#xff0c;每次用户请求的时候&#xff0c;直接返回html页面&#xff0c;不涉及到业务逻辑。 缺点一旦模板发生了变更&…

Java基础回顾——反射

文章目录 介绍Class类与instanceof的区别 访问字段调用方法调用构造方法获取继承关系动态代理 介绍 反射reflection&#xff0c;是指在程序运行期间可以拿到一个对象的所有信息。 正常情况下获取一个对象信息&#xff0c;需要import该类&#xff0c;反射可以在对某个实例一无所…

hive命令启动出现classnotfound

环境&#xff1a;ambari集群三个节点node104、node105和node106&#xff0c;其中node105上有hiveserver2&#xff0c;并且三个节点均有HIVE CLIENT 注意&#xff1a;“./”指hive安装目录 其中装有hiveserver2的node105节点&#xff0c;由于某种需要向lib目录下上传了某些jar包…