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

 首先要让DIV启用编辑模式

代码如下:
<div contenteditable=true id="divTest"></div>

通过设定contenteditable=true开启div的编辑模式.这样DIV就可以跟文本框一样输入内容了。
不扯话题了。下面说怎么获取或设置光标位置.

 

2个步骤:

① 获取DIV中的光标位置
② 改变光标位置

代码如下:
var cursor = 0; // 光标位置 
document.onselectionchange = function () {
var range = document.selection.createRange();
var srcele = range.parentElement();//获取到当前元素
var copy = document.body.createTextRange();
copy.moveToElementText(srcele);
for (cursor = 0; copy.compareEndPoints("StartToStart", range) < 0; cursor++) {
 copy.moveStart("character", 1);//改变光标位置,实际上我们是在记录cursor的数量.
}
}

给document绑定光标变化事件。用来记录光标位置.
这样就可以拿到DIV的光标位置了.

代码如下:
function moveEnd(obj) {
lyTXT1.focus();
var r = document.selection.createRange();
//因为这里死从当前光标开始移动的(好像文本框的是从0算起.)所以我们需要拿到当前光标位置,然后就可以计算出要移动多少位了,这样就可以把光标移动到想要的位置了
r.moveStart('character', lyTXT1.innerText.length - cursor);
r.collapse(true);
r.select();
}

通过上面的我们就可以将DIV中的光标移动到最后面了
一个完整的实例

复制代码 代码如下:
<button type="button" onclick="document.getElementById('test').focus(); insertHtmlAtCaret('<b>INSERTED</b>');">插入字符</button>
<div contentEditable="true" style="height:50px; border:2px solid red;" id="test"> </div>
 
function insertHtmlAtCaret(html) {
var sel, range;
if (window.getSelection) {
// IE9 and non-IE
sel = window.getSelection();
if (sel.getRangeAt && sel.rangeCount) {
range = sel.getRangeAt(0);
range.deleteContents();
// Range.createContextualFragment() would be useful here but is
// non-standard and not supported in all browsers (IE9, for one)
var el = document.createElement("div");
el.innerHTML = html;
var frag = document.createDocumentFragment(), node, lastNode;
while ( (node = el.firstChild) ) {
lastNode = frag.appendChild(node);
}
range.insertNode(frag);
// Preserve the selection
if (lastNode) {
range = range.cloneRange();
range.setStartAfter(lastNode);
range.collapse(true);
sel.removeAllRanges();
sel.addRange(range);
}
}
} else if (document.selection && document.selection.type != "Control") {
// IE < 9
document.selection.createRange().pasteHTML(html);
}
}

 

再看一个基于jquery的实例

 代码如下:
<!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>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<title>contenteditable</title>
<style>
*{
 margin:0;padding:0;
}
.im-message-area{
 width:98%;
 padding:2px;
 height:75px;
 border:#000 solid 1px;
 background:#fff;
 font:12px/20px arial,"5b8b4f53";
 word-wrap:break-word;
 overflow-y:auto;
 line-height:1;
}
.ul{display:none;}
.ul li{
 background-color:#CCC;
 width:50px;
}
</style>
<script language="javascript" type="text/javascript">
function inimage(text){
 var obj= $(".im-message-area")[0];
 var range, node;
 if(!obj.hasfocus) {
  obj.focus();
 }
    if (window.getSelection && window.getSelection().getRangeAt) {
        range = window.getSelection().getRangeAt(0);
  range.collapse(false);
        node = range.createContextualFragment(text);
  var c = node.lastChild;
        range.insertNode(node);
  if(c){
   range.setEndAfter(c);
   range.setStartAfter(c)
  }
  var j = window.getSelection();
  j.removeAllRanges();
  j.addRange(range);
 
    } else if (document.selection && document.selection.createRange) {
        document.selection.createRange().pasteHTML(text);
    }
}
$(document).ready(function(){
 $('#button').click(function(){
  $('.ul').show();
 })
 $('.ul li').each(function(){
  $(this).click(function(){
   inimage($(this).text());
  })
 })
});
</script>
</head>
<body>
 <div contenteditable="true" id="im_message_area" class="im-message-area"><br></div>
 <a href="javascript:void(0)" id="button">按钮</a>
 <ul class="ul">
  <li>(笑)</li>
  <li>(哭)</li>
  <li>(乐)</li>
 </ul>
</body>
</html>

时间: 2025-01-01 06:36:24

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

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

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

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

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

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

 这篇文章主要介绍了js实现文本框中输入文字页面中div层同步获取文本框内容的方法,实例分析了javascript操作dom元素的技巧,需要的朋友可以参考下     本文实例讲述了js实现文本框中输入文字页面中div层同步获取文本框内容的方法.分享给大家供大家参考.具体实现方法如下:   代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/x

如何获取鼠标在div中的相对位置

  如何获取鼠标在div中的相对位置,其实是很简单,下有个不错的示例,感兴趣的朋友可以参考下  代码如下: <HEAD>  <TITLE> JS获取DIV相对坐标</TITLE>  <script type="text/javascript"><!--  function getX(obj){  var parObj=obj;  var left=obj.offsetLeft;  while(parObj=parObj.offset

解释一段在光标位置插入字符的js代码

js|插入|光标 这篇小文本来应该在昨天发的,但是由于我昨天敲错了一个键(就是IBM笔记本键盘上的前进后退),导致文章丢失...今天就简写了.网络上有许多能在光标位置插入字符的js代码,比较啰嗦,不适合讲解.我写了一段简单的代码,解释一下: 1234567 <FORM> <TEXTAREA NAME="a" ONSELECT="this.pos=document.selection.createRange();"  onKEYUP="th

用javascript获取textarea中的光标位置_javascript技巧

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

TextArea中定位光标位置

原文:TextArea中定位光标位置     在项目中,遇到一个场景:希望能在TextArea中输入某条记录中的明细(明细较简单,没有附属信息,只用记录顺序和值即可,譬如用"+"号来作为明细分隔符:1+1.5+2+3.4),如下图所示:     为了让输入更直观,需要在输入过程中,实时地显示汇总数量和合计:如果用户希望编辑文本中间的某条明细,也可以通过鼠标点击.或者键盘上的上下左右键来定位某个明细,并在页面上提示光标的焦点位置.       最开始,通过windows.event.x.

在Asp程序中取得表单所有内容的方法

程序 /**@描述: 在Asp程序中取得表单所有内容的方法@作者: 慈勤强@Email:cqq1978@Gmail.com Http://blog.csdn.net/cqq*/ 刚才在论坛里面看到有人问这个问题,就是在Asp中如何得到所有表单的名称跟 对应的值.其实,这个问题很简单,但是可能还是有很多人不知道该怎么做,所以特地 写下来,仅供参考. 在Asp程序中,用来获得客户端数据的对象是 Request,这个对象给我们提供了很多 的方法以及属性.比如,有这样一个Form, <FORM METH

复制Windows中警告提示消息对话框内容的方法

  在使用Windows操作系统的时候,常常会由于各种操作而使系统弹出警告提示窗口,有的系统提示只是友情提示,有的则是系统错误,则需要我们去解决,通常的方法就是去网上搜索解决办法.那么在搜索之前,我们得先把错误的内容复制下来,以便于网友们根据错误提示内容来帮你解决具体的问题.然而系统弹出的警告提示窗口不可以用鼠标选择上面的文字,所以我们只能通过手动把警告提示窗口中的文字一个字一个字的键入到搜索引擎,实在是太麻烦了,所以今天就教大家复制Windows中警告提示消息对话框内容的方法. 这里假如我要关