Javascript 键入字符或单词后修改它

Javascript 键入字符或单词后修改它,javascript,jquery,dom,textarea,Javascript,Jquery,Dom,Textarea,假设我正在文本区域中键入单词hello。在我键入hello之后,我将如何选择刚刚键入的单词并修改它。例如,在我键入单词hello后,在不点击空格键的情况下,识别该单词是hello,并在其前后添加和环绕该单词。所以最后的结果是hello,我知道textarea不接受HTML,但为了便于讨论。我能想到的唯一方法是在用户每次按键时运行一个函数,然后将textarea的内容添加到数组中,并在空格处打断它。但这需要空间,而非交叉引用数组需要时间。是否有任何方法可以轻松地执行此操作?您可以使用此功能收听空格

假设我正在文本区域中键入单词hello。在我键入hello之后,我将如何选择刚刚键入的单词并修改它。例如,在我键入单词hello后,在不点击空格键的情况下,识别该单词是hello,并在其前后添加和环绕该单词。所以最后的结果是hello,我知道textarea不接受HTML,但为了便于讨论。我能想到的唯一方法是在用户每次按键时运行一个函数,然后将textarea的内容添加到数组中,并在空格处打断它。但这需要空间,而非交叉引用数组需要时间。是否有任何方法可以轻松地执行此操作?

您可以使用此功能收听空格键的按下

$("textarea").keyup(function(event)
{ 
    var c= String.fromCharCode(event.keyCode);
    var isWhiteSpace = c.match(/\s/);
});
您还可以使用and函数来完成问题后半部分中描述的内容

编辑:以下是关于这个想法的更多信息:

而JS:

$(document).ready(function() {
    function hasHtml(str)
    {
        return str.match(/<b>.*?<\/b>/);
    }

    function formatStr(str)
    {
        var bits = str.split(/\s+/);
        var last = bits.pop();
        if(!last.match(/^\s*$/))
        {
            if(!hasHtml(last))
            {
                bits.push('<b>'+last+'</b>');
            }
        }
        return bits.join(' ');
    }

    setInterval(function() {
        var str = formatStr($('.observed').val());
        $('.formatted').html(str);
    }, 1000);
});

如果你想让每个按键在你打字时进行替换,那么你肯定必须捕捉每个按键,但你不必测试空格。当我在IE中测试它时,以下方法起到了作用:

$(function() {
   $("#yourtextareaidhere").keyup(function(e) {
      var updatedText = this.value.replace(
                               /(^|[^>])(hello)($|[^<])/gi, "$1<b>$2</b>$3");
      if (updatedText != this.value)
         this.value = updatedText;
   });
});

基本上,在每个按键上,这都会替换一个字符串,以获取所有未被>包围的hello实例,我不理解您所说的内容,但这并不能回答我的问题。我知道如何倾听太空新闻,但这正是我试图避免的。我希望能够在空格键被识别之前识别出字符串hit@JonahAllibone您可以使用setInterval执行函数并充当字段的观察者。您可以跟踪字段的长度,作为检查是否应格式化字符串的一种方法。@JonahAllibone我发布了一个我所说的示例。如果你需要存储格式化的位,你可以使用啊,现在你非常接近了。但我希望更新后的值显示在您正在键入的同一文本框中。基本上,它会改变你键入的单词,当你键入它们只是为了清楚,你想要的功能是,在文本区域中键入字母o,将我说的“地狱”改为“我说你好”?是的。确切地但在某种程度上,是的,我不太理解你的RegExp。因为我用了一个例子。它很可能会变成一个或一个你知道关于可编辑div的内容吗?因为我也想把它用在其中一个,而且效果很好!但是在它改变文本之后,它失去了焦点如果你想要一个或而不是,那么为什么你不在问题中这样说,然后把它们放进去,而不是放在我代码中的这个字符串中:$1$2$3。至于正则表达式是如何工作的,我相信你可以在Google上找到很多教程,或者看一看——注意捕获括号,说明替换字符串中$1语法的含义。我对可编辑div做的很少,但我的回答已经提到把焦点问题留给你了……它在文本区域工作得很好,但在可编辑div中,它的行为真的很奇怪。真的很奇怪。对不起,我很少接触可编辑的div,所以我不知道可能是什么问题。我相信我已经对最初提出的问题给出了一个合理的答案,所以为了获得关于可编辑div焦点问题的进一步帮助,您应该发布另一个问题或更新此问题。
$(function() {
   $("#yourtextareaidhere").keyup(function(e) {
      var updatedText = this.value.replace(
                               /(^|[^>])(hello)($|[^<])/gi, "$1<b>$2</b>$3");
      if (updatedText != this.value)
         this.value = updatedText;
   });
});