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 相关文章推荐
收集的10个免费的jQuery相册
Feb 26 Javascript
鼠标拖动实现DIV排序示例代码
Oct 14 Javascript
jquery使用$(element).is()来判断获取的tagName
Aug 24 Javascript
Javascript仿新浪游戏频道鼠标悬停显示子菜单效果
Aug 21 Javascript
JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍
May 19 Javascript
利用vue-router实现二级菜单内容转换
Nov 30 Javascript
微信小程序 swiper制作tab切换实现附源码
Jan 21 Javascript
Angular 4依赖注入学习教程之InjectToken的使用(八)
Jun 04 Javascript
基于jquery实现五星好评
Nov 18 jQuery
微信小程序实现列表页的点赞和取消点赞功能
Nov 02 Javascript
使用axios发送post请求,将JSON数据改为form类型的示例
Oct 31 Javascript
AngularJS动态生成select下拉框的方法实例
Nov 17 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
Yii框架表单模型和验证用法
2016/05/20 PHP
Thinkphp连表查询及数据导出方法示例
2016/10/15 PHP
php实现的读取CSV文件函数示例
2017/02/07 PHP
PHP echo()函数讲解
2019/02/15 PHP
javascript for循环设法提高性能
2010/02/24 Javascript
JavaScript this调用规则说明
2010/03/08 Javascript
Javascript中string转date示例代码
2013/11/01 Javascript
JS设置cookie、读取cookie、删除cookie
2015/04/17 Javascript
jquery实现具有嵌套功能的选项卡
2016/02/12 Javascript
JS动态增删表格行的方法
2016/03/03 Javascript
jQuery插件jquery.kxbdmarquee.js实现无缝滚动效果
2017/02/15 Javascript
详解vue.js之绑定class和style的示例代码
2017/08/24 Javascript
jQuery实现鼠标点击处心形漂浮的炫酷效果示例
2018/04/12 jQuery
Redux实现组合计数器的示例代码
2018/07/04 Javascript
jQuery的Ajax接收java返回数据方法
2018/08/11 jQuery
js神秘的电报密码 哈弗曼编码实现
2019/09/10 Javascript
JS简单表单验证功能完整示例
2020/01/26 Javascript
js this 绑定机制深入详解
2020/04/30 Javascript
python中常用的各种数据库操作模块和连接实例
2014/05/29 Python
python计算对角线有理函数插值的方法
2015/05/07 Python
python机器人行走步数问题的解决
2018/01/29 Python
Python检测网络延迟的代码
2018/05/15 Python
Python使用matplotlib绘制随机漫步图
2018/08/27 Python
python 遍历列表提取下标和值的实例
2018/12/25 Python
Python基本数据结构之字典类型dict用法分析
2019/06/08 Python
Python socket模块ftp传输文件过程解析
2019/11/05 Python
如何基于Python制作有道翻译小工具
2019/12/16 Python
HTML5之SVG 2D入门8—文档结构及相关元素总结
2013/01/30 HTML / CSS
医药工作岗位求职信分享
2013/12/31 职场文书
单位成立周年感言
2014/01/26 职场文书
企业新年寄语
2014/04/04 职场文书
2014年向国旗敬礼活动方案
2014/09/27 职场文书
2014年干部作风建设总结
2014/10/23 职场文书
2015年国庆节标语大全
2015/07/30 职场文书
周末问候语大全
2015/11/10 职场文书
Python操作CSV格式文件的方法大全
2021/07/15 Python