问题 如何使用javascript获取HTML文本节点的位置和大小?


例如,

<div style="width:100px;text-align:center">text</div>

我想得到的位置和大小 text 文本节点,而不是它 div 包装。可能吗?


6453
2018-04-25 07:49


起源

您可以获得div位置,然后您将必须添加任何顶部和左侧填充和边框。 - Asken
@ user125697: text 是一个节点,而不是一个元素。它不重复那个问题。 - benjaminchanming
这个 可以帮到你 - anpsmn
@Asken:如何获取填充和边框信息?我无法使用Chrome的检查器找到其填充和边框值。 - benjaminchanming
这不是重复的。查找文本节点的位置/尺寸与使用元素执行相同操作是一个不同的问题。 - Tim Down


答案:


在现代浏览器(最近的Mozilla,WebKit和Opera)中你可以使用 getClientRects() DOM范围的方法 包含文本节点。

var textNode = document.getElementById("wombat").firstChild;
var range = document.createRange();
range.selectNodeContents(textNode);
var rects = range.getClientRects();
if (rects.length > 0) {
    console.log("Text node rect: ", rects[0]);
}
<div id="wombat">Wombat</div>


16
2018-04-25 09:21



此代码是否适用于旧浏览器。如果没有,旧浏览器的解决方案。 - Domezchoc
@Domezchoc:哪些旧浏览器?有一个解决方案使用 TextRange 在IE中,只要你的文本节点是元素的唯一子节点就很容易。否则,仍然可以创建TextRange,但还有更多工作要做。 - Tim Down
我的意思是IE,我明白了。首先,我需要找到TextRange然后找到getClientRects。谢谢 - Domezchoc
这已经停止在IOS 11中工作了。 - user984003
@ user984003:该代码段似乎在iOS 11中的Safari上运行正常。 - Tim Down