前言:

高亮显示输入框中的关键字符,这就必须得用到可编辑div(或其他标签)元素了,这时我们需要获取光标的位置,以便插入字符。

正文:

正常情况下获取光标位置,代码如下:

 function getPointPorsiton1() {
if (window.getSelection) {
var range = window.getSelection().getRangeAt(0);//创建range
}
else if (document.selection) {
var range = document.selection.createRange();//创建选择对象
}
return range.endOffset;
}

  在可编辑元素中只有文本的情况下,这样写没有问题,但是!!!,当元素内含有标签时,返回如下图

  而我们真正需要的拿到的位置是5(“示例”后有个空格^_^),或者拿到光标前html的长度。

  获取光标前文本长度,代码如下:

 function getPointPositon2() {
if (window.getSelection) {
var range = window.getSelection().getRangeAt(0);//创建range
}
else if (document.selection) {
var range = document.selection.createRange();//创建选择对象
}
var end = range.endOffset;
var preElement = range.endContainer;
while(preElement.previousSibling){
end += preElement.previousSibling.textContent.length;
preElement = preElement.previousSibling;
}
return end;
}

  获取光标前html长度,代码如下:

 function getPointPositon3() {
if (window.getSelection) {
var range = window.getSelection().getRangeAt(0);//创建range
}
else if (document.selection) {
var range = document.selection.createRange();//创建选择对象
}
var end = range.endOffset;
var preElement = range.endContainer;
while(preElement.previousSibling){
if(preElement.previousSibling.outerHTML){
end += preElement.previousSibling.outerHTML.length;
}else{
end += preElement.previousSibling.textContent.length;
}
preElement = preElement.previousSibling;
}
return end;
}

  最终效果图如下:

参考文章:http://www.zhangxinxu.com/wordpress/?p=1591

最新文章

  1. EF 在controller弹出提示消息
  2. 关于mapreduce.map.java.opts
  3. Eclipse闪退无法打开的解决方法
  4. Spring IOC容器中注入bean
  5. Interrupts
  6. 简单的利用JS来判断页面是在手机端还是在PC端打开的方法
  7. Linux 上使用LVM 扩展磁盘Size
  8. Spring cloud Greenwich Eureka
  9. some knowledge of the IT world
  10. springcloud-Eureka-服务注册与发现核心组件
  11. [UE4]在UI中获取玩家角色实例
  12. Using PHP as a Spring MVC View via Quercus(转)
  13. android笔记---LoginActivity extends FinalActivity
  14. vi卡死解决办法
  15. 利用opencv从USB摄像头获取图片
  16. linux 用户管理修改用户信息、密码状态、删除用户、退出登陆、切换用户
  17. HTTP请求方法 之 HEAD
  18. 用python解析word文件(段落篇(paragraph) 表格篇(table) 样式篇(style))
  19. BZOJ 2957 楼房重建(线段树区间合并)
  20. UNIDAC的安装

热门文章

  1. EF6 code first 新建项目注意问题
  2. JS实现手机摇一摇功能
  3. [EffectiveC++]item21:Don't try to return a reference when you must return an object
  4. MSSQL SEVER执行动态SQL
  5. 019.2 map集合类
  6. 001Java输入、eclipse快捷键
  7. c++ 一般虚函数
  8. NSLayout​Constraint
  9. luogu P2742 【模板】二维凸包
  10. 8、Web Service-IDEA-jaxws规范下的 spring整合CXF