javascript实现textarea中tab键的缩排处理方法


Posted in Javascript onJune 26, 2015

本文实例讲述了javascript实现textarea中tab键的缩排处理方法。分享给大家供大家参考。具体如下:

网上搜索了一下相关的解决方法,其它的有使用两三行javascript解决的,但都有一些小小的问题。还有使用JQuery的,也非常简洁。

本文的javascript代码实现了在TEXTAREA中输入TAB键并自动缩进的功能。不过这段代码在谷歌浏览器中不能正常执行,在

sel =event.srcElement.document.selection.createRange()

这一句会发生错误:
ncaught exception TypeError: Cannot read property 'selection' of undefined

代码在IE中正常执行,如下:

<mce:script type="text/javascript">
<!-- 
function editTab() 
{ 
  var code, sel, tmp, r 
  var tabs="" 
  event.returnValue = false 
  sel =event.srcElement.document.selection.createRange() 
  r = event.srcElement.createTextRange() 
  switch (event.keyCode) 
  { 
    case (8)  : 
      if (!(sel.getClientRects().length > 1)) 
      { 
        event.returnValue = true 
        return 
      } 
      code = sel.text 
      tmp = sel.duplicate() 
      tmp.moveToPoint(r.getBoundingClientRect().left, sel.getClientRects()[0].top) 
      sel.setEndPoint("startToStart", tmp) 
      sel.text = sel.text.replace(/^/t/gm, "") 
      code = code.replace(/^/t/gm, "").replace(//r/n/g, "/r") 
      r.findText(code) 
      r.select() 
      break 
    case (9)  : 
      if (sel.getClientRects().length > 1) 
      { 
        code = sel.text 
        tmp = sel.duplicate() 
        tmp.moveToPoint(r.getBoundingClientRect().left, sel.getClientRects()[0].top) 
        sel.setEndPoint("startToStart", tmp) 
        sel.text = "/t"+sel.text.replace(//r/n/g, "/r/t") 
        code = code.replace(//r/n/g, "/r/t") 
        r.findText(code) 
        r.select() 
      } 
      else 
      { 
        sel.text = "/t" 
        sel.select() 
      } 
      break 
    case (13)  : 
      tmp = sel.duplicate() 
      tmp.moveToPoint(r.getBoundingClientRect().left, sel.getClientRects()[0].top) 
      tmp.setEndPoint("endToEnd", sel) 
      for (var i=0; tmp.text.match(/^[/t]+/g) && i<tmp.text.match(/^[/t]+/g)[0].length; i++)  tabs += "/t" 
      sel.text = "/r/n"+tabs 
      sel.select() 
      break 
    default   : 
      event.returnValue = true 
      break 
  } 
} 
// -->
</mce:script>

使用时:

<textarea cols=80 rows=20 name="input" onkeydown="editTab()"></textarea>

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
Date对象格式化函数代码
Jul 17 Javascript
提升你网站水平的jQuery插件集合推荐
Apr 19 Javascript
javascript 手动给表增加数据的小例子
Jul 10 Javascript
javascript中数组array及string的方法总结
Nov 28 Javascript
jQuery实现带滑动条的菜单效果代码
Aug 26 Javascript
原生js和css实现图片轮播效果
Feb 07 Javascript
ReactNative短信验证码倒计时控件的实现代码
Jul 20 Javascript
新手快速上手webpack4打包工具的使用详解
Jan 28 Javascript
如何测量vue应用运行时的性能
Jun 21 Javascript
微信公众号开发之微信支付代码记录的实现
Oct 16 Javascript
详解Vue3中对VDOM的改进
Apr 23 Javascript
Vue简单实现原理详解
May 07 Javascript
jQuery根据用户电脑是mac还是pc加载对应样式的方法
Jun 26 #Javascript
jQuery实现鼠标划过添加和删除class的方法
Jun 26 #Javascript
jQuery实现网站添加高亮突出显示效果的方法
Jun 26 #Javascript
jQuery匹配文档链接并添加class的方法
Jun 26 #Javascript
jquery计算鼠标和指定元素之间距离的方法
Jun 26 #Javascript
jquery操作angularjs对象
Jun 26 #Javascript
jQuery检查事件是否触发的方法
Jun 26 #Javascript
You might like
rephactor 优秀的PHP的重构工具
2011/06/09 PHP
PHP中使用BigMap实例
2015/03/30 PHP
举例讲解PHP面对对象编程的多态
2015/08/12 PHP
laravel框架select2多选插件初始化默认选中项操作示例
2020/02/18 PHP
关于js类的定义
2011/06/28 Javascript
jquery仿搜索自动联想功能代码
2014/05/23 Javascript
Javascript实现获取窗口的大小和位置代码分享
2014/12/04 Javascript
javascript中关于&amp;&amp; 和 || 表达式的小技巧分享
2015/04/10 Javascript
setTimeout内不支持jquery的选择器的解决方案
2015/04/28 Javascript
基于express中路由规则及获取请求参数的方法
2018/03/12 Javascript
Vuex 使用及简单实例(计数器)
2018/08/29 Javascript
CSS3 动画卡顿性能优化的完美解决方案
2018/09/20 Javascript
vue-quill-editor+plupload富文本编辑器实例详解
2018/10/19 Javascript
微信小程序实现渐入渐出动画效果
2019/06/13 Javascript
在JavaScript中使用严格模式(Strict Mode)
2019/06/13 Javascript
关于vue的列表图片选中打钩操作
2020/09/09 Javascript
剖析Django中模版标签的解析与参数传递
2015/07/21 Python
Python处理文本文件中控制字符的方法
2017/02/07 Python
linux环境下的python安装过程图解(含setuptools)
2017/11/22 Python
python实现zabbix发送短信脚本
2018/09/17 Python
Python OpenCV对本地视频文件进行分帧保存的实例
2019/01/08 Python
PyTorch中 tensor.detach() 和 tensor.data 的区别详解
2020/01/06 Python
使用Keras构造简单的CNN网络实例
2020/06/29 Python
html5的pushstate以及监听浏览器返回事件的实现
2020/08/11 HTML / CSS
私有程序集与共享程序集有什么区别
2013/04/05 面试题
总经理秘书工作职责
2013/12/26 职场文书
中专生职业生涯规划书范文
2013/12/29 职场文书
幼儿园教育教学反思
2014/01/31 职场文书
外贸专业求职信
2014/03/09 职场文书
消防安全员岗位职责
2014/03/10 职场文书
启动仪式策划方案
2014/06/14 职场文书
技术股份合作协议书
2014/10/05 职场文书
2014财务部年度工作总结
2014/12/08 职场文书
2015年社区纪检工作总结
2015/04/21 职场文书
导游词之秦皇岛燕塞湖
2020/01/03 职场文书
Java练习之潜艇小游戏的实现
2022/03/16 Java/Android