JavaScript中在光标处插入添加文本标签节点的详细方法


Posted in Javascript onMarch 22, 2017

正确的方法是正确运用Selection对象和Range对象,实现在光标当前位置插入文本或结点。但是这两个对象在IE和标准的DOM方式的运用方法是不同的。

思路:首先获得用户的选区(光标当前位置可理解成起始和终止位置一样的选区)。然后,从Selection对象转成Range对象。目的是利用Range对象的方法插内容进去。最后,插入动作结束后将光标移到插入内容的后面。

var sel = win.document.selection; //IE 
var sel = win.getSelection(); //DOM 
var range = sel.createRange(); // IE下 
var range = sel.getRangeAt(0); // DOM下 
if(range.startContainer){ // DOM下 
 sel.removeAllRanges(); // 删除Selection中的所有Range 
 range.deleteContents(); // 清除Range中的内容 
 // 获得Range中的第一个html结点 
 var container = range.startContainer; 
 // 获得Range起点的位移 
 var pos = range.startOffset; 
 // 建一个空Range 
 range = document.createRange(); 
 // 插入内容 
 var cons = win.document.createTextNode(",:),"); 
 if(container.nodeType == 3){// 如是一个TextNode 
 container.insertData(pos, cons.nodeValue); 
 // 改变光标位置 
 range.setEnd(container, pos + cons.nodeValue.length); 
 range.setStart(container, pos + cons.nodeValue.length); 
 }else{// 如果是一个HTML Node 
 var afternode = container.childNodes[pos]; 
 container.insertBefore(cons, afternode); 
 range.setEnd(cons, cons.nodeValue.length); 
 range.setStart(cons, cons.nodeValue.length); 
 } 
 sel.addRange(range); 
}else{// IE下 
 var cnode = range.parentElement(); 
 while(cnode.tagName.toLowerCase() != “body”){ 
 cnodecnode = cnode.parentNode; 
 } 
 if(cnode.id && cnode.id==”rich_txt_editor”){ 
 range.pasteHTML(",:),"); 
 } 
} 
win.focus();

innerHTML 和 pasteHTML 区别

innerHTML 是一个属性,可以取得或者设定该元素内的 HTML 内容,可以是任意能包含 HTML 子节点的元素都使用它

pasteHTML()是一个方法,在指定的文字区域内替换该区域内的文本或者HTML,该方法必须应用于一个 createTextRange() 或者 document.selection.createRange() 创建的区域上

var oRange = document.selection.createRange(); 
 if(oRange.text!=''){ 
 var oHtml = '<a href="#" rel="external nofollow" target=_blank>oRange.text</a>'; 
 oRange.pasteHTML(oHtml); 
 }

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
一组JS创建和操作表格的函数集合
May 07 Javascript
javascript中定义私有方法说明(private method)
Jan 27 Javascript
jquery图片滚动放大代码分享(2)
Aug 28 Javascript
jQuery实现鼠标跟随提示层效果代码(可显示文本,Div,Table,Html等)
Apr 18 Javascript
jQuery DateTimePicker 日期和时间插件示例
Jan 22 Javascript
js获取地址栏参数的两种方法
Jun 27 Javascript
简单谈谈js的数据类型
Sep 25 Javascript
angular4 共享服务在多个组件中数据通信的示例
Mar 30 Javascript
JS解析后台返回的JSON格式数据实例
Aug 06 Javascript
JS定义函数的几种常用方法小结
May 23 Javascript
vue3 源码解读之 time slicing的使用方法
Oct 31 Javascript
小程序自定义轮播图圆点组件
Jun 25 Javascript
jQuery轻松实现无缝轮播效果
Mar 22 #jQuery
JavaScript登录记住密码操作(超简单代码)
Mar 22 #Javascript
原生JS京东轮播图代码
Mar 22 #Javascript
10道典型的JavaScript面试题
Mar 22 #Javascript
jQuery插件FusionCharts绘制ScrollColumn2D图效果示例【附demo源码下载】
Mar 22 #jQuery
js弹出窗口简单实现代码
Mar 22 #Javascript
js实现自动图片轮播代码
Mar 22 #Javascript
You might like
咖啡冲泡指南 咖啡有哪些制作方式 单品咖啡 意式咖啡
2021/03/06 冲泡冲煮
递归列出所有文件和目录
2006/10/09 PHP
具有时效性的php加密解密函数代码
2013/06/19 PHP
PHP时间格式控制符对照表分享
2013/07/23 PHP
Laravel框架中扩展函数、扩展自定义类的方法
2014/09/04 PHP
php实现的CSS更新类实例
2014/09/22 PHP
ThinkPHP框架搭建及常见问题(XAMPP安装失败、Apache/MySQL启动失败)
2016/04/15 PHP
PHP微信开发之查询微信精选文章
2016/06/23 PHP
jquery的颜色选择插件实例代码
2008/10/02 Javascript
Javascript 获取链接(url)参数的方法
2009/02/15 Javascript
javascript css在IE和Firefox中区别分析
2009/02/18 Javascript
JS辨别访问浏览器判断是android还是ios系统
2014/08/19 Javascript
javascript中bind函数的作用实例介绍
2014/09/28 Javascript
详解Javascript 装载和执行
2014/11/17 Javascript
基于js中的原型、继承的一些想法
2016/08/10 Javascript
微信小程序 使用picker封装省市区三级联动实例代码
2016/10/28 Javascript
NodeJS、NPM安装配置步骤(windows版本) 以及环境变量详解
2017/05/13 NodeJs
JavaScript实现元素滚动条到达一定位置循环追加内容
2017/12/28 Javascript
微信小程序实现全国机场索引列表
2018/01/31 Javascript
vue移动端实现手机左右滑动入场动画
2020/06/17 Javascript
详解Python爬虫的基本写法
2016/01/08 Python
python实现二维插值的三维显示
2018/12/17 Python
Django 数据库同步操作技巧详解
2019/07/19 Python
python GUI编程(Tkinter) 创建子窗口及在窗口上用图片绘图实例
2020/03/04 Python
python MultipartEncoder传输zip文件实例
2020/04/07 Python
Hotels.com台湾:饭店订房网
2017/09/06 全球购物
Farnell德国:电子元器件供应商
2018/07/10 全球购物
大学生的自我鉴定范文
2014/01/21 职场文书
关于是否需要写商业计划书
2014/02/07 职场文书
大学生会计职业生涯规划范文
2014/02/28 职场文书
喷漆工的岗位职责
2014/03/17 职场文书
班组长竞聘书
2014/03/31 职场文书
工作收入证明模板
2014/10/10 职场文书
不同意离婚答辩状
2015/05/22 职场文书
Python面试不修改数组找出重复的数字
2022/05/20 Python
mysql5.5中文乱码问题解决的有用方法
2022/05/30 MySQL