window.getSelection().baseOffset 错误
window.getSelection().baseOffset is wrong
如果您 select 下面的任何文本从第一个字符 H
开始,它会说 selection 的 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>
结果正确,<div id='main'data-alignment="center">
末尾和H
之间正好有5个space个字符,这些将被计算为偏移量。
为避免这种情况,您可以将 TextNode 包装在 <span>
元素中,这样就没有偏移量了。
此外,baseOffset
是 still 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>
如果您 select 下面的任何文本从第一个字符 H
开始,它会说 selection 的 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>
结果正确,<div id='main'data-alignment="center">
末尾和H
之间正好有5个space个字符,这些将被计算为偏移量。
为避免这种情况,您可以将 TextNode 包装在 <span>
元素中,这样就没有偏移量了。
此外,baseOffset
是 still 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>