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 相关文章推荐
window.location.href IE下跳转失效的解决方法
Mar 27 Javascript
jquery实现Ctrl+Enter提交表单的方法
Jul 21 Javascript
JS实现在状态栏显示打字效果完整实例
Nov 02 Javascript
又一枚精彩的弹幕效果jQuery实现
Jul 25 Javascript
微信小程序 在线支付功能的实现
Mar 14 Javascript
phantomjs导出html到pdf的方法总结
Oct 19 Javascript
js实现复制功能(多种方法集合)
Jan 06 Javascript
如何快速解决JS或Jquery ajax异步跨域的问题
Jan 08 jQuery
微信小程序音乐播放器开发
Nov 20 Javascript
微信小程序保持session会话的方法
Mar 20 Javascript
微信小程序中的列表切换功能实例代码详解
Jun 09 Javascript
JS实现拖拽元素时与另一元素碰撞检测
Aug 27 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
phpMyAdmin出现无法载入 mcrypt 扩展,请检查PHP配置的解决方法
2012/03/26 PHP
PHP中mysqli_affected_rows作用行数返回值分析
2014/12/26 PHP
php实现可运算的验证码
2015/11/10 PHP
ThinkPHP中Common/common.php文件常用函数功能分析
2016/05/20 PHP
PHP检查URL包含特定字符串实例方法
2019/02/11 PHP
javascript深入理解js闭包
2010/07/03 Javascript
js 页面元素的几个用法总结
2013/11/18 Javascript
使用jquery修改表单的提交地址基本思路
2014/06/04 Javascript
Bootstrap每天必学之导航条
2015/11/27 Javascript
EditPlus 正则表达式 实战(3)
2016/12/15 Javascript
jQuery中Chosen三级联动功能实例代码
2017/03/07 Javascript
JS Input里添加小图标的两种方法
2017/11/11 Javascript
学习JS中的DOM节点以及操作
2018/04/30 Javascript
微信小程序实现刷脸登录
2018/05/25 Javascript
详解如何解决vue开发请求数据跨域的问题(基于浏览器的配置解决)
2018/11/12 Javascript
JS实现简单随机3D骰子
2019/10/24 Javascript
vue 解决数组赋值无法渲染在页面的问题
2019/10/28 Javascript
Python实现网站文件的全备份和差异备份
2014/11/30 Python
Python Web框架Flask中使用百度云存储BCS实例
2015/02/08 Python
Python根据区号生成手机号码的方法
2015/07/08 Python
深入理解Python单元测试unittest的使用示例
2017/11/18 Python
Python3批量移动指定文件到指定文件夹方法示例
2019/09/02 Python
python实现ip地址的包含关系判断
2020/02/07 Python
HTML5制作酷炫音频播放器插件图文教程
2014/12/30 HTML / CSS
黑猩猩商店:The Chimp Store
2020/02/12 全球购物
2014年公务员思想汇报范文:全心全意为人民服务
2014/03/06 职场文书
应聘英语教师求职信
2014/04/24 职场文书
房产电话营销开场白
2015/05/29 职场文书
Golang二维切片初始化的实现
2021/04/08 Golang
解决Django transaction进行事务管理踩过的坑
2021/04/24 Python
Python图片处理之图片裁剪教程
2021/05/27 Python
ObjectMapper 如何忽略字段大小写
2021/06/29 Java/Android
PostGIS的安装与入门使用指南
2022/01/18 PostgreSQL
mysql幻读详解实例以及解决办法
2022/06/16 MySQL
Beekeeper Studio开源数据库管理工具比Navicat更炫酷
2022/06/21 数据库
Win11怎么解除儿童账号限制?Win11解除微软儿童账号限制方法
2022/07/07 数码科技