Currently I\'m getting the selected text in the browser doing this:
window.getSelection();
Now I need to show a tooltip above that text whe
Before using getBoundingClientRect, you need to know this note:
CSSOM working draft specifies that it returns a ClientRect for each border box
And by this 'standard':
For an inline element, the two definitions are the same. But for a block element, Mozilla will return only a single rectangle.
So if anyone reading this post wants a general solution for more precise positions and layouts of selected texts, I suggest the following approaches:
Option 1: Find exact starting and and ending point of texts by inserting invisible elements. Then calculate selected line rectangles with extracted computed line height and container width. APIs in use: window.getComputedStyle.
Option 2: Wrap each text with a carefully styled inline element, extracting layout of each box, and merge results into lines.
For option 2, rangeblock is an existing implementation with an easy API which gives you the absolution layout of each line of text:
let block = rangeblock.extractSelectedBlock(window, document);
console.info("Text layout: " + JSON.stringify(block.dimensions));
// output: Text layout: {Left: 100, Top: 90, Width: 200, Height: 50}