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 相关文章推荐
jQuery 判断元素上是否绑定了事件
Oct 28 Javascript
js中的push和join方法使用介绍
Oct 08 Javascript
jQuery根据用户电脑是mac还是pc加载对应样式的方法
Jun 26 Javascript
轻量级javascript 框架Backbone使用指南
Jul 24 Javascript
JS随机洗牌算法之数组随机排序
Mar 23 Javascript
如何通过js实现图片预览功能【附实例代码】
Mar 30 Javascript
Javascript基础_标记文字的实现方法
Jun 14 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单的实现代码
Jun 23 Javascript
Google 地图类型详解及示例代码
Aug 06 Javascript
js 监控iframe URL的变化实例代码
Jul 12 Javascript
微信小程序模拟cookie的实现
Jun 20 Javascript
vue-quill-editor的使用及个性化定制操作
Aug 04 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
深入掌握include_once与require_once的区别
2013/06/17 PHP
PHP中strpos、strstr和stripos、stristr函数分析
2016/06/11 PHP
拖动Html元素集合 Drag and Drop any item
2006/12/22 Javascript
JS模拟的QQ面板上的多级可展开的菜单
2009/10/10 Javascript
了解jQuery技巧来提高你的代码
2010/01/08 Javascript
Javascript Request获取请求参数如何实现
2012/11/28 Javascript
JS实现简单的Canvas画图实例
2013/07/04 Javascript
jQuery实现根据类型自动显示和隐藏表单
2015/03/18 Javascript
Jquery动态添加输入框的方法
2015/05/29 Javascript
js仿腾讯QQ的web登陆界面
2016/08/19 Javascript
vuex实现简易计数器
2016/10/27 Javascript
通过jsonp获取json数据实现AJAX跨域请求
2017/01/22 Javascript
js实现显示手机号码效果
2017/03/09 Javascript
webpack打包后直接访问页面图片路径错误的解决方法
2017/06/17 Javascript
Redux 和 Mobx的选择问题:让你不再困惑!
2017/09/18 Javascript
弱类型语言javascript开发中的一些坑实例小结【变量、函数、数组、对象、作用域等】
2019/08/07 Javascript
[01:11:11]Alliance vs RNG 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
python通过线程实现定时器timer的方法
2015/03/16 Python
对于Python的Django框架部署的一些建议
2015/04/09 Python
Django内容增加富文本功能的实例
2017/10/17 Python
Python爬虫包BeautifulSoup学习实例(五)
2018/06/17 Python
Anaconda2 5.2.0安装使用图文教程
2018/09/19 Python
python基于paramiko将文件上传到服务器代码实现
2019/07/08 Python
Python异常继承关系和自定义异常实现代码实例
2020/02/20 Python
详解django使用include无法跳转的解决方法
2020/03/19 Python
详解Django中异步任务之django-celery
2020/11/05 Python
Sixt美国租车:高端豪华车型自驾体验
2017/09/02 全球购物
发现世界上最好的珠宝设计师:JewelStreet
2017/12/17 全球购物
澳大利亚办公室装修:JasonL Office Furniture
2019/06/25 全球购物
如何打印出当前源文件的文件名以及源文件的当前行号
2015/04/05 面试题
师范大学毕业自我鉴定
2013/11/21 职场文书
内蒙古鄂尔多斯市市长寄语
2014/04/10 职场文书
清明节网上祭英烈寄语2015
2015/03/04 职场文书
奖励申请报告范文
2015/05/15 职场文书
高中体育课教学反思
2016/02/16 职场文书
《和时间赛跑》读后感3篇
2019/12/16 职场文书