检测到某个单词刚刚在Textarea中输入

时间:2011-11-21 02:22:56

标签: javascript regex search autocomplete textarea

考虑到EditArea和CodeMirror的自动完成功能,我想知道是否像Dreamweaver一样,有一种方法来检测您输入的最后一个单词是否在某个列表中,然后提供相同类型的建议框但是使用函数的参数。我想你会在整个字段上使用正则表达式或者可能split()整个事物(或当前行)然后使用数组的length属性来查找文本的最后一位,然后做一些涉及indexOf的事情操作;然而,这似乎会有点资源密集。这几乎看起来我已经回答了我自己的问题,但它总是有助于充分解释一个人的窘境,特别是公开。有一个比我更好的解决方案。我很感激任何意见。谢谢。

1 个答案:

答案 0 :(得分:3)

在对象中放置要匹配的单词列表,让文本或选项显示为值。然后在keyup或keypress上,您可以使用以下函数获取文本区域的最后一个单词:

function showLastWord(id){
  var el = document.getElementById(id);
  var lastWord = el.value.match(/\w+$/);
  return lastWord? lastWord[0] : '';
}

然后检查单词是否在列表中并做适当的事情。

修改

一个小例子是:

<textarea onkeyup="showHelp(this);"></textarea>
<script>

var getLastWord = (function() {
    re = /\w+$/;
    return function (s){
      var lastWord = s.match(re);
      return lastWord? lastWord[0] : '';
    }
}());

var keyWords = {foo:'foo was typed',bar:'bar was typed'};

function showHelp(el) {
  var lastWord = getLastWord(el.value);

  // Check for matching own property of keyWords
  if (keyWords.hasOwnProperty(lastWord)) {

    // Do stuff
    console.log(keyWords[lastWord]);
  }
}