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 相关文章推荐
JavaScript之HTMLCollection接口代码
Apr 27 Javascript
JavaScript取得鼠标绝对位置程序代码介绍
Sep 16 Javascript
JavaScript 命名空间 使用介绍
Aug 29 Javascript
原生JavaScript实现连连看游戏(附源码)
Nov 05 Javascript
一个实用的图片切换支持点击切换和自动轮播
Sep 09 Javascript
深入理解Ajax的get和post请求
Jun 02 Javascript
JS动态添加选项案例分析
Oct 17 Javascript
JS闭包的几种常见形式实例详解
Sep 16 Javascript
解决Vue在封装了Axios后手动刷新页面拦截器无效的问题
Nov 08 Javascript
layui form.render('select', 'test2') 更新渲染的方法
Sep 27 Javascript
js实现登录时记住密码的方法分析
Apr 05 Javascript
JavaScript变量Dom对象的所有属性
Apr 30 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
PHP中的integer类型使用分析
2010/07/27 PHP
一道求$b相对于$a的相对路径的php代码
2010/08/08 PHP
apache配置虚拟主机的方法详解
2013/06/17 PHP
smarty模板引擎之分配数据类型
2015/03/30 PHP
微信公众平台开发(五) 天气预报功能开发
2016/12/03 PHP
php使用include 和require引入文件的区别
2017/02/16 PHP
激活 ActiveX 控件
2006/10/09 Javascript
js验证表单第二部分
2006/11/25 Javascript
Javascript和Ajax中文乱码吐血版解决方案
2009/12/21 Javascript
jquery ajax请求实例深入解析
2012/11/26 Javascript
js获取select选中的option的text示例代码
2013/12/19 Javascript
jquery实现未经美化的简洁TAB菜单效果
2015/08/28 Javascript
JavaScript原型及原型链终极详解
2016/01/04 Javascript
JavaScript——DOM操作——Window.document对象详解
2016/07/14 Javascript
前端分页功能的实现以及原理(jQuery)
2017/01/22 Javascript
Bootstrap-table使用footerFormatter做统计列功能
2018/09/07 Javascript
Jquery和CSS实现选择框重置按钮功能
2018/11/08 jQuery
ES6箭头函数和扩展实例分析
2020/05/23 Javascript
详解微信小程序入门从这里出发(登录注册、开发工具、文件及结构介绍)
2020/07/21 Javascript
vue cli 3.0通用打包配置代码,不分一二级目录
2020/09/02 Javascript
[45:17]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第三场 1月9日
2021/03/11 DOTA
python修改操作系统时间的方法
2015/05/18 Python
python读取文件名称生成list的方法
2018/04/27 Python
pygame游戏之旅 添加icon和bgm音效的方法
2018/11/21 Python
python批量修改文件夹及其子文件夹下的文件内容
2019/03/15 Python
python 数据生成excel导出(xlwt,wlsxwrite)代码实例
2019/08/23 Python
Python使用贪婪算法解决问题
2019/10/22 Python
python自动点赞功能的实现思路
2020/02/26 Python
python如何提升爬虫效率
2020/09/27 Python
美国最大的半成品净菜电商:Blue Apron(蓝围裙)
2018/04/27 全球购物
关于毕业的广播稿
2014/01/10 职场文书
优秀企业获奖感言
2014/02/01 职场文书
爱我中华演讲稿
2014/05/20 职场文书
事业单位鉴定材料
2014/05/25 职场文书
培训学校2015年度工作总结
2015/07/20 职场文书
Java Spring Boot请求方式与请求映射过程分析
2022/06/25 Java/Android