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 相关文章推荐
jQuery 跨域访问问题解决方法
Dec 02 Javascript
input 输入框内的输入事件详细分析
Mar 17 Javascript
javascript插入样式实现代码
Feb 22 Javascript
使用jQuery实现的网页版的个人简历(可换肤)
Apr 19 Javascript
Node.js编写组件的三种实现方式
Feb 25 Javascript
node.js cookie-parser之parser.js
Jun 06 Javascript
js改变css样式的三种方法推荐
Jun 28 Javascript
全面了解js中的script标签
Jul 04 Javascript
微信小程序 时间格式化(util.formatTime(new Date))详解
Nov 16 Javascript
修改ligerui 默认确认按钮的方法
Dec 27 Javascript
Angular2.0实现modal对话框的方法示例
Feb 18 Javascript
JS中比较两个Object数组是否相等方法实例
Nov 11 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
PHP 多进程 解决难题
2009/06/22 PHP
php连接函数implode与分割explode的深入解析
2013/06/26 PHP
PHP 安全检测代码片段(分享)
2013/07/05 PHP
ThinkPHP实现简单登陆功能
2017/04/28 PHP
JQuery困惑—包装集 DOM节点
2009/10/16 Javascript
一个网马的tips实现分析
2010/11/28 Javascript
8款非常棒的响应式jQuery 幻灯片插件推荐
2012/02/02 Javascript
jquery 按钮状态效果 正常、移上、按下
2013/08/12 Javascript
javascript获取url上某个参数的方法
2013/11/08 Javascript
jquery简单实现鼠标经过导航条改变背景图
2013/12/17 Javascript
JavaScript strike方法入门实例(给字符串加上删除线)
2014/10/17 Javascript
使用javaScript动态加载Js文件和Css文件
2015/10/24 Javascript
移动端翻页插件dropload.js(支持Zepto和jQuery)
2016/07/27 Javascript
javascript中Date对象的使用总结
2016/11/21 Javascript
Javascript 数组去重的方法(四种)详解及实例代码
2016/11/24 Javascript
详解从react转职到vue开发的项目准备
2019/01/14 Javascript
基于vue实现一个神奇的动态按钮效果
2019/05/15 Javascript
Vue响应式原理Observer、Dep、Watcher理解
2019/06/06 Javascript
解决layer.prompt无效的问题
2019/09/24 Javascript
vuex存值与取值的实例
2019/11/06 Javascript
vue中使用router全局守卫实现页面拦截的示例
2020/10/23 Javascript
[55:35]VGJ.S vs Mski Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
对Xpath 获取子标签下所有文本的方法详解
2019/01/02 Python
对python dataframe逻辑取值的方法详解
2019/01/30 Python
Python的条件表达式和lambda表达式实例
2019/01/31 Python
Python GUI编程完整示例
2019/04/04 Python
Django Aggregation聚合使用方法解析
2019/08/01 Python
html2 canvas生成清晰的图片实现打印功能
2019/09/23 HTML / CSS
最耐用行李箱,一箱永流传:Briggs & Riley(全球终身保修)
2017/12/07 全球购物
营销部内勤岗位职责
2014/04/30 职场文书
初中班主任经验交流材料
2014/05/16 职场文书
股东授权委托书范文
2014/09/13 职场文书
护士个人年终总结
2015/02/13 职场文书
2019年冬至:天冷暖人心的问候祝福语大全
2019/12/20 职场文书
浅谈Redis的几个过期策略
2021/05/27 Redis
Python Pygame实战在打砖块游戏的实现
2022/03/17 Python