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 function使用心得
May 10 Javascript
JS选中checkbox后获取table内一行TD所有数据的方法
Jul 01 Javascript
Vue.js报错Failed to resolve filter问题的解决方法
May 25 Javascript
Ajax分页插件Pagination从前台jQuery到后端java总结
Jul 22 Javascript
原生js实现ajax方法(超简单)
Sep 20 Javascript
AngularJS中$injector、$rootScope和$scope的概念和关联关系深入分析
Jan 19 Javascript
完美实现js拖拽效果 return false用法详解
Jul 28 Javascript
JavaScript设计模式之装饰者模式定义与应用示例
Jul 25 Javascript
解决Vue.js父组件$on无法监听子组件$emit触发事件的问题
Sep 12 Javascript
JS实现盒子跟着鼠标移动及键盘方向键控制盒子移动效果示例
Jan 29 Javascript
layui表格 列自动适应大小失效的解决方法
Sep 06 Javascript
JS图片预加载三种实现方法解析
May 08 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公用函数列表[正则]
2007/02/22 PHP
简单PHP上传图片、删除图片实现代码
2010/05/12 PHP
destoon官方标签大全
2014/06/20 PHP
Smarty中的注释和截断功能介绍
2015/04/09 PHP
PHP正则表达式过滤html标签属性(DEMO)
2016/05/04 PHP
JS实现的一个简单的Autocomplete自动完成例子
2014/04/16 Javascript
ajaxFileUpload.js插件支持多文件上传的方法
2014/09/02 Javascript
javascript使用switch case实现动态改变超级链接文字及地址
2014/12/16 Javascript
jQuery实现瀑布流的取巧做法分享
2015/01/12 Javascript
nodejs中使用多线程编程的方法实例
2015/03/24 NodeJs
JS将滑动门改为选项卡(需鼠标点击)的实现方法
2015/09/27 Javascript
详解javascript传统方法实现异步校验
2016/01/22 Javascript
JavaScript 对象字面量讲解
2016/06/06 Javascript
JS实现图片点击后出现模态框效果
2017/05/03 Javascript
AjaxUpLoad.js实现文件上传
2018/03/05 Javascript
jQuery的Ajax接收java返回数据方法
2018/08/11 jQuery
如何安装控制器JavaScript生成插件详解
2018/10/21 Javascript
vue制作抓娃娃机的示例代码
2020/04/17 Javascript
解决vue+router路由跳转不起作用的一项原因
2020/07/19 Javascript
Python实现随机选择元素功能
2017/09/14 Python
Python中super函数的用法
2017/11/17 Python
python格式化输出保留2位小数的实现方法
2019/07/02 Python
Python pip 安装与使用(安装、更新、删除)
2019/10/06 Python
python爬虫beautifulsoup库使用操作教程全解(python爬虫基础入门)
2021/02/19 Python
详解css3中 text-fill-color属性
2019/07/08 HTML / CSS
美国最大的网络男装服装品牌:Bonobos
2017/05/25 全球购物
智能钱包:Ekster
2019/11/21 全球购物
大学英语演讲稿(中英文对照)
2014/01/14 职场文书
服装电子商务创业计划书
2014/01/30 职场文书
《老山界》教学反思
2014/04/08 职场文书
科技节口号
2014/06/19 职场文书
2014年个人年终总结
2015/03/09 职场文书
中秋节感想
2015/08/10 职场文书
MySQL学习总结-基础架构概述
2021/04/05 MySQL
详解MySql中InnoDB存储引擎中的各种锁
2022/02/12 MySQL
Java虚拟机内存结构及编码实战分享
2022/04/07 Java/Android