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页面刷新与弹出窗口问题的解决方法
Mar 02 Javascript
JavaScript Scoping and Hoisting 翻译
Jul 03 Javascript
浅谈angular.js中实现双向绑定的方法$watch $digest $apply
Oct 14 Javascript
JS控制静态页面之间传递参数获取参数并应用的简单实例
Aug 10 Javascript
JS常用知识点整理
Jan 21 Javascript
jQuery实现大图轮播
Feb 13 Javascript
angular使用post、get向后台传参的问题实例
May 27 Javascript
深入浅析JavaScript中的RegExp对象
Sep 18 Javascript
菊花转动的jquery加载动画效果
Aug 19 jQuery
Vue-Router基础学习笔记(小结)
Oct 15 Javascript
高性能js数组去重(12种方法,史上最全)
Dec 21 Javascript
微信小程序开发中var that =this的用法详解
Jan 18 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 获取客户端的真实ip
2009/11/30 PHP
PHP页面输出时js设置input框的选中值
2016/09/30 PHP
php基于自定义函数记录log日志方法
2017/07/21 PHP
php微信开发之音乐回复功能
2018/06/14 PHP
PHP树形结构tree类用法示例
2019/02/01 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
预加载css或javascript的js代码
2010/04/23 Javascript
模拟jQuery ajax服务器端与客户端通信的代码
2011/03/28 Javascript
js 使FORM表单的所有元素不可编辑的示例代码
2013/10/17 Javascript
js变量、作用域及内存详解
2014/09/23 Javascript
Angularjs基础知识及示例汇总
2015/01/22 Javascript
jQuery选择器源码解读(六):Sizzle选择器匹配逻辑分析
2015/03/31 Javascript
javascript结合CSS实现苹果开关按钮特效
2015/04/07 Javascript
AngularJS中的Directive自定义一个表格
2016/01/25 Javascript
JS、jQuery中select的用法详解
2016/04/21 Javascript
jquery+Jscex打造游戏力度条
2020/09/12 Javascript
浅谈原生JS中的延迟脚本和异步脚本
2017/07/12 Javascript
vuejs使用递归组件实现树形目录的方法
2017/09/30 Javascript
微信小程序 上传头像的实例详解
2017/10/27 Javascript
微信小程序实现下拉菜单切换效果
2020/03/30 Javascript
JS实现处理时间,年月日,星期的公共方法示例
2019/05/31 Javascript
HTML+JavaScript实现扫雷小游戏
2019/09/30 Javascript
vue+iview框架实现左侧动态菜单功能的示例代码
2020/07/23 Javascript
Python实现向QQ群成员自动发邮件的方法
2014/11/19 Python
详解Python网络爬虫功能的基本写法
2016/01/28 Python
Python 使用requests模块发送GET和POST请求的实现代码
2016/09/21 Python
python numpy格式化打印的实例
2018/05/14 Python
在python里从协程返回一个值的示例
2019/02/19 Python
Python 存储字符串时节省空间的方法
2019/04/23 Python
关于CSS Tooltips(鼠标经过时显示)的效果
2013/04/10 HTML / CSS
BISSELL官网:北美吸尘器第一品牌
2019/03/14 全球购物
桥梁与隧道工程专业本科生求职信
2013/10/08 职场文书
魅力教师事迹材料
2014/01/10 职场文书
2016年9月份红领巾广播稿
2015/12/21 职场文书
Go各时间字符串使用解析
2021/04/02 Golang
Window server 2012 R2 AD域的组策略相关设置
2022/04/28 Servers