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

news2025/1/18 4:41:15

学习链接

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

在输入框/文本域中光标位置插入字符串

Web 中的“选区”和“光标”

可参考另外一篇:vue.js支持表情输入,这个比操作 div简单多了。

效果图

在这里插入图片描述

代码

<style scoped>
textarea {
    outline: none;
    resize: none;
    border: 1px solid red;
    width: 400px;
    height: 200px;
    margin: 0;
    padding: 0;
    font-size: 16px;
    padding: 10px;
    font-family: monospace;
}
</style>

<template>
    <div class="commennt-wrapper">
        <el-button type="primary" size="mini" @click="getSelection">getSelection</el-button>
        <el-button type="primary" size="mini" @click="setSelection">setSelection</el-button>
        <el-button type="primary" size="mini" @click="restoreSelection">restoreSelection</el-button>
        <el-button type="primary" size="mini" @click="replaceSpecified">replaceSpecified</el-button>
        <br/>
        <br/>
        <textarea ref="textarea" v-model="content" id="textarea" cols="30" rows="10"></textarea>
    </div>
</template>

<script>

export default {
    name: 'Comment',
    data() {
        return {
            content: '诺艾尔邀约任务截图',
        }
    },
    mounted() {
    },
    methods: {

        getSelection() {
            
            let textarea = this.$refs['textarea'];

            // 获取文本域光标光标的开始位置和结束位置

            // 1. 位置定义:文本框中有文字的话,第一个文字的左边是0,右边是1,第二个文字的左边是1,右边是2
            // 2. 当页面刚加载完,文本域中有默认文字,那么selectionStart和selectionEnd都是相同的数值,都是最后一个位置,即有多少个文字,数值就是多少
            // 3. 如果是选中了文本,那么selectionStart就是被选中文字最左边开始的位置的数值(上面已说明),selectionEnd就是被选中文字最右边结束的位置的数值(上面已说明)
            // 4. 注意:当点击了文本域某个位置(或选择了一段文字),然后又失去焦点,仍然可以通过下面的方法获取到光标之前的位置
            console.log(textarea.selectionStart,textarea.selectionEnd,'start,end');


        },

        setSelection() {

            let textarea = this.$refs['textarea'];

            // 调用setSelectionRange方法去选中文本前,一定要先focus
            textarea.focus();
            // 将光标选中指定的文字,如果指定的selectionStart和selectionEnd相同,那就是选择固定的某个位置。如果不同,那就是选择一段文字。
            textarea.setSelectionRange(1,2)
        },

        restoreSelection() {
            /* 可以直接获取文本域最后一次失焦的位置,然后通过这个位置恢复之前的选择 */
            let textarea = this.$refs['textarea'];
            console.log(textarea.selectionStart,textarea.selectionEnd,'start,end');
            
            // 调用setSelectionRange方法去选中文本前,一定要先focus
            textarea.focus();
            textarea.setSelectionRange(textarea.selectionStart,textarea.selectionEnd)
        },

        replaceSpecified() {
            // 将选中的文字替换掉,或者是在指定的位置插入文字

            let textarea = this.$refs['textarea'];

            console.log(textarea.selectionStart,textarea.selectionEnd,'start,end');

            // 最开始的位置要记录下,后面要根据它来设置插入文本后,设置光标的位置
            let selectionStart1 = textarea.selectionStart 

            let txtArr =  textarea.value.split('')
            txtArr.splice(textarea.selectionStart,textarea.selectionEnd - textarea.selectionStart,'love')
            textarea.value = txtArr.join('')

            // 替换文本后, 需要把光标,再次定位到替换后的那个位置,否则,它会回到最前面
            textarea.focus()
            textarea.setSelectionRange(selectionStart1 + 'love'.length,selectionStart1 + 'love'.length)
        }

    },
    components: {
    }
}
</script>

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

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

相关文章

微信小程序开发 | API应用案例(下)

