javascript - 从文本中间捕获最后输入的单词

标签 javascript jquery html

我需要捕获用户在 div/textarea 中输入的最后一个词。 当这个词是最后一个词时,这不是问题。但是,如果用户在段落内部(中间)输入单词会怎样?

现在我有这段代码:

<div contenteditable="true">Add text here</div>
<script>
    $("div").on("keyup", function(e){
      if (e.keyCode === 0 || e.keyCode === 32) {
        var words = $(this).text().trim().split(' '),
            lastWord = words[words.length - 1];
        console.log(lastWord);
        }
    });
</script>

它在用户点击空格后获取文本的最后一个词。

最佳答案

使用文本的子字符串直到光标位置,您可以使用 window.getSelection 函数获取:

$('div').on('keyup', function (ev) {
  if (ev.keyCode <= 32) { // Can be extended to all non-alphanumeric.
    var el = ev.target;
    var selection = getSelection();
    var range = selection.getRangeAt(0);
    var line = range.endContainer.nodeValue || '';
    var cursor = selection.focusOffset;
    if (!line) {
      var childNodes = selection.anchorNode.parentNode.childNodes;
      for (var i = 0; i < childNodes.length; i++) {
        if (childNodes[i] == selection.anchorNode) {break;}
        if (childNodes[i].outerHTML) {
          if (childNodes[i].innerText) {line += ' ' + childNodes[i].innerText.trim();}
        } else if (childNodes[i].nodeType == 3) {
          if (childNodes[i].textContent) {line += ' ' + childNodes[i].textContent.trim();}
        }
      }
      line = line.trim();
      cursor = line.length;
    }
    var words = line.replace(/\W+/gm, ' ').substring(0, cursor).trim().split(' ');
    var lastWord = words[words.length - 1];
    console.log(lastWord);
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div contenteditable="true" style="min-height: 80px;">
  Add text here<br/>
  Or do it in this line<br/>
  newline
</div>

关于javascript - 从文本中间捕获最后输入的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45119902/

相关文章:

javascript - 在 javascript 中使用 PHP 值 - 在alert() 中工作,但在 getelementbyid 中不工作

javascript - 如何使用 AngularJS 的范围值生成自定义 html 标签的属性

javascript - 单击时隐藏/显示子元素

jquery - multipart=true 和显示上传百分比之间的plupload 连接

javascript - 将客户端模板与主布局分开的好方法

javascript - 使用 RSA 技术在 JavaScript 中加密字符串并在 PHP 中解密

javascript - 在移动网络浏览器上自动显示软键盘

javascript - Onclick 事件之后的 Mousemove 事件

python - Flask 不加载 CSS 文件..?

javascript - 如何让文本动画看起来好像在另一层下面