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 相关文章推荐
ExtJs 表单提交登陆实现代码
Aug 19 Javascript
js用typeof方法判断undefined类型
Jul 15 Javascript
jQuery中append()方法用法实例
Dec 25 Javascript
javascript实现带下拉子菜单的导航菜单效果
May 14 Javascript
js实时获取并显示当前时间的方法
Jul 31 Javascript
浅谈Javascript中Object与Function对象
Sep 26 Javascript
js 获取当前web应用的上下文路径实现方法
Aug 19 Javascript
JS自定义混合Mixin函数示例
Nov 26 Javascript
轻松理解Javascript变量的相关问题
Jan 20 Javascript
浅谈js中的变量名和函数名重名
Feb 13 Javascript
vue+vuex+axios实现登录、注册页权限拦截
Mar 09 Javascript
jQuery插件实现的日历功能示例【附源码下载】
Sep 07 jQuery
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
Codeigniter注册登录代码示例
2014/06/12 PHP
推荐一款PHP+jQuery制作的列表分页的功能模块
2014/10/14 PHP
php实现用于删除整个目录的递归函数
2015/03/16 PHP
基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能
2017/01/24 PHP
编写兼容IE和FireFox的脚本
2009/05/18 Javascript
利用location.hash实现跨域iframe自适应
2010/05/04 Javascript
ExtJS PropertyGrid中使用Combobox选择值问题
2010/06/13 Javascript
利用NodeJS和PhantomJS抓取网站页面信息以及网站截图
2013/11/18 NodeJs
js获取ajax返回值代码
2014/04/30 Javascript
jQuery实现多级下拉菜单jDropMenu的方法
2015/08/28 Javascript
jQuery ztree实现动态树形多选菜单
2016/08/12 Javascript
Javascript 实现微信分享(QQ、朋友圈、分享给朋友)
2016/10/21 Javascript
javascript history对象详解
2017/02/09 Javascript
微信小程序左右滑动切换页面详解及实例代码
2017/02/28 Javascript
vue2.0项目中使用Ueditor富文本编辑器示例代码
2017/08/14 Javascript
Node.js笔记之process模块解读
2018/05/31 Javascript
node.js express框架简介与实现
2019/07/23 Javascript
javascript实现简单打字游戏
2019/10/29 Javascript
结合axios对项目中的api请求进行封装操作
2020/09/21 Javascript
[08:04]TI4西雅图DOTA2前线报道 海涛探访各路人马
2014/07/09 DOTA
[40:55]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#4Newbee VS Fnatic
2016/03/03 DOTA
[50:21]Liquid vs Winstrike 2018国际邀请赛小组赛BO2 第二场
2018/08/19 DOTA
[49:35]KG vs SECRET 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
利用Python和OpenCV库将URL转换为OpenCV格式的方法
2015/03/27 Python
python使用logging模块发送邮件代码示例
2018/01/18 Python
python 从文件夹抽取图片另存的方法
2018/12/04 Python
使用Django2快速开发Web项目的详细步骤
2019/01/06 Python
Python包,__init__.py功能与用法分析
2020/01/07 Python
纯css3实现走马灯效果
2014/12/26 HTML / CSS
King Apparel官网:英国街头服饰品牌
2019/09/05 全球购物
电影T恤、80年代T恤和80年代服装:TV Store Online
2020/01/05 全球购物
企业读书活动总结
2014/06/30 职场文书
贪污受贿检讨书范文
2014/11/19 职场文书
业务员辞职信范文
2015/03/02 职场文书
三下乡活动心得体会
2016/01/23 职场文书
Redis做数据持久化的解决方案及底层原理
2021/07/15 Redis