Javascript HTML段落中存在空锚点时,范围getClientRects()、getBoundingClientRect()错误

Javascript HTML段落中存在空锚点时,范围getClientRects()、getBoundingClientRect()错误,javascript,html,range,getclientrect,getboundingclientrect,Javascript,Html,Range,Getclientrect,Getboundingclientrect,我发现getClientRects[getBoundingClientRect]可能有一种奇怪的行为: 请看以下HTML代码: <p>Text here... word1<a id='id' class='class'/>word2 Other multiline Text here...</p> [请注意,a元素内部没有文本,我只测试了这种代码,不知道其他安排是否会产生相同的“bug”。] 假设,当用户在p“estate”中选择一个包含锚点的范围(如wor

我发现getClientRects[getBoundingClientRect]可能有一种奇怪的行为:

请看以下HTML代码:

<p>Text here... word1<a id='id' class='class'/>word2 Other multiline Text here...</p>
[请注意,a元素内部没有文本,我只测试了这种代码,不知道其他安排是否会产生相同的“bug”。]

假设,当用户在p“estate”中选择一个包含锚点的范围(如word1 word2)时,JS函数存储开始/结束元素和偏移量。 下次,另一个函数创建具有这些边界的范围时。 但是,如果在该范围内调用getClientRects,则会产生除预期的两个之外的许多矩形:数组的第一个和最后一个矩形确实是预期的,但是,在它们之间,有许多矩形实际上覆盖了整个p元素。 [range.getBoundingClientRect也受影响。]
如何避免这个问题?

一些浏览器将把标签视为打开的标签,并在元素的其余部分关闭它。将其更改为。@Gil这可能只发生在a上,还是也发生在其他标记上?其他一些标记也会发生,但我从来没有仔细检查过其他元素,这也取决于浏览器的类型/版本。无论如何,添加结束标记不会使代码过度拥挤,并确保与所有浏览器兼容。元素的原因是什么?您是否混淆了用户选择的锚定,即选择的起点与aka锚定元素?