在项目中会遇到这样的情况,用户可以在textarea中输入,也可以选择既有的可供选择的 段落,现需求是用户把光标放在哪,用户选择后的 段落就 插进 该处位置。

实现方式主要是依靠俩点:
一、利用
doxument.selection (这是IE的)
docuemnt.getElementById(xxxx).selsectionStart (这是谷歌等的)
这俩个属性 来找到光标的位置

二、就是利用 字符串的substring 的方式 切割 再拼接;

**

以下是源代码

**

在vue项目中的代码

         const areaField = this.$refs.voicearea; // 拿到目标标签;// IE浏览器if (document.selection) {areaField.focus();const sel = document.selection.createRange();sel.text = item.text;} // 谷歌 Firefox 等else if (areaField.selectionStart || areaField.selectionStart === '0') {const startPos = areaField.selectionStart;const endPos = areaField.selectionEnd;const restoreTop = areaField.scrollTop;  // 获取滚动条高度//  this.waitingTextArea 是v-model的值// item.text 是 选择的要插入的值this.waitingTextArea = this.waitingTextArea.substring(0, startPos) + item.text+ this.waitingTextArea.substring(endPos, this.waitingTextArea.length);if (restoreTop > 0) {areaField.scrollTop = restoreTop;}areaField.focus();areaField.selectionStart = startPos + item.text.length;areaField.selectionEnd = startPos + item.text.length;} else {this.waitingTextArea += item.text;areaField.focus();}

原生写法

<!doctype html>
<html>
<head><meta charset="utf-8"><title>无标题文档</title>
</head><body><input name="" id="txt1" cols="30" rows="10"   :placeholder= /><br><input type="text" name="" id="txt2">
<input type="button" value="添加" id="btn">
<input type="button" value="获取内容" id="btn1" οnclick="get()"><div id="thistext"></div>
<script type="text/javascript">window.onload = function(){var oTxt1 = document.getElementById("txt1");var oTxt2 = document.getElementById("txt2");var oBtn = document.getElementById("btn");oBtn.onclick = function(){getValue("txt1", oTxt2.value);}}
</script>
<script type="text/javascript">function get(){document.getElementById("thistext").innerHTML=document.getElementById("txt1").value;console.log(document.getElementById("txt1").value)}//了在IE、Firefox、Opera等主流浏览器的获取光标位置(getCursortPosition)以及设置光标位置(setCursorPosition)的函数    //objid:textarea的id   str:要插入的内容function getValue(objid,str){var myField=document.getElementById(""+objid);//IE浏览器if (document.selection) {myField.focus();sel = document.selection.createRange();sel.text = str;sel.select();}//火狐/网景 浏览器else if (myField.selectionStart || myField.selectionStart == '0'){//得到光标前的位置var startPos = myField.selectionStart;//得到光标后的位置var endPos = myField.selectionEnd;// 在加入数据之前获得滚动条的高度var restoreTop = myField.scrollTop;myField.value = myField.value.substring(0, startPos) + str + myField.value.substring(endPos, myField.value.length);//如果滚动条高度大于0if (restoreTop > 0) {// 返回myField.scrollTop = restoreTop;}myField.focus();myField.selectionStart = startPos + str.length;myField.selectionEnd = startPos + str.length;}else {myField.value += str;myField.focus();}}
</script></body>
</html>

input输入框在光标处, 插入文本段相关推荐

  1. jQuery实现在光标处插入文本

    jquery.caretInsert.js : Code jQuery.extend({        /**        * 清除当前选择内容        */       unselectCo ...

  2. firefox下光标处插入文本

    做可视化编辑的器的时候突然发现一个问题,原来在TEXTAREA里面,FF的做法是: var rangeStart=textObj.selectionStart;           var range ...

  3. contentEditable,window.getSelection详解---可编辑div,容器,设置/获取光标位置,光标处插入内容及光标的操作

    这周碰到一个东西,contentEditable ,它是用来指定一个元素是否是可编辑的,这也是富文本编辑器实现的底层支持,网上关于这部分东西的资料比较少或者不全,所以我来整理下关于这个属性,和可编辑区 ...

  4. ComponentOne Wijmo Editor 在光标处添加文本

    ComponentOne Wijmo Editor 是一款强大的HTML 编辑器,可以插入table, p_w_picpath, links 等标签,但是没有在光标处直接插入标签的功能.但是,现在Wi ...

  5. 使用JS在textarea在光标处插入内容

    为什么80%的码农都做不了架构师?>>>    // 在光标处插入字符串// myField 文本框对象// myValue 要插入的值function insertAtCursor ...

  6. ComponentOne Wijmo HTML Editor 在光标处添加文本

    ComponentOne Wijmo Editor 是一款强大的HTML 编辑器,可以插入table, image, links 等标签,但是没有在光标处直接插入标签的功能.但是,现在Wijmo Ed ...

  7. html input鼠标提示,input输入框鼠标焦点提示信息

    input输入框鼠标焦点提示信息 问题如标题: 鼠标点击到输入框(input)里的时候,输入框的提示消失,鼠标再移开,输入框提示出现.如图所示: 做法如下: 复制代码 代码如下: 注意点为input的 ...

  8. 控制input输入框光标的位置

    一:理解input, textarea元素在标准浏览器下两个属性selectionStart, selectionEnd. selectionStart: 该属性的含义是 选区开始的位置: selec ...

  9. ios html 全选文本框,【前端】IOS input输入框按删除键删除字符,删除最后一个字符时,概率性出现光标前面多余一个字符...

    IOS input输入框按删除键删除字符,删除最后一个字符时,概率性出现光标前面多余一个字符,并且placeholder文字也能显示出来 回答 删除最后一个字符时延迟一毫秒 我用了vue,input[ ...

最新文章

  1. java long 对应mybati类型_修改 mybatis-generator 中数据库类型和 Java 类型的映射关系...
  2. 刷固件Layer1到手机FLASH(硬刷)
  3. C语言与C++优缺点
  4. Hadoop动态扩容,增加节点
  5. SQL语句实现两个数据库表直接操作
  6. mysql caching_Spring Caching抽象和Google Guava Cache
  7. C# 淘宝商品微信返利助手开发-(七)返利助手开发(5)如何将优惠券地址转为淘口令
  8. php 实时监测网站是否异常_网站跳转劫持解决,网站跳转劫持解决方法只有3步...
  9. 关于网站备案的44个问题
  10. poj 1164(DFS)
  11. 微信小程序记账报表小程序
  12. 【作业锦集】机器人学导论-空间变换及Matlab实现(part-2)
  13. loading等待载入正在加载的动画GIF图片圆形图标
  14. 工作效率-十五分钟让你快速学习Markdown语法到精通排版实践备忘
  15. 刀塔自走棋上线不到十分钟就被功击,几十万玩家登录不上
  16. UE打包时候生成多个PAK
  17. 解决vs2019中vsvim无法使用ctrl+[的问题
  18. linux 怎么查看系统用户,Linux系统下查看用户的常用方法
  19. c语言电报,[编程入门]电报加密-题解(C语言代码)
  20. 如何定义一个带参数的宏

热门文章

  1. VBScript FormatDateTime 函数
  2. 学习一下DOM中的cloneNode()与cloneNode(true)的基础知识
  3. 03. Redis 常用配置
  4. 2022年元旦火车票开售时间公布,元旦火车票购票用便签提醒
  5. Petya勒索病毒及防范
  6. 【手势交互】5. Kinect for Xbox One
  7. 电脑中hosts文件的作用
  8. libofd源码部分错误的修改
  9. 项目变更控制委员会(CCB)
  10. Ubuntu root认证失败解决办法