Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在textarea中模拟back选项卡_Javascript_Jquery_Html - Fatal编程技术网

Javascript 如何在textarea中模拟back选项卡

Javascript 如何在textarea中模拟back选项卡,javascript,jquery,html,Javascript,Jquery,Html,我试图在文本区域中模拟制表符,到目前为止制表符正向工作,但我不太确定如何使反向工作。任何关于如何做到这一点的建议,或者更好的方法都会很有帮助 $('textarea').on('keydown mousedown', function(e){ var val = this.value, start = this.selectionStart, end = this.selectionEnd; if (e.shiftKey) { console.log('s

我试图在文本区域中模拟制表符,到目前为止制表符正向工作,但我不太确定如何使反向工作。任何关于如何做到这一点的建议,或者更好的方法都会很有帮助

$('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')。打开('keydown mousedown',函数(e){
var val=此.val值,
开始=此。选择开始,
end=this.selectionEnd;
if(e.which==9 | e.keyCode==9){
e、 预防默认值();
如果(如换档键){
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;
此.setSelectionRange(开始-1,结束-1);
}
}否则{
this.value=val.substring(0,开始)+'\t'+val.substring(结束);
此.setSelectionRange(开始+1,结束+1);
}
}
})

在此处添加一些行,对其进行制表,然后尝试取消制表。

如果我理解正确,您是否希望编辑文本区域以删除行首有“\t”字符?你的目标浏览器是什么?在IE8之前,您可能需要处理文本范围,否则您可以使用selectionStart/selectionEnd查找您所在的行并删除该行的第一个\t实例。这真的很重要吗?我这样问是因为您正在覆盖浏览器的预期行为,我不会轻易忽略这一点。作为一个辅助项目,我正在构建一个代码编辑器,这将只覆盖每个代码面板中使用的文本区域。上面的代码只是一个示例。最后的代码不会针对每个文本区域。谢谢你的回答!在开始这个项目之前,我还没有听说过contenteditable attr,我会研究一下。使用一个或另一个有优点/缺点吗?contenteditable元素允许编辑其中的任何文本,但仍然允许在其中添加标记。因此,您将能够实现语法高亮显示和其他功能,这些功能对于代码编辑器非常有用,而对于textarea来说是不可能的。现在调查一下。