文章目录

  • 简易 div 输入框
  • 1.移动光标到开始或结尾
  • 2.在光标处插入内容

简易 div 输入框

HTML5规范引入了 contenteditable 属性,它几乎可以用在任何元素上,只要添加这一属性 即可变为可编译区域。查看详情

一个简单的 <div> 输入框:

  <style>.editdiv{ min-height: 50px;background: #eee;/* 清除编辑器获取焦点时的默认样式:-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-modify:read-write-plaintext-only;outline:none;*//* 设置光标颜色:*/caret-color: green;/* 防止全局设置 -webkit-user-select: none 后不会获取焦点 */-webkit-user-select:text;}/* 设置提示文字 */.editdiv:empty::before {content: attr(placeholder);color: #999;}.editdiv:focus::before {content: none;}  </style><div contenteditable="true" class="editdiv" placeholder="请输入......"></div><!-- true  指定元素是可编辑的 --><!-- false 指定元素是不可编辑的 --><script>//兼容处理,统一换行时的元素渲染document.execCommand("defaultParagraphSeparator", false, "div");    </script>

设置光标的颜色
使用 CSS3 新增 caret-color 属性来定义插入光标的颜色。.

input{caret-color:red;
}

浏览器支持:

1.移动光标到开始或结尾

/*
* type: 'start'移动到开头,'end'移到到结尾
*/
function moveEnd(el,type) {el.focus(); if (window.getSelection) {               //ie11 10 9 ff safarivar range = window.getSelection();     //创建rangerange.selectAllChildren(el);           //选择el子项if(type=='start'){range.collapseToStart();             //光标移至开头}else{range.collapseToEnd();               //光标移至最后}}else if (document.selection) {                  //ie10 9 8 7 6 5var range = document.selection.createRange(); //创建选择对象range.moveToElementText(el);                  //range定位到eleif(type=='start'){range.collapse();                           //光标移至开头}else{range.collapse(false);                      //光标移至最后}range.select();}
}

2.在光标处插入内容

/*
* el   编辑框元素
* html 要插入的内容,可以是 html 代码
*/
function insertCont(el,html){el.focus();if(document.selection){   //IE 10,9,8,7                             document.selection.createRange().pasteHTML(html);}else if(window.getSelection){var sel = window.getSelection();if (sel.getRangeAt && sel.rangeCount) {var range = sel.getRangeAt(0);range.deleteContents();var div = document.createElement("div");div.innerHTML = html;var frag = document.createDocumentFragment(), node, lastNode;while ( (node = div.firstChild) ) {lastNode = frag.appendChild(node);}range.insertNode(frag);if (lastNode) {range = range.cloneRange();range.setStartAfter(lastNode);range.collapse(true);sel.removeAllRanges();sel.addRange(range);}}}
}

上面代码中 el.focus() 比较关键,用来确定操作目标元素,不然的话,鼠标点击页面任何地方都可插入内容。因为这里使用的是整个页面选区操作。其实有2中更简便的方法:
document.execCommand('insertHTML',false, '<span>html</span>');
document.execCommand('insertText',false,'文本')
缺点是IE浏览器只支持 'insertText' 而不支持 'insertHTML'

contentEditable 中光标控制相关推荐

  1. contenteditable元素的光标控制,自制emoji插件

    最近有个自定义表情插件要放入移动端页面,折腾了几天,有了些成果,分享下. 关键两点点就是contenteditable元素光标设置,和保持该元素的输入状态. 先上几个API吧 getSelection ...

  2. 获取html中光标位置

    本篇整理在项目中遇到的一个小问题,在js中监听了"parse"粘贴事件,导致粘贴文字到输入框出现问题. 通过获取输入框光标位置,然后拼接字符串解决. 第一种方法 获取textare ...

  3. 混合特征目标选择用于基于BCI的二维光标控制

    原文:Long J, Li Y, Yu T, et al. Target selection with hybrid feature for BCI-based 2-D cursor controlJ ...

  4. SAP SD基础知识之交货中的控制元素

    SAP SD基础知识之交货中的控制元素 一,交货类型Delivery Type Delivery type控制整个的交货,我们可以在delivery header中看到delivery type: D ...

  5. chmod 是一条在Unix系统中用于控制用户对文件的权限的命令

    chmod 是一条在Unix系统中用于控制用户对文件的权限的命令(change mode单词前缀的组合)和函数.只有文件所有者和超级用户可以修改文件或目录的权限.可以使用绝对模式,符号模式指定文件的权 ...

  6. spring中事务控制的一组API

    Spring事务控制我们要明确的 第一:JavaEE体系进行分层开发,事务处理位于业务层,Spring提供了分层设计业务层的事务处理解决方案. 第二:spring框架为我们提供了一组事务控制的接口.具 ...

  7. hadoop中如何控制map的数量

    hadoop中如何控制map的数量 @(HADOOP)[hadoop] hadooop提供了一个设置map个数的参数mapred.map.tasks,我们可以通过这个参数来控制map的个数.但是通过这 ...

  8. mysql游标书写_mysql中光标如何书写

    mysql中光标书写的方法:首先声明光标:然后开启光标,代码为[OPEN cursor_name]:接着捕获光标:最后关闭光标,代码为[CLOSE cursor_name]. 本教程操作环境:wind ...

  9. JAVA语言中流程控制(顺序结构、判断语句、循环语句)

    流程控制: 程序在执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的,所以,我们必须清楚每条语句的执行流程.而且,很多时候我们要通过控制语句的执行顺序来实现想要的功能.java中流程控制有:顺 ...

最新文章

  1. 解决 The mysql extension is deprecated and will be r
  2. vmware虚拟机克隆后,启动网卡报错device eth0 does not seem to be present, delaying initialization...
  3. python小学_小学生学python(二)
  4. php的server和location,3、Nginx关于server块和location块的配置
  5. JSP页面中四种“返回按钮”的使用
  6. java结丹期(15)----javaweb(maven(1))
  7. 探索7.x, 全面解析Activity启动框架 (2)
  8. 使用TensorFlow进行鬼写
  9. jsp value设置为函数的返回值_python中的生成器函数是如何工作的?
  10. ObjC学习9-Foundation框架之操作文件
  11. Facebook 正式开源其大数据查询引擎 Presto
  12. mac自带代码对比工具
  13. 阿里云企业邮箱使用步骤
  14. C语言指针的正确打开方式!
  15. 我错过了乔布斯和初代 iPhone,十年后幸好没错过你
  16. linux 交换机实例,华为路由器和交换机实例配置
  17. java HashMap集合的使用
  18. BOOST双闭环控制simlulink仿真
  19. word2007插件开发经验备忘1--如何开发word插件
  20. Oracle查询当前时间的前1个小时的数据

热门文章

  1. Deployment 原理
  2. 抖音为什么会那么火?
  3. 分治法典型体现之快速排序(一遍单项扫描)
  4. Linux上网连接路由器的方法
  5. 移一代如何在大城市立足
  6. Games101 计算机图形学课程笔记:Lecture 19 Cameras, Lenses and Light Fields
  7. 从双十一到黑五,它引领了全球服务机器人市场
  8. 计算机画图软件技巧,Win7系统自带画图工具快速浏览图片的技巧
  9. 如何建立家庭计算机组,教你如何创建和设置家庭组,看完你就知道了
  10. WUBI 安装常见问题FAQ