首页 > 解决方案 > window.getSelection().baseOffset 错误

问题描述

如果您选择下面从第一个字符开始的任何文本H,它会说baseOffset选择的是5。在我的真实案例中,它说7。我该如何纠正?

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

标签: javascripthtmlgetselection

解决方案


结果是正确的,你在 end<div id='main'data-alignment="center">和之间正好有 5 个空格字符H,这些将被计为偏移量。

为避免这种情况,您可以将 TextNode 包装在一个<span>元素中,以便没有偏移。

此外,官方规范baseOffset仍然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>


推荐阅读