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 相关文章推荐
简单的JS多重继承示例
Mar 13 Javascript
简洁短小的 JavaScript IE 浏览器判定代码
Mar 21 Javascript
javascript中var的重要性分析
Feb 11 Javascript
浅谈Javascript中substr和substring的区别
Sep 30 Javascript
JS中call/apply、arguments、undefined/null方法详解
Feb 15 Javascript
用canvas 实现个图片三角化(LOW POLY)效果
Feb 18 Javascript
angularjs实现多张图片上传并预览功能
Feb 24 Javascript
javascript中this用法实例详解
Apr 06 Javascript
在 Node.js 中使用 async 函数的方法
Nov 17 Javascript
js 取消页面可以选中文字的功能方法
Jan 02 Javascript
vue.js实现标签页切换效果
Jun 07 Javascript
vue-video-player 断点续播的实现
Feb 01 Vue.js
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
如何用phpmyadmin设置mysql数据库用户的权限
2012/01/09 PHP
php+iframe实现隐藏无刷新上传文件
2012/02/10 PHP
支付宝服务窗API接口开发php版本
2016/07/20 PHP
PHP实现大数(浮点数)取余的方法
2017/02/18 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
2020/02/27 PHP
收集json解析的四种方法分享
2014/01/17 Javascript
javascript 10进制和62进制的相互转换
2014/07/31 Javascript
JSON取值前判断
2014/12/23 Javascript
js+css实现tab菜单切换效果的方法
2015/01/20 Javascript
jquery使用hide方法隐藏指定id的元素
2015/03/30 Javascript
nodejs中全局变量的实例解析
2017/03/07 NodeJs
webpack4 css打包压缩问题的解决
2018/05/18 Javascript
详解从0开始搭建微信小程序(前后端)的全过程
2019/04/15 Javascript
weui中的picker使用js进行动态绑定数据问题
2019/11/06 Javascript
vue 实现element-ui中的加载中状态
2020/11/11 Javascript
js实现简易点击切换显示或隐藏
2020/11/29 Javascript
微信小程序实现首页弹出广告
2020/12/03 Javascript
[03:46]显微镜下的DOTA2第七期——满血与残血
2014/06/20 DOTA
Python3单行定义多个变量或赋值方法
2018/07/12 Python
Python实现常见的回文字符串算法
2018/11/14 Python
详解python多线程之间的同步(一)
2019/04/03 Python
python3+PyQt5 实现Rich文本的行编辑方法
2019/06/17 Python
详解Django定时任务模块设计与实践
2019/07/24 Python
Python 实现的 Google 批量翻译功能
2019/08/26 Python
python使用梯度下降算法实现一个多线性回归
2020/03/24 Python
css3让div随鼠标移动而抖动起来
2014/02/10 HTML / CSS
用css3实现转换过渡和动画效果
2020/03/13 HTML / CSS
html5用video标签流式加载的实现
2020/05/20 HTML / CSS
英国领先的奢侈品零售商之一:CRUISE
2016/12/02 全球购物
澳大利亚墨尔本的在线时装店:LORETA
2018/09/14 全球购物
作为网站管理者应当如何防范XSS
2014/08/16 面试题
师范生免费教育协议书范本
2014/10/09 职场文书
2015年财务人员工作总结
2015/04/10 职场文书
时尚女魔头观后感
2015/06/04 职场文书
MySQL提升大量数据查询效率的优化神器
2022/07/07 MySQL
Win11如何查看显卡型号 Win11查看显卡型号的方法
2022/08/14 数码科技