Javascript 按backspace键时从文本区域删除整个单词

Javascript 按backspace键时从文本区域删除整个单词,javascript,jquery,Javascript,Jquery,我试图在文本区域中按backspace时删除整个单词,按backspace时应检查当前单词以及另一个单词是否包含@,如果在删除时发现此匹配,则应删除该单词,否则应像默认的backspace那样删除字母 在我的示例中,当使用backspace删除文本时,它应该在一次按键中删除单词user和@test 以下是我的例子: <textarea id="editabletxt">Hello @test user how are you</textarea> $('#edita

我试图在文本区域中按backspace时删除整个单词,按backspace时应检查当前单词以及另一个单词是否包含@,如果在删除时发现此匹配,则应删除该单词,否则应像默认的backspace那样删除字母

在我的示例中,当使用backspace删除文本时,它应该在一次按键中删除单词user和@test

以下是我的例子:

 <textarea id="editabletxt">Hello @test user how are you</textarea>

 $('#editabletxt').keyup(function (e) {
  if (e.keyCode == 8) {
    e.preventDefault();
    var text = $(this).val().split(' ');
    text.splice(text.length-1); 
    $(this).val(text.join(' '));
  }
})
Hello@test user你好吗
$('#editabletxt').keyup(函数(e){
如果(e.keyCode==8){
e、 预防默认值();
var text=$(this.val().split(“”);
文本拼接(文本长度-1);
$(this.val(text.join(“”));
}
})

Fiddle:

我们需要类似的功能,并提出了以下解决方案

$.fn.getCursorPosition=函数(){
var el=$(this.get)(0);
var-pos=0;
var-posEnd=0;
如果('selectionStart'在el中){
pos=el.selectionStart;
posEnd=el.selectionEnd;
}else if(文档中的“选择”){
el.focus();
var Sel=document.selection.createRange();
var SelLength=document.selection.createRange().text.length;
Sel.moveStart('字符',-el.value.length);
pos=Sel.text.length-SelLength;
posEnd=Sel.text.length;
}
返回[pos,posEnd];
};
$.fn.setCursorPosition=函数(开始、结束){
$(this).prop(“selectionStart”,start);
$(this).prop(“selectionEnd”,end);
}
$('#text').keydown(函数(e){
var position=$(this.getCursorPosition();
var deleted='';
var val=$(this.val();
如果(如!=8){
返回true;
}
如果(位置[0]!=位置[1]){
返回true;
}
如果(位置[0]=0){
开始-=1;
}
e、 预防默认值();
$(this).setCursorPosition(开始、结束);
//让newString=val.slice(0,开始)+val.slice(结束,val.length);
//$(this.val)(新闻字符串);
}
});


您好@test user您好
您应该检查电流以及一个以上的单词contains@
:您能解释一下这部分吗?你能给出一些匹配的例子,以及它在每个场景中应该做什么吗?这比看起来要复杂得多。您需要考虑当前光标位置-否则,无论用户在何处编辑,当前代码都会删除行中的最后一个单词。按Ctrl+Backspace。哦,天哪,你试图创建的功能已经存在@Niet:功能可能存在,但这是我第一次听说它。我想,活到老学到老。人类很容易看到“@test user”应该被删除。然而,除非你总是能指望用户名总是有两个单词,否则你怎么才能确定第二个单词是否是名称的一部分呢?例如,“嗨,我是@john smith,我很棒。”-您的程序如何知道删除“@john smith”而不是“@john smith and”或仅删除“@john”。根据这里显示的内容,没有足够的信息来确定这一点。如果搜索括号而不是搜索空格,您将如何执行此操作。你好。如果我把光标移到o的末尾,它只会删除Hello这个词。所以剩下的文本是([5]