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 相关文章推荐
Javascript调用C#代码
Jan 17 Javascript
深入理解javascript原型链和继承
Sep 23 Javascript
Node.js实用代码段之获取Buffer对象字节长度
Mar 17 Javascript
JS实现的适合做faq或menu滑动效果示例
Nov 17 Javascript
实现隔行换色效果的两种方式【实用】
Nov 27 Javascript
JS 实现分页打印功能
May 16 Javascript
Bootstrap 实现表格样式、表单布局的实例代码
Dec 09 Javascript
vue返回上一页面时回到原先滚动的位置的方法
Dec 20 Javascript
使用VUE+iView+.Net Core上传图片的方法示例
Jan 04 Javascript
浅谈js闭包理解
Mar 28 Javascript
微信小程序如何访问公众号文章
Jul 08 Javascript
javascript头像上传代码实例
Sep 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
第1次亲密接触PHP5(1)
2006/10/09 PHP
用windows下编译过的eAccelerator for PHP 5.1.6实现php加速的使用方法
2007/09/30 PHP
php json与xml序列化/反序列化
2013/10/28 PHP
线路分流自动跳转代码;希望对大家有用!
2006/12/02 Javascript
Jquery获取元素的父容器对象示例代码
2014/02/10 Javascript
jQuery中dequeue()方法用法实例
2014/12/29 Javascript
js实现简易的单数字随机抽奖(0-9)
2020/03/19 Javascript
Vue.js基础知识小结
2017/01/13 Javascript
详解JS数据类型的值拷贝函数(深拷贝)
2017/07/13 Javascript
基于JavaScript实现弹幕特效
2020/08/27 Javascript
vue 插值 v-once,v-text, v-html详解
2018/01/19 Javascript
vue项目中导入swiper插件的方法
2018/01/30 Javascript
vue-cli 默认路由再子路由选中下的选中状态问题及解决代码
2018/09/06 Javascript
JavaScript对象的特性与实践应用深入详解
2018/12/30 Javascript
JavaScript 反射和属性赋值实例解析
2019/10/28 Javascript
bootstrap实现tab选项卡切换
2020/08/09 Javascript
jQuery实现动态加载瀑布流
2020/09/01 jQuery
Python的内存泄漏及gc模块的使用分析
2014/07/16 Python
Python3连接MySQL(pymysql)模拟转账实现代码
2016/05/24 Python
python中requests使用代理proxies方法介绍
2017/10/25 Python
python之matplotlib学习绘制动态更新图实例代码
2018/01/23 Python
python爬虫获取百度首页内容教学
2018/12/23 Python
分析运行中的 Python 进程详细解析
2019/06/22 Python
Python 通过截图匹配原图中的位置(opencv)实例
2019/08/27 Python
基于python爬取链家二手房信息代码示例
2020/10/21 Python
html5配合css3实现带提示文字的输入框(摆脱js)
2013/03/08 HTML / CSS
一款利用html5和css3动画排列人物头像的实例演示
2014/12/05 HTML / CSS
微软新西兰官方网站:Microsoft New Zealand
2018/08/17 全球购物
Myholidays美国:在线旅游网站
2019/08/16 全球购物
如何进行Linux分区优化
2016/09/13 面试题
大学校庆邀请函
2014/01/11 职场文书
法学专业自我鉴定
2014/02/05 职场文书
煤矿百日安全活动总结
2015/05/07 职场文书
医院合作意向书范本
2015/05/08 职场文书
总经理2015中秋节致辞
2015/07/29 职场文书
Java反应式框架Reactor中的Mono和Flux
2021/07/25 Java/Android