API应用案例&#xff08;下&#xff09;6.1【案例5】模拟时钟6.1.1 案例分析6.1.2 前导知识6.1.3 钟表页面布局6.1.4 钟表页面绘制6.2【案例6】罗盘动画6.2.1 案例分析6.2.2 前导知识6.2.3 设计罗盘页面布局6.2.4 手指触摸旋转罗盘6.2.5 单击按钮操作罗盘6.3【案例7】文件上传与…

总结821

学习目标&#xff1a; 4月&#xff08;复习完高数18讲内容&#xff0c;背诵21篇短文&#xff0c;熟词僻义300词基础词&#xff09; 学习内容&#xff1a; 暴力英语&#xff1a;早上背颂并默写第19篇文章《I always knew I was going to be rich》&#xff0c;还有两三篇就达成…

Xamarin 可能的替代者.NET MAUI

Xamarin&#xff0c;虽然在 Android、iOS 和 Windows 上做得很好&#xff0c;但我们很快就会忘掉它。Xamarin的替代者已接近完成正式版并且有许多的改进&#xff1a; .NET MAUI。 就像很多人知道的那样&#xff0c;Xamarin 是微软专注于移动应用程序( iOS、Android和Windows)并…

JavaSE学习进阶day04_05 常见算法和泛型

9.1 排序概述 另外一种排序的方式&#xff0c;每一次比较完毕之后&#xff0c;本次循环中最大的数字就跑到右边去了 建议复习一下数据结构的排序章节 代码实现就不再说了&#xff0c;大家可以尝试写&#xff0c;但是我们今后一般都调用java里已经写好的排序算法。在C里也有已…

【AXU3EG】UltraScale+ MPSoC以及开发板介绍

Copyright © 2012-2020 芯驿电子科技&#xff08;上海&#xff09;有限公司 UltraScale MPSoC Zynq UltraScale MPSoC 系列是 Xilinx 第二代平台&#xff0c;其在 FPGA 内部集成了完整 ARM 处理子系统&#xff08;PS&#xff09;&#xff0c;包含了四核 Cortex-A53 加双核…

03-深度学习

一、适合图像处理的卷积神经网络 1. 为什么卷积神经网络适合图像处理? 如上图所示,如果使用全连接神经网络的话,输入图像大小为 1024x1024,第一层隐层神经元个数为 1000,第一层权重数量级为 109,过多的参数会导致过拟合。而卷积神经网络可以有效减少权重数量。 2. 卷积神…

HTML5 表单元素

文章目录HTML5 表单元素HTML5 新的表单元素HTML5 \<datalist> 元素HTML5 \<keygen> 元素HTML5 \<output> 元素HTML5 新表单元素HTML5 表单元素 HTML5 新的表单元素 HTML5 有以下新的表单元素: <datalist><keygen><output> 注意:不是所有…

【LLM】Windows本地CPU部署民间版中文羊驼模型踩坑记录

目录 前言 准备工作 Git Python3.9 Cmake 下载模型 合并模型 部署模型 前言 想必有小伙伴也想跟我一样体验下部署大语言模型, 但碍于经济实力, 不过民间上出现了大量的量化模型, 我们平民也能体验体验啦~, 该模型可以在笔记本电脑上部署, 确保你电脑至少有16G运行…

HTML学习(3)

文章目录HTML计算机代码HTML5语义元素HTML5 代码约定HTML字符集与符号HTML URLHTML 背景我的个人博客&#xff1a;欢迎来逛逛 HTML计算机代码 支持固定的字母尺寸和间距&#xff1a;<kbd> <samp> <code> <html><body><p>open a file,sel…

应用信息资源管理(张士玉、董焱)——第一章 总论

第一章 总论 1.1 信息社会 1.1.1 信息社会的形成 信息社会是指以信息技术为基础&#xff0c;信息产业为支撑&#xff0c;信息化为主要特征的社会形态。其形成经历了以下几个阶段&#xff1a; 信息化初期&#xff1a;20世纪60年代至70年代&#xff0c;电子计算机的出现和发展…

HummerRisk V1.0.0:架构全面升级,开启新篇章

