我需要一种方法来维护textarea中的标签级别,到目前为止这是我使用过的:
<script type="text/javascript">
$("textarea").keydown(function(e) {
var $this, end, start;
if (e.keyCode === 9) {
start = this.selectionStart;
end = this.selectionEnd;
$this = $(this);
$this.val(
$this.val().substring(0, start)
+ "\t" + $this.val().substring(end)
);
this.selectionStart = this.selectionEnd = start + 1;
return false;
}
});
</script>
但这只是插入标签(我发现这个在另一个SO帖子上,所以我真的不知道它做了什么,因为我不是JS专家)
当我点击返回键时,这些标签是否有办法存在?我需要这个,因为我为我的管理面板制作了一个非常简单的代码编辑器(不需要语法高亮或任何东西),它使用TextAreas。
谢谢!
答案 0 :(得分:1)
我绝对不认为这是一件艺术品,我在几分钟之内把它扔在了一起。它需要一些改进,但应该让你朝着正确的方向前进。
全局变量
var keyPressed = null;
var timesPressed = 0;
var tabString = '';
var lastKeyPressed = null;
编辑 - 添加了一个重要步骤,以查看用户是否要破坏标签集。
Dom ready函数
$(function(){
$("textarea").keydown(function(e) {
var $this, end, start;
if (e.keyCode === 9 || e.which === 9) {
start = this.selectionStart;
end = this.selectionEnd;
$this = $(this);
$this.val(
$this.val().substring(0, start)
+ "\t" + $this.val().substring(end)
);
this.selectionStart = this.selectionEnd = start + 1;
keyPressed = e.keyCode || e.which;
timesPressed = timesPressed +1;
return false;
}else if((e.keyCode === 13 || e.which === 13) && keyPressed === 9){
start = this.selectionStart;
end = this.selectionEnd;
$this = $(this);
tabString += '\t';
$this.val(
$this.val().substring(0, start)
+ "\r"+tabString + $this.val().substring(end)
);
this.selectionStart = this.selectionEnd = start + timesPressed +1;
lastKeyPressed = e.keyCode;
return false;
}else if((e.keyCode === 8 || e.which === 8) && lastKeyPressed === 9){
keyPressed = null;
timesPressed = 0;
tabString = '';
}
});
});
我真的没有太多机会去测试它。让我知道它是否太脆弱,我会重新加工它。