JavaScript中在光标处插入添加文本标签节点的详细方法

正确的方法是正确运用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);
 } 

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持我们!

时间: 2017-03-20

js/html光标定位的实现代码

复制代码 代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE> New Document </TITLE> <META NAME="Generator" CONTENT="EditPlus"> <META NAME="Author&q

js光标定位文本框回车表单提交问题的解决方法

本文实例讲述了js光标定位文本框回车表单提交问题的解决方法.分享给大家供大家参考.具体分析如下: 当光标定位在辅助查找的文本框后回车,页面会出现方法的返回的json串. 原因:When there is only one single-line text input field in a form, the user agent should accept Enter in that field as a request to submit the form. 翻译一下:当form中只有一个in

JavaScript自定义文本框光标

文本框(input或textarea)的光标无法修改样式(除了通过color修改光标颜色).但笔者希望个人创建自己的网站时,文本框的光标有属于自己的风格.所以,尝试模拟文本框的光标,设计有自己风格的光标.以下是笔者个人的想法. [************************基本思路***************************] 对于键盘操作来说,光标的基本操作不外乎最基本的三个键:左箭头(left arrow).右箭头(right arrow)和退格键(backspace). 左箭

javascript textarea光标定位方法(兼容IE和FF)

今天在做一个博客转发的功能,就像新浪微薄转播的那个功能一样,有一个textArea,就是我们发微薄的那个框,别人的微薄都有一个转发的按钮,当我们点击这个转发按钮的时候,他的微薄就会进入到textArea中,看起来很简单的文本框赋值,其实难点就在于,这时候的光标是定位在最前面的. 于是搜索了baidu,google,找到了 IE下面的方法 复制代码 代码如下: var tea=document.getElementById("文本框的ID"); var txt=textArea.crea

js实现获取焦点后光标在字符串后

主要介绍了js实现获取焦点后光标在字符串后,原理就是获得焦点后重新把自己复制粘帖一下,喜欢的朋友可以看看 复制代码 代码如下: var t=$("#"+id).val(); $("#"+id).val("").focus().val(t); //其原理就是获得焦点后重新把自己复制粘帖一下

Javascript实现获取及设置光标位置的方法

本文实例讲述了Javascript实现获取及设置光标位置的方法.分享给大家供大家参考.具体如下: 在项目开发中经常遇到input等设置光标位置到最后的问题,今天我查了一下Google,找到了在IE.Firefox.Opera等主流浏览器的获取光标位置(getCursortPosition)以及设置光标位置(setCursorPosition)的函数. 1. 获取光标位置函数: function getCursortPosition (ctrl) { var CaretPos = 0; // IE

js切换光标示例代码

复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>js切换光标<

js获取光标位置和设置文本框光标位置示例代码

复制代码 代码如下: <script type="text/javascript">        function getTxt1CursorPosition(){            var oTxt1 = document.getElementById("txt1");            var cursurPosition=-1;            if(oTxt1.selectionStart){//非IE浏览器           

在页面中js获取光标/鼠标的坐标及光标的像素坐标

近期为网站开发页面统计,以前虽然也开发过,但是功能不是很全,所以这次把一些好功能给用上. 例如这次的,页面JS光标/鼠标坐标,你也许问着有什么用,百度统计中有个热点统计图,这下清楚明白了吧. 好了,上肉: 功能:获取光标的像素坐标 复制代码 代码如下: <html> <head> <script type="text/javascript"> function showPosition(e){ var x,y; var e = e||window.e

JS在可编辑的div中的光标位置插入内容的方法

本文实例讲述了js实现在可编辑div中指定位置插入内容的方法,就像我们使用的编辑器一样,分享给大家供大家参考.具体实现方法如下: 首先要让DIV启用编辑模式 复制代码 代码如下: <div contenteditable=true id="divTest"></div> 通过设定contenteditable=true开启div的编辑模式.这样DIV就可以跟文本框一样输入内容了. 不扯话题了.下面说怎么获取或设置光标位置. 2个步骤: ① 获取DIV中的光标位置

JS实现iframe编辑器光标位置插入内容的方法(兼容IE和Firefox)

本文实例讲述了JS实现iframe编辑器光标位置插入内容的方法.分享给大家供大家参考,具体如下: <html> <iframe id="x" name="x"></iframe> <input type="button" onclick="t()" value="test"> <input type="button" onclick=

C#实现winform中RichTextBox在指定光标位置插入图片的方法

本文实例讲述了C#实现winform中RichTextBox在指定光标位置插入图片的方法.分享给大家供大家参考,具体如下: //获取RichTextBox控件中鼠标焦点的索引位置 int startPosition = this.richTextBox1.SelectionStart; //从鼠标焦点处开始选中几个字符 this.richTextBox1.SelectionLength = 2; //清空剪切板,防止里面之前有内容 Clipboard.Clear(); //给剪切板设置图片对象

js实现文本框中输入文字页面中div层同步获取文本框内容的方法

本文实例讲述了js实现文本框中输入文字页面中div层同步获取文本框内容的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.o

使用jQuery实现两个div中按钮互换位置的实例代码

效果如下 代码如下: <head> <meta charset="utf-8" /> <title></title> <script type="text/javascript" src="js/jquery-2.1.0.js"></script> <script type="text/javascript"> $(function() { /

用javascript获取textarea中的光标位置

对于写javascript写网页编辑器的人来说,获取textarea中的光标位置是一个非常重要的问题,而往往很多人在这个地方不知所措,找不到好的办法.昨天我在网上找到了一段javascript代码,本来不想把原版放在这里的,就是因为太精彩了,怕我给改坏了,所以还是原版放在这里吧. var start=0;     var end=0;     function add(){                var textBox = document.getElementById("ta"

JS+CSS设置img在DIV中只显示Img垂直居中的部分

一个Div中显示Img,img的宽和Div相同,但高不固定,要求只显示Img垂直居中的部分. 示例: 原图: 代码实现: 复制代码 代码如下: <div style="width: 190px; height: 100px; overflow: hidden;"> <img src="http://beijing.timeoutcn.com/UserFiles/Images/2013-10-21/20131021104840077cover-22-1.jpg

textbox 在光标位置插入字符功能的js实现(兼容ie,firefox)

更简单的在光标处插入文字 先在本文框中点鼠标以确定光标位置. [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行] 需要注意的是document.selection.createRange是IE独有的 而firefox也有独有的一套 复制代码 代码如下: var $obj = document.getElementById("words"); var selstart = $obj.selectionStart; //文字浮标选择的开始位置 var selend = $obj.s

详解C#把DataTable中数据一次插入数据库的方法

现在实际的情况是这样的: 客户有一台打卡机,员工打卡的信息全部储存在打卡机的Access数据库里面,现在客户引入了一种新的管理系统,需要将Access数据库中的打卡数据同步到SQL Server数据库中,由于时间比较久,数据积累了有40多万条. 软件功能: 选择Access数据库文件,填入目标SQL Server数据库的IP地址,然后开始进行同步. 实现方法: 1.先把Access数据库中要导入的数据存入DataTable中 配置文件中的数据库连接字符串 <connectionStrings>