如何使用javascript检测textarea内新行开头是否存在特定字符串?

时间:2017-04-03 07:58:04

标签: javascript

我有一个文本区域,我需要检测是否'+'后面跟着每个新行开头的空格字符。我可以在keyDown事件上获取keyCode,但是这将返回keyCode,即使该字符是出现在string的中间。只有当特定字符组合位于文本区域中新行的开头时才需要调用函数。可以任何人建议我如何执行此操作吗?

1 个答案:

答案 0 :(得分:1)

当用户将字符串+(space)放入textarea并检查它的位置时,您需要拦截。

您可以查看最后一个数字键的以前的字符,所以:

  • 收听按键事件
  • 检查最后一个密钥是否为space(因为这是您要查找的序列的最后一个字符)
  • 然后检查之前的字符,在您的情况下为newLine (\n),后跟字符串"+ "

$("#test").keydown(function(e){
  if(e.key==' ')
    console.log(startsWith(e.target, '\n+'));
});

/*
  Returns true when:
  - text in 'target' starts with 'exp'
  - starting by current cursor position
*/
function startsWith(target, exp){
  var expLen = exp.length;
  var str = $(target).val();
  if(target.selectionStart > expLen){
    str = $(target).val();
  } else {
    if("\n" + $(target).val() == exp){
      return true;
    }
  }
  
  var start = target.selectionStart - expLen;
    
  var subStr = $(target).val().substr(start, expLen);
  if(subStr==exp) {
    return true;
  } else {
    return false;
  }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea id="test"></textarea>

注意: 我添加了以下条件

if(target.selectionStart > expLen){
  str = $(target).val();
} else {
  if("\n" + $(target).val() == exp){
    return true;
  }
}

在textarea文本的开头找到“+”表达式。

我希望它可以帮到你。再见。