JavaScript在光标处插入文本节点的方法:Selection与Range对象详解

作者:闭包旅人

时间:2026-10-21

浏览:504

本文详细讲解如何在JavaScript中利用Selection和Range对象在光标当前位置插入文本或节点。重点区分了IE与标准DOM下的不同实现方式,并对比了innerHTML与pasteHTML方法的适用场景,提供了具体的代码示例和操作步骤。

文章目录

Selection与Range对象的基本用法

要在光标当前位置插入文本或节点,核心在于正确使用Selection对象和Range对象。需要注意的是,这两种对象在Internet Explorer(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属性与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中通过Selection和Range对象插入文本的主要方法。希望这些内容能对学习和工作有所帮助,欢迎继续支持本站。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章