javascript - 如何模拟文本区域中的后退标签

标签 javascript jquery html

我正在尝试模拟文本区域中的 Tab 键,到目前为止 Tab 键前移有效,但我不太确定如何使 backtab 有效。有关如何执行此操作或更好的方法的任何建议都会有所帮助。

$('textarea').on('keydown mousedown', function(e){
  var val = this.value,
      start = this.selectionStart,
      end = this.selectionEnd;
  if (e.shiftKey) {
    console.log('shift')
    if (e.which == 9 || e.keyCode == 9) {
      console.log('shift + tab')
      e.preventDefault();
      this.value = val.substring(0, start) + '\t' + val.substring(end);
    }
  } else if (e.which == 9 || e.keyCode == 9) {
    console.log('tab')
    e.preventDefault();
    this.value = val.substring(0, start) + '\t' + val.substring(end);
  }
})

最佳答案

这可能会让您入门。

$('textarea').on('keydown mousedown', function(e) {
  var val   = this.value,
      start = this.selectionStart,
      end   = this.selectionEnd;

  if (e.which == 9 || e.keyCode == 9) {
    e.preventDefault();
    
    if (e.shiftKey) {
      var firstTabPoint = val.lastIndexOf('\n', start) + 1;

      if (val.substring(firstTabPoint, firstTabPoint + 1) == '\t') {
        var startString = val.substr(0, firstTabPoint);
        var endString = val.substr(firstTabPoint + 1);

        this.value = startString + endString;
        this.setSelectionRange(start - 1, end - 1);
      }
    } else {
      this.value = val.substring(0, start) + '\t' + val.substring(end);
      this.setSelectionRange(start + 1, end + 1);
    }
  }
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea rows="20" cols="100">
Add some lines in here, tab them, and then try untabbing.
</textarea>

作为旁注,如果您正在制作文本编辑器应用程序,您可能会查看属性 contenteditable="true"

关于javascript - 如何模拟文本区域中的后退标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41291823/

相关文章:

javascript - 无法使用 data() 更改数据值;

javascript - 使用 jQuery 根据浏览器宽度加载特定内容

javascript - scrollIntoview jQuery 插件不执行任何操作

javascript - 从 tinymce 中的浏览器上下文菜单捕获 'Cut' 事件

javascript - 如何根据在javascript中选择单选按钮的下拉列表在文本框中显示相应的值?

jQuery:如何在第一个事件完成之前阻止用户触发相同的事件

javascript - 在窗口底部创建一个固定的可折叠 Accordion

javascript - 如何使用 emscripten 调用第 3 方 javascript 库?

javascript - jQuery 信用卡输入格式

javascript - 通过可点击的链接传递撇号或双引号时遇到问题