getClientRects()
获取元素的所有矩形区域 - 适用于多行文本
方法说明
getClientRects() 返回元素的多个矩形区域,主要用于多行文本或跨多个盒模型的元素。
const rects = element.getClientRects();
// 返回 DOMRectList 集合
// 遍历所有矩形
for (let i = 0; i < rects.length; i++) {
console.log(rects[i]);
}
💡 与 getBoundingClientRect() 的区别
getBoundingClientRect() 返回的是元素的边界矩形(一个),而
getClientRects() 返回的是所有组成该元素的矩形(多个)。
示例 1:单行元素 vs 多行元素
对比单行和多行元素返回的矩形数量
单行文本
单行元素
矩形数量:
0
这是多行文本示例,它会换行显示多个矩形
多行元素
矩形数量:
0
每个矩形的高度:
-
示例 2:选中文本的矩形
获取选中文本的矩形区域(高亮效果)
选中这段文字的任意部分,我会显示选中文本的矩形区域。getClientRects() 可以精确获取每个选区的位置,这对于实现自定义高亮或其他交互效果非常有用。
选区信息
矩形数量:
-
选区总宽度:
-
💡 实际应用
这个功能常用于实现自定义的文本高亮、标注、评论等功能。比如 Medium 的评论功能就使用了类似的 API。
示例 3:内联元素
内联元素可能产生多个矩形
这是一个跨行显示的内联元素示例,当内联元素跨越多行时,每行都会产生一个独立的矩形区域。
内联元素
矩形数量:
-
总结
- getClientRects() 返回多个矩形(DOMRectList)
- 主要用于多行文本、内联元素等场景
- 与 getBoundingClientRect() 配合使用可以获得更精确的位置信息
- 常用于文本高亮、选区检测等高级功能