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 chosen动态设置值实例介绍
Aug 08 Javascript
append和appendTo的区别以及appendChild用法
Dec 24 Javascript
学习JavaScript设计模式(接口)
Nov 26 Javascript
Javascript将JSON日期格式化
Aug 23 Javascript
Node.js包管理器Yarn的入门介绍与安装
Oct 17 Javascript
详解基于javascript实现的苹果系统底部菜单
Dec 02 Javascript
jquery实现左右滑动式轮播图
Mar 02 Javascript
js获取json中key所对应的value值的简单方法
Jun 17 Javascript
JavaScript运动框架 多物体任意值运动(三)
May 17 Javascript
关于JS与jQuery中的文档加载问题
Aug 22 jQuery
layui select获取自定义属性方法
Aug 15 Javascript
微信小程序工具函数封装
Oct 28 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
怎样在UNIX系统下安装php3
2006/10/09 PHP
PHP开发中常用的8个小技巧
2008/08/27 PHP
PHP获取当前文件所在目录 getcwd()函数
2009/05/13 PHP
php使用curl存储cookie的示例
2014/03/31 PHP
用js生产批量批处理执行命令
2008/07/28 Javascript
Javascript的闭包
2009/12/31 Javascript
多种方法实现JS动态添加事件
2013/11/01 Javascript
关闭ie窗口清除Session的解决方法
2014/01/10 Javascript
Javascript中的回调函数和匿名函数的回调示例介绍
2014/05/12 Javascript
JavaScript中的fontsize()方法使用详解
2015/06/08 Javascript
js编写三级联动简单案例
2016/12/21 Javascript
javascript实现延时显示提示框效果
2017/06/01 Javascript
JavaScript实现各种排序的代码详解
2017/08/28 Javascript
基于zepto.js实现登录界面
2017/10/09 Javascript
关于vue中 $emit的用法详解
2018/04/12 Javascript
原生JS实现$.param() 函数的方法
2018/08/10 Javascript
解决mui框架中switch开关通过js控制开或者关状态时小圆点不动的问题
2019/09/03 Javascript
详解JS深拷贝与浅拷贝
2020/08/04 Javascript
vue路由切换时取消之前的所有请求操作
2020/09/01 Javascript
vue+Element-ui实现登录注册表单
2020/11/17 Javascript
Python 提取dict转换为xml/json/table并输出的实现代码
2016/08/28 Python
详解基于django实现的webssh简单例子
2018/07/17 Python
对pandas中时间窗函数rolling的使用详解
2018/11/28 Python
纯css3实现效果超级炫的checkbox复选框和radio单选框
2014/09/01 HTML / CSS
尼克松手表官网:Nixon手表
2019/03/17 全球购物
英国在线定做百叶窗网站:Make My Blinds
2020/08/17 全球购物
买房子个人收入证明
2014/01/16 职场文书
高一英语教学反思
2014/01/22 职场文书
毕业生找工作自荐书
2014/06/30 职场文书
2014最新毕业证代领委托书
2014/09/26 职场文书
2014年远程教育工作总结
2014/12/09 职场文书
校本课程教学计划
2015/01/19 职场文书
2015年采购工作总结
2015/04/10 职场文书
golang日志包logger的用法详解
2021/05/05 Golang
MySQL详解进行JDBC编程与增删改查方法
2022/06/16 MySQL
vscode远程免密登入Linux服务器的配置方法
2022/06/28 Servers