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