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阻止事件冒泡
Mar 20 Javascript
JavaScript中的Math 使用介绍
Apr 21 Javascript
JavaScript中的值是按值传递还是按引用传递问题探讨
Jan 30 Javascript
JavaScript获取图片像素颜色并转换为box-shadow显示
Mar 11 Javascript
js HTML5手机刮刮乐代码
Sep 29 Javascript
微信小程序商城项目之商品属性分类(4)
Apr 17 Javascript
jQuery实现验证表单密码一致性及正则表达式验证邮箱、手机号的方法
Dec 05 jQuery
Vue-Router基础学习笔记(小结)
Oct 15 Javascript
Vue函数式组件-你值得拥有
May 09 Javascript
如何阻止小程序遮罩层下方图层滚动
Sep 05 Javascript
浅析js实现网页截图的两种方式
Nov 01 Javascript
Ajax 的初步实现(使用vscode+node.js+express框架)
Jun 18 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 curl获取301或302转向的网址问题的解决方法
2011/06/02 PHP
解密ThinkPHP3.1.2版本之模块和操作映射
2014/06/19 PHP
Yii清理缓存的方法
2016/01/06 PHP
JavaScript中的对象化编程
2008/01/16 Javascript
Tips 带三角可关闭的文字提示
2010/10/06 Javascript
ExtJs的Date格式字符代码
2010/12/30 Javascript
JS代码同步文本框内容的实例方法
2013/07/12 Javascript
js截取小数点后几位的写法
2013/11/14 Javascript
javascript作用域和闭包使用详解
2014/04/25 Javascript
简介JavaScript中valueOf()方法的使用
2015/06/05 Javascript
基于jQuery实现的QQ表情插件
2015/08/25 Javascript
类似于QQ的右滑删除效果的实现方法
2016/10/16 Javascript
jquery实现楼层滚动效果
2018/01/01 jQuery
vue导出html、word和pdf的实现代码
2018/07/31 Javascript
Vue.js上传图片到阿里云OSS存储的方法示例
2018/12/13 Javascript
vue集成kindeditor富文本的实现示例代码
2019/06/07 Javascript
环形加载进度条封装(Vue插件版和原生js版)
2019/12/04 Javascript
jQuery实现的移动端图片缩放功能组件示例
2020/05/01 jQuery
浅谈vue中document.getElementById()拿到的是原值的问题
2020/07/26 Javascript
[12:36]《DOTA2》国服注册与激活指南全攻略
2013/04/28 DOTA
python类继承用法实例分析
2014/10/10 Python
python实现删除文件与目录的方法
2014/11/10 Python
Python使用scrapy抓取网站sitemap信息的方法
2015/04/08 Python
Windows下安装python2和python3多版本教程
2017/03/30 Python
Python探索之爬取电商售卖信息代码示例
2017/10/27 Python
Python实现的凯撒密码算法示例
2018/04/12 Python
Python中的TCP socket写法示例
2018/05/11 Python
基于python实现简单网页服务器代码实例
2020/09/14 Python
css3 给页面加个半圆形导航条主要利用旋转和倾斜样式
2014/02/10 HTML / CSS
Square Off美国/加拿大:世界上最聪明的国际象棋棋盘
2018/12/06 全球购物
课堂教学改革实施方案
2014/03/17 职场文书
老公保证书范文
2014/04/29 职场文书
基层党组织整改方案
2014/10/25 职场文书
门市房租房协议书
2014/12/04 职场文书
告别网页搜索!教你用python实现一款属于自己的翻译词典软件
2021/06/03 Python
5道关于python基础 while循环练习题
2021/11/27 Python