window.getSelection().baseOffset 错误

window.getSelection().baseOffset is wrong

如果您 select 下面的任何文本从第一个字符 H 开始,它会说 selection 的 baseOffset5。在我的真实案例中,它显示 7。我该如何纠正?

setInterval(()=>{
  console.log(window.getSelection().baseOffset);
}, 250);
<!DOCTYPE html>
<html>
  <body>
    <div id='main'data-alignment="center">
    Hello World!
    </div>
  </body>
</html>

结果正确,<div id='main'data-alignment="center">末尾和H之间正好有5个space个字符,这些将被计算为偏移量。

为避免这种情况,您可以将 TextNode 包装在 <span> 元素中,这样就没有偏移量了。

此外,baseOffsetstill not in the official specs, better use anchorOffset,我认为它做的事情大致相同(但所有浏览器都支持)。

document.onselectionchange = ()=>{
  console.log(window.getSelection().anchorOffset);
};
<!DOCTYPE html>
<html>
  <body>
    <div id='main'data-alignment="center">
      <span>Hello World!</span>
    </div>
  </body>
</html>