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;
}

普通元素的选取选中

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

参考

  • 15
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值