具体实现方法如下:

首先要让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();

}

给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);

}

}

最新文章

  1. 关于C#静态变量初始化问题
  2. CI(CodeIgniter)框架入门教程——第二课 初始MVC
  3. Date 与 switch的运用
  4. (easy)LeetCode 202.Happy Number
  5. android 开发自建wifi热点的默认ip
  6. 内存泄露分析 打开run static analyzer
  7. 解决GitHub未配置SSH key提示错误信息
  8. 此三层非彼三层——MVC&amp;amp;UBD
  9. mysql字符编码设置
  10. Php中的goto用法
  11. 在.NET开发中的单元测试工具之(2)——xUnit.Net
  12. window 日志清楚
  13. pl/sql调试存储过程
  14. OpenStack配置串口显示虚机界面
  15. Junit4单元测试的基本用法
  16. prompt更改MySQL登陆后的提示符
  17. 图解Eclipse中配置Maven并创建Maven的Web工程
  18. PAT 甲级 1094 The Largest Generation
  19. ddmlib问题总结——同步获取设备信息
  20. cookie注入原理

热门文章

  1. json注入
  2. SQL Server的各种聚合函数
  3. 改变TableView中的分割线位置
  4. ios客户端快速滚动和回弹效果的实现
  5. 02传智_jbpm与OA项目_部门模块
  6. css3 box-sizing属性
  7. swift UIImage加载远程图片和圆角矩形
  8. SharePoint 2013:自定义ECB菜单项的添加
  9. C#.NET 大型通用信息化系统集成快速开发平台 4.0 版本 - 拆分表、联系方式的拆分?
  10. Android Stduio统计项目的代码行数