为了账号安全,请及时绑定邮箱和手机立即绑定

有没有办法订阅 window.getSelection 的变化?

有没有办法订阅 window.getSelection 的变化?

FFIVE 2023-05-19 19:56:27
我们可以通过 获得一个选择范围window.getSelection()。我想知道是否有办法订阅window.getSelection更改。我想到的唯一方法是使用超时(这显然很糟糕)或订阅每个用户的键\鼠标按下事件并手动跟踪更改。
查看完整描述

2 回答

?
桃花长相依

TA贡献1860条经验 获得超8个赞

使用onselect事件。

function logSelection(event) {

  const log = document.getElementById('log');

  const selection = event.target.value.substring(event.target.selectionStart, event.target.selectionEnd);

  log.textContent = `You selected: ${selection}`;

}


const textarea = document.querySelector('textarea');

textarea.onselect = logSelection;

<textarea>Try selecting some text in this element.</textarea>

<p id="log"></p>


对于特定情况,例如span contenteditable,您可以制作一个 polyfill:


function logSelection() {

  const log = document.getElementById('log');

  const selection = window.getSelection();

  log.textContent = `You selected: ${selection}`;

}


const span = document.querySelector('span');


var down = false;

span.onmousedown = () => { down = true };

span.onmouseup = () => { down = false };

span.onmousemove = () => {

  if (down == true) {

    logSelection();

  }

};

<span contenteditable="true">Try selecting some text in this element.</span>

<p id="log"></p>



查看完整回答
反对 回复 2023-05-19
?
Qyouu

TA贡献1786条经验 获得超11个赞

如果我以正确的方式取消描述,你想知道用户何时开始在页面上进行选择,你可以使用 DOM onselectstart。

document.onselectstart = function() {
  console.log("Selection started!");
};
查看完整回答
反对 回复 2023-05-19
  • 2 回答
  • 0 关注
  • 110 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信