HummerRisk V1.0.0发布&#xff1a; HummerRisk 由 SpringBoot 单体架构升级为 SpringCloud 微服务架构&#xff0c;性能和效率显著提升。同时新增 K8s 的检测规则组和规则实现&#xff0c;并优化多个模块的设计逻辑。 HummerRisk 保持高速的迭代&#xff0c;期待您的关注。 …

Cesium实践(3)——坐标系与相机系统

文章目录前言Cesium 坐标系屏幕坐标系空间直角坐标系WGS-84坐标系坐标系转换角度与弧度互转84坐标转笛卡尔空间坐标笛卡尔空间坐标转84坐标屏幕坐标转笛卡尔空间坐标笛卡尔空间直角坐标转屏幕坐标Cesium相机默认交互相机姿态参数常用方法DEFAULT_VIEW_RECTANGLEsetViewflyToflo…

关于DMA的笔记

DMA(Direct Memory Access, 直接储存器访问)&#xff0c;是部分总线架构提供的功能&#xff0c;DMA传输功能能将数据从一个地址空间复制到另一个地址空间&#xff0c;实现从附加设备/外设与储存器或储存器与储存器之间的高速传输。 我们结合案例解释DMA的功能&#xff1a;在我…

HTTPS 加密协议

✏️作者&#xff1a;银河罐头 &#x1f4cb;系列专栏&#xff1a;JavaEE &#x1f332;“种一棵树最好的时间是十年前&#xff0c;其次是现在” 目录HTTPS"加密" 是什么HTTPS 的工作过程引入证书HTTPS http 安全层 (SSL) SSL 用来加密的协议&#xff0c;也叫 TLS …

类型转换——C++

1. C语言中的类型转换 在C语言中&#xff0c;如果赋值运算符左右两侧类型不同&#xff0c;或者形参与实参类型不匹配&#xff0c;或者返回值类型与接收返回值类型不一致时&#xff0c;就需要发生类型转化&#xff0c; C语言中总共有两种形式的类型转换&#xff1a;隐式类型转换…

刘二大人《Pytorch深度学习实践》第十讲卷积神经网络(基础篇)

文章目录卷积神经网络基础卷积层池化层课上代码GPU版本代码卷积神经网络基础 全连接的网络将图片的的本身二维空间结构进行了破坏&#xff0c;而这些空间结构是有用的&#xff0c;因此&#xff0c;要定义新的操作图像的计算节点&#xff0c;因此引入了卷积神经网络&#xff0c;…

JavaWeb开发 —— 请求响应

目录 一、概述 二、请求 1. postman工具 2. 简单参数 3. 实体参数 4. 数组集合参数 5. 日期参数 6. JSON参数 7. 路径参数 三、响应 1. ResponseBody 2. 统一响应结果 3. 案例 一、概述 通过之前对 JavaWeb开发 —— Web入门 的学习&#xff0c;我们开发…

失眠一月码出527页文档,详解SpringCloud微服务和分布式系统实践

所谓的分布式系统&#xff0c;就是一组计算机为了共同完成业务功能通过网络协作的多节点系统。分布式系统本身也有一系列需要解决的问题&#xff0c;包括多个计算机节点的路由选择、各个服务实例的管理、节点监控、节点之间的协作和数据一致性等&#xff0c;当然还有网络故障、…

lamp 架构的搭建

php 解释动态页面 php来连接数据库 mysql 页面信息和端口信息 存放数据 apache 前端web服务器&#xff0c;展现页面 源码编译安装这三个服务 配置下载apache: systemctl stop firewalld 关闭安全机制&#xff0c;防火墙 可以一条命令:systemctl is-enabled firewalld 和 s…

【推荐系统】model 落地(样本/特征/预测服务)

兜率宫小道童的个人空间-兜率宫小道童个人主页-哔哩哔哩视频&#xff08;如下是该视频课系列的笔记&#xff09; 1-深度学习在搜索、广告、推荐系统中的应用-业务问题建模_哔哩哔哩_bilibili 其他章节 目录 二、深度学习落地 模型训练服务流程 1-样本生成-标签拼接 1-样本…