javascript - 如何将选择修改为上一个和下一个空格或换行

标签 javascript jquery selection

$('button').on('click', function(){
const selection = window.getSelection();
selection?.modify('move', 'backward', 'word');
selection?.modify('extend', 'forward', 'word');
console.log(selection.toString());
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<pre contenteditable>
https://www.youtube.com/watch?v=vEQ8CXFWLZU
 https://www.youtube.com/watch?v=vEQ8CXFWLZU
lorem ipsum https://www.youtube.com/watch?v=vEQ8CXFWLZU
https://www.youtube.com/watch?v=vEQ8CXFWLZU lorem ipsum
 https://www.youtube.com/watch?v=vEQ8CXFWLZU lorem ipsum
</pre>
<button>CLICK</button>

将光标置于 YouTube 网址内
单击按钮我需要控制台中的整个网址,而不仅仅是一部分
换句话说,我需要这样的东西:

selection?.modify('move', 'backward', 'to the previous space or new line');
selection?.modify('extend', 'forward', 'to the next space or new line');

最佳答案

借助正则表达式,您可以设置规则。

$('button').on('click', function() {
  const selection = window.getSelection();

  let [bws, aws] = [false, false];

  let [
    [bn, bo],
    [an, ao]
  ] = [
    [selection.anchorNode, selection.anchorOffset],
    [selection.focusNode, selection.focusOffset]
  ]
  .sort(function(aa, bb) {
    return aa[1] - bb[1];
  });

  while (!bws && 0 < bo) {
    selection.setBaseAndExtent(bn, --bo, an, ao);

    if ((bws = (-1 !== selection.toString().search(/\r?\n| /)))) {
      ++bo;
    }
  }


  while (!aws && an.length >= ao + 1) {
    selection.setBaseAndExtent(bn, bo, an, ++ao);
    if ((aws = (-1 !== selection.toString().search(/\r?\n| /)))) {
      --ao;
    }
  }
  selection.setBaseAndExtent(bn, bo, an, ao);
  console.log(selection.toString());
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<pre contenteditable>
https://www.youtube.com/watch?v=vEQ8CXFWLZU
 https://www.youtube.com/watch?v=vEQ8CXFWLZU
lorem ipsum https://www.youtube.com/watch?v=vEQ8CXFWLZU
https://www.youtube.com/watch?v=vEQ8CXFWLZU lorem ipsum
 https://www.youtube.com/watch?v=vEQ8CXFWLZU lorem ipsum
</pre>
<button>CLICK</button>

关于javascript - 如何将选择修改为上一个和下一个空格或换行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76478981/

相关文章:

javascript - 使用 jquery 突出显示选定的文本

javascript - WinJS.Promise 无法正常工作

javascript - 向 css 添加绝对路径会导致 Gecko Engine 无法呈现页面

javascript - 我在一个页面中创建多个 slider ...但如果幻灯片的数量彼此不同,则无法获得正确的停止位置

javascript - 如果我放置日期选择器函数,数据表根本不起作用

javascript - 一个接一个地淡入淡出框

javascript - 保留下拉选择吗?我究竟做错了什么?

css-selectors - css 删除选择/突出显示文本上的文本阴影 (mozilla)

javascript - 具有状态 (.active) 的元素的 getAttribute

javascript - 当涉及模式时,如何将 <a href..> 的值/名称检索到 PHP 变量