JS获取鼠标光标位置并在光标位置添加内容

JavaScript 选择input光标所在位置 设置input的内容选中并得到选中的值 做日历控件时,需要实现按—>实现右移并选中日期部分内容,yyyy-mm-dd hh:mm:ss,以年、月、日、时分秒为单位选中,下面是用到的小程序 选择input光标所在位置 function getTxt1CursorPosition(){ var oTxt1 = document.getElementById("txt1"); var cur 阅读详情

目标需求

  • 获取鼠标光标位置,然后点击按钮或其他事件,在鼠标光标的位置插入需要的文字等

准备工具

  • contenteditable:contenteditable属性指定元素内容是否可编辑。
  • window.getSelection(): 获取鼠标光标位置
  • window.getSelection().getRangeAt(params):getRangeAt把鼠标光标在的位置分成前后两端,getRangeAt得到的是一个数组,params通常是数组的下表,我们这里写0
  • createRange():返回新创建的Range对象,可以用来表示文档的一个区域或与该文档相关的 DocumentFragment 对象。

HTML

react写法

<div id="contentTable" className={styles['infoBox']} placeholder='请输入内容' contentEditable suppressContentEditableWarning onblur={this.blurDiv} />

注意⚠️

  • 当不写suppressContentEditableWarning这个属性的时候,有可能会抛出警告:Warning: A component is contentEditable and contains children managed by React.

CSS

如果我们想给我div加一个placeholder的话,如下:

    .infoBox {
        width: 100%;
        height: 115px;
        padding: 16px;
        line-height: 1;
        outline: none;
        &:empty::before {
            content: attr(placeholder);
            color: #808080;
        }
    }

JS

    // 光标从id为content的div标签失焦的触发blurDiv
	blurDiv = () => {
		const positionObj = window.getSelection().getRangeAt(0)
		// setState是react自带的api,这里把positionObj存起来,其他方法用的到
		this.setState({ positionObj })
	}
	// 插入动作
	modalOk = () => {
		const { item } = this.state
		// item为要插入的相关信息
		this.insertFun(item)
	}
	// 插入某个位置
	insertFun = item => {
		const { positionObj } = this.state
		// contentWrap是拿到上面👆div的dom,react如果拿不到真实dom的话,可以用ref或者useRef获取真实的dom
		const contentWrap = document.getElementById('contentTable')
		const range = document.createRange()
		if (contentWrap.childNodes.length == 0) {
			contentWrap.appendChild(this.handleCreateContent(item))
		} else {
		// 这里判断positionObj是否为undefined,是因为第一添加的时候是undefined,第一次添加的时候直接insertNode到id为contentTable这个父节点
			if (positionObj == undefined) {
				range.setStart(contentWrap.childNodes[0], 0)
				range.setEnd(contentWrap.childNodes[0], 0)
				range.insertNode(this.handleCreateContent(item))
				return
			}
			range.setStart(positionObj.startContainer, positionObj.startOffset)
			range.setEnd(positionObj.startContainer, positionObj.startOffset)
			range.insertNode(this.handleCreateContent(item))
		}
	}
	// 处理要插入什么内容
	handleCreateContent = item => {
		const { dropMenuType, name, pagePath } = item
			const width = this.getTextWidth(`{${name}}`)
			const input = document.createElement('input')
			input.setAttribute('class', 'input')
			input.setAttribute('value', `{${name}}`)
			input.setAttribute('disabled', false)
			input.style.width = `${width + 5}px`
			input.style.border = 'none'
			return input
	}
	// 获取文字的宽度,因为input的宽度不能用width:fit-content自适应,并且这里用input标签的原因是因为想把要插入的内容当作一个整体(光标选不中input里面的内容,只能选input的前后)
	getTextWidth = str => {
		let dom = document.createElement('span')
		dom.setAttribute('id', 'textWidth')
		dom.style.display = 'inline-block'
		dom.textContent = str
		document.body.appendChild(dom)
		const w = document.getElementById('textWidth').clientWidth
		document.body.removeChild(document.getElementById('textWidth'))
		return w
	}
	// 最后,我们插入完,获取id为contentTable里面的内容
	getContent = () => {
		 const contentWrap = document.getElementById("contentTable");
		 // contentWrap.childNodes(数组的格式)里面就是我们要的数据,我们处理一下就可以了
		 console.log(contentWrap.childNodes)
	}
JS在TextArea光标位置插入文字并实现移动光标到文字末尾 =IE支持document.selection =Firefox,Chrome,Safari以及Opera都有selectionStart和selectionEnd属性 代码如下: function insertText(obj,str) { if (document.selection) { var sel = document.selection.createRange(); sel.text = str; } else if (typeof obj.selectionStart === ‘number’ && typeof obj.selectionEnd === ‘number’) 立即下载

相关推荐

往光标所在位置插入值的js代码

往输入域中插入字符串(光标所在位置),在本文将为大家介绍下使用js是如何实现的,感兴趣的朋友可以参考下

js 获取光标位置并插入文本

主要的属性 element.selectionStart; // 获取光标开始的位置 element.selectionEnd; // 获取光标结束的位置 设置光标位置直接赋值就行 element.selectionStart=1

奇点的博客 1875

深入解析 ReDoc:从零构建高性能 API 文档的终极指南

ReDoc 是一个强大的开源工具,用于将 OpenAPI 规范转换为高质量、响应式的 API 文档。本文详细介绍了如何使用 ReDoc 构建和自定义 API 文档,包括如何编写支持 OpenAPI 的 API 注解、配置 HTML 页面以加载文档,以及如何利用 ReDoc 的高级功能进行定制。通过实例代码,您将学会如何灵活地展示 API 文档,提升用户体验。无论是初学者还是经验丰富的开发者,都能从本文中获得实用的技巧与方案,帮助快速搭建符合需求的 API 文档界面。

楠搏万的博客 4632

JS操作文本域获取光标/指定位置插入

/ 3. 如果是选中了文本,那么selectionStart就是被选中文字最左边开始的位置的数值(上面已说明),selectionEnd就是被选中文字最右边结束的位置的数值(上面已说明)// 2. 当页面刚加载完,文本域中有默认文字,那么selectionStart和selectionEnd都是相同的数值,都是最后一个位置,即有多少个文字,数值就是多少。// 1. 位置定义:文本框中有文字的话,第一个文字的左边是0,右边是1,第二个文字的左边是1,右边是2。'诺艾尔邀约任务截图'

pscool的博客 4201

GD32F470实战:如何用EXMC+SDRAM搞定LVGL大内存需求(附完整代码)

本文详细介绍了如何在GD32F470微控制器上通过EXMC接口驱动外部SDRAM,以满足LVGL图形库的大内存需求。内容涵盖硬件连接、EXMC时序配置、轻量级内存管理器实现,以及将LVGL帧缓冲和资源无缝集成到SDRAM的实战方法,并提供了完整的代码示例和调试技巧,帮助开发者构建稳定可靠的嵌入式GUI系统。

k9l0m1的博客 442

Xilinx FPGA中利用JTAG实现MicroBlaze调试信息输出

本文详细介绍了在Xilinx FPGA开发中,如何利用JTAG接口为MicroBlaze软核处理器实现调试信息输出的完整方案。通过配置调试模块、设置Vitis软件工程以及使用XSCT工具,开发者可以建立一条不依赖外部硬件的可靠调试通道,有效解决早期硬件验证阶段串口不可用的问题,大幅提升调试效率。

weixin_29201859的博客 290

input通过JS手动向光标、选中位置插入、拼接内容至光标处 选中处

向input光标处插入内容

lys20000913的博客 1915

STM32F103 RTC闹钟唤醒Stop模式的EXTI17中断实现

本文详细介绍了STM32F103如何通过RTC闹钟触发EXTI17中断实现从Stop模式的高效唤醒。针对低功耗应用场景,提供了完整的硬件配置、CubeMX设置及代码实现方案,包括时间格式转换、中断处理和功耗优化技巧,帮助开发者可靠实现定时唤醒功能。

ol78901234的博客 231

JS获取鼠标光标位置以及设置

JS获取鼠标光标位置以及设置 js获取鼠标光标位置,具体思路: 鼠标点击时记录光标位置(keyup) 内容发生改变时记录光标位置(MutationObserver) 左右键移动光标时记录坐标位置(keyup) 由于MutationObserverInit 不支持IE11以下版本,因此需要引用“mutationobserver-shim”,npm i mutationobserver-shi...

flee-lether的博客 2381

从零搭建一个AF架构项目:基于TIA Portal V19和S7-PLCSIM的仿真调试全流程

本文详细介绍了如何在TIA Portal V19环境中从零搭建西门子Automation Framework(AF架构)项目,包括环境准备、硬件组态、核心组件创建、项目架构分层实现以及仿真调试全流程。通过模块化编程和标准化接口设计,AF架构显著提升工业自动化项目的开发效率和维护便利性,特别适合S7-1500系列PLC的应用开发。

weixin_29313547的博客 675

人形机器人电源系统硬件开发:从原理图设计到PCB布局的完整流程

人形机器人是“移动的智能终端”,其电源系统如同“心脏+血管”:既要为大脑(主控)、肌肉(电机)、感官(传感器)提供稳定能量,又要在有限体积内应对高动态负载(如跳跃时电机瞬间大电流)。本文聚焦“硬件开发”维度,覆盖从需求分析到PCB制板的完整流程,适合硬件工程师、机器人爱好者快速掌握工程实战方法。

AI天才研究院 2176

js获取指定元素的光标位置,并在光标位置后增加值

利用js的selection操作,地址:https://developer.mozila.org/en-US/docs/Web/API/Selection HTML代码: <textarea class='showOptions_content'></textarea> js代码: var mousePlace = getCursortPosition(documen...

D_bel的博客 2051

回声消除AEC初探

那段保留即可——在播放期间把麦克风关闭(软件层面的 mute),同样能根除回声,只是会失去“一句话期间仍能捕获背景噪声”的能力。如果还有更细节的需求(比如多语言 TTS、实时流式 ASR),欢迎继续交流。的完整示例,可直接拷贝、改造、集成到你现有的 LLM‑TTS 对话系统中。实际效果取决于用户设备的硬件与驱动,若仍有回声,可让用户佩戴。把扬声器信号(把播放音频拷贝给 AEC)从麦克风流中减去。:TTS 播放的声音被同一个麦克风再次捕获,导致声学回声。三种实现示例,帮助你快速落地。,几乎可以消除所有回声。

NLP与推荐算法 571

如何获取与设置光标在input框的位置

遇到一个场景,需要一些文本标签,点击自动添加进文本框,这时候就需要掌握如何获取与设置光标在input框的位置,做一个记录,记录使用方法。

在下月亮有何贵干 1万+

多出来的那一截:Java 堆外内存 OOM 的来源分账、分流排查与治理解析

Java进程的RES常比-Xmx多出一截,堆却平稳。本文把堆外内存拆成直接缓冲区、Unsafe、JNI本地库、线程栈、元空间与文件映射六类,用JDK 8与17的六组实验对照RSS、NMT、BufferPool三本账:clear()不释放内存;MaxDirectMemorySize默认约等于堆上限且只管直接缓冲区;禁用显式GC会让申请线程退避半秒后失败;未关闭的Deflater零GC下让RSS涨1GB;Netty池内泄漏GC救不回。最后给出定性、对账、定位的排查路线与预算、编码、监控三层治理。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 14万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

input、textarea 输入框------光标操作、指定光标位置插入内容

1、光标处插入指定内容 /* * obj: input/textarea输入框的dom对象 * str: 光标处要插入的内容 */ function insertText(obj,str) { if (document.selection) { var sel = document.selection.createRange(); sel.text = str; } else if (typeof obj.selectionStart === 'number'

yiyueqinghui的博客 5456

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

用 javascript 获取当页面上鼠标(光标)位置

用 javascript 获取当页面上鼠标(光标)位置在许多情况下都会用到,比如拖放,悬停提示(tooltip) 等等。当然,这里我们依然要面对浏览器的兼容问题,在不同的浏览器下,对这些相关的属性处理方式也不同,本文详细介绍了浏览器在处理这些属性时的差异和最终的解决方法。 --------------------------------------------------------------点...

Bobby的部落阁 935

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

react获取鼠标位置_javascript,es6,react获取textarea的光标位置并插入内容

/*javascript 原生写法*//**向指定的dom,的光标位置插入str字符串**/function insertText(obj,str) {if (document.selection) {var sel = document.selection.createRange();sel.text = str;} else if (typeof obj.selectionStart === ...

weixin_39735012的博客 900

用js控制按钮事件,将指定内容添加到文本域的光标所在位置。

用js控制按钮事件,将指定内容添加到文本域的光标所在位置。

yanlintao1的专栏 3182

vue 如何获取input中光标位置,并且点击按钮在当前光标后追加指定内容

vue 如何获取input中光标位置,并且点击按钮在当前光标后追加内容 监听输入框的鼠标失焦事件 获取失去交点时的光标在输入内容中的位置 (e.srcElement.selectionStart) 替换指定内容 (str.slice(0, index)) 具体代码实现如下: <template> <el-input v-model="addForm.templateContent" type="textarea" @blur="blurEvent"></el-in

weixin_46054431的博客 9936

javascript的event事件与获取鼠标光标- -

document.body.oncopy = function() { if (window.clipboardData) { setTimeout(function() { var text = clipboardData.getData("text");

Mark的专栏 3272

UEditor新增自定义按钮(获取光标停留的位置,然后插入一个内容)

在使用编辑器时,希望在工具栏加一个标签,点击标签就能在编辑器里面添加某个元素。 我遇到的问题是加上{***}这样的特殊字符。这个功能是编辑器本身没有的。 1.在ueditor.config.js中找到toolbars的数组,并在数组中添加一个你需要新增的按钮功能名称如下图所示  2.在zh-cn.js 中找到labelMap并添加如下图所示,主要是用于鼠标放置上去显示的文字提示内容 ...

肖肖肖丽珠的博客 8271

js获取鼠标光标位置

//获取鼠标位置 function getCursurPos11() { var rangeData = {text: "", start: 0, end: 0}; var textArea = $("#testFormula"); if(/chrome/i.test(navigator.userAgent)||/firefox/i.test(navigator.userAgent)){ textArea.focus(); ...

weixin_44399790的博客 679

vue 如何获取input中光标位置,并且点击按钮在当前光标后追加内容

1.第一步:监听输入框的鼠标失焦事件 <el-input @blur="handleInputBlur"></el-input> 2.第二步:获取失去交点时的光标在输入内容中的位置,data里定义一个变量存储如 blurIndex data() { return { formulaValue:null, blurIndex: null, }; } 3.第三步:具体函数(上才艺) insert_flg(flg) {

weixin_49637830的博客 2628

js获取文本域中光标的位置

代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>获取文本域的光标位置</title> </head> <body> <textarea name="" id="t...

weixin_30640769的博客 774
上一篇: git提交代码(远程没有分支)
下一篇: nrm使用
无穷已_
博客等级 码龄7年 1534粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值