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 尚未实现错误解决办法
Nov 27 Javascript
关于jquery append() html时的小问题的解决方法
Dec 16 Javascript
JS验证邮件地址格式方法小结
Dec 01 Javascript
javascript对象的相关操作小结
May 16 Javascript
利用Angularjs和原生JS分别实现动态效果的输入框
Sep 01 Javascript
网络传输协议(http协议)
Nov 18 Javascript
JS随机排序数组实现方法分析
Oct 11 Javascript
Vue.js实现表格渲染的方法
Sep 07 Javascript
js canvas实现写字动画效果
Nov 30 Javascript
Bootstrap 按钮样式与使用代码详解
Dec 09 Javascript
Layui点击图片弹框预览的实现方法
Sep 16 Javascript
VUE实现吸底按钮
Mar 04 Vue.js
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
CentOS 6.2使用yum安装LAMP以及phpMyadmin详解
2013/06/17 PHP
单台服务器的PHP进程之间实现共享内存的方法
2014/06/13 PHP
PHP实现微信提现(企业付款到零钱)
2019/08/01 PHP
javascript 日历提醒系统( 兼容所有浏览器 )
2009/04/07 Javascript
Jquery取得iframe下内容的方法
2013/11/18 Javascript
JavaScript设计模式之适配器模式介绍
2014/12/28 Javascript
jQuery代码实现图片墙自动+手动淡入淡出切换效果
2016/05/09 Javascript
javascript实现瀑布流动态加载图片原理
2016/08/12 Javascript
浅谈js常用内置方法和对象
2016/09/24 Javascript
利用JavaScript实现拖拽改变元素大小
2016/12/14 Javascript
纯js仿淘宝京东商品放大镜功能
2017/03/02 Javascript
微信小程序中使用javascript 回调函数
2017/05/11 Javascript
AngularJS入门教程二:在路由中传递参数的方法分析
2017/05/27 Javascript
angular内置provider之$compileProvider详解
2017/09/27 Javascript
vue 虚拟dom的patch源码分析
2018/03/01 Javascript
Mac下通过brew安装指定版本的nodejs教程
2018/05/17 NodeJs
js中Generator函数的深入讲解
2019/04/07 Javascript
vue 实现搜索的结果页面支持全选与取消全选功能
2019/05/10 Javascript
[01:55]2014DOTA2国际邀请赛 BBC正赛第一天总结
2014/07/10 DOTA
[10:18]2018DOTA2国际邀请赛寻真——Fnatic能否笑到最后?
2018/08/14 DOTA
Python爬虫番外篇之Cookie和Session详解
2017/12/27 Python
使用Django开发简单接口实现文章增删改查
2019/05/09 Python
Python 3.8正式发布重要新功能一览
2019/10/17 Python
Python django搭建layui提交表单,表格,图标的实例
2019/11/18 Python
python动态文本进度条的实例代码
2020/01/22 Python
pycharm快捷键汇总
2020/02/14 Python
使用Python第三方库pygame写个贪吃蛇小游戏
2020/03/06 Python
如何在Canvas上的图形/图像绑定事件监听的实现
2020/09/16 HTML / CSS
Java和Javasciprt的区别
2012/09/02 面试题
J2EE的优越性主要表现在哪些方面
2016/03/28 面试题
2015年中秋寄语
2015/07/31 职场文书
css中z-index: 0和z-index: auto的区别
2021/08/23 HTML / CSS
Python OpenCV超详细讲解基本功能
2022/04/02 Python
SQL Server数据库查询出现阻塞之性能调优
2022/04/10 SQL Server
mysql如何查询连续记录
2022/05/11 MySQL
SQLyog的下载、安装、破解、配置教程(MySQL可视化工具安装)
2022/09/23 MySQL