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 相关文章推荐
一款JavaScript压缩工具:X2JSCompactor
Jun 13 Javascript
JSQL SQLProxy 的 php 版本代码
May 05 Javascript
javascript中使用css需要注意的地方小结
Sep 01 Javascript
angularjs点击图片放大实现上传图片预览
Feb 24 Javascript
完美解决input[type=number]无法显示非数字字符的问题
Feb 28 Javascript
JavaScript使用链式方法封装jQuery中CSS()方法示例
Apr 07 jQuery
vue实现页面加载动画效果
Sep 19 Javascript
Vue 动态设置路由参数的案例分析
Apr 24 Javascript
微信小程序开发实现的选项卡(窗口顶部/底部TabBar)页面切换功能图文详解
May 14 Javascript
vue实现短信验证码登录功能(流程详解)
Dec 10 Javascript
vue 组件销毁并重置的实现
Jan 13 Javascript
jQuery HTML获取内容和属性操作实例分析
May 20 jQuery
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/02 无线电
php 代码优化之经典示例
2011/03/24 PHP
使用PHP Socket写的POP3类
2013/10/30 PHP
PHP的Json中文处理解决方案
2016/09/29 PHP
PHP数组相加操作及与array_merge的区别浅析
2016/11/26 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
2020/03/26 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
2020/04/04 PHP
js获取浏览器的可视区域尺寸的实现代码
2011/11/30 Javascript
5个最佳的Javascript日期处理类库分享
2012/04/15 Javascript
用jquery统计子菜单的条数示例代码
2013/10/18 Javascript
Javascript之this关键字深入解析
2013/11/12 Javascript
JavaScript调试技巧之console.log()详解
2014/03/19 Javascript
jQuery取得设置清空select选择的文本与值
2014/07/08 Javascript
nodejs下打包模块archiver详解
2014/12/03 NodeJs
NodeJS创建基础应用并应用模板引擎
2016/04/12 NodeJs
JavaScript 判断一个对象{}是否为空对象的简单方法
2016/10/09 Javascript
JavaScript页面实时显示当前时间实例代码
2016/10/23 Javascript
js实现图片上传预览原理分析
2017/07/13 Javascript
vue+webpack dev本地调试全局样式引用失效的解决方案
2019/11/12 Javascript
JavaScript 中判断变量是否为数字的示例代码
2020/10/22 Javascript
vue3.0+vue-router+element-plus初实践
2020/12/02 Vue.js
[02:02]DOTA2英雄基础教程 斯拉达
2013/12/11 DOTA
Python中处理unchecked未捕获异常实例
2015/01/17 Python
Python3实现将文件归档到zip文件及从zip文件中读取数据的方法
2015/05/22 Python
pyside+pyqt实现鼠标右键菜单功能
2020/12/08 Python
Python hexstring-list-str之间的转换方法
2019/06/12 Python
djano一对一、多对多、分页实例代码
2019/08/16 Python
Python numpy.zero() 初始化矩阵实例
2019/11/27 Python
HTML5本地存储之Web Storage详解
2016/07/04 HTML / CSS
如何在Oracle中查看各个表、表空间占用空间的大小
2015/10/31 面试题
优秀员工表扬信
2014/01/17 职场文书
幼儿园教育教学反思
2014/01/31 职场文书
后勤服务中心总经理工作职责
2014/03/03 职场文书
2014幼儿园教师个人工作总结
2014/11/08 职场文书
督导岗位职责范本
2015/04/10 职场文书
MySQL数据库中varchar类型的数字比较大小的方法
2021/11/17 MySQL