检索 DOM 文本节点位置
是否可以检索文本节点的几何位置(即距父元素、页面等的顶部/左侧偏移量)?
Is it possible to retrieve the geometric position (i.e. top/left offsets from either the parent element, the page, etc) of a text node?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
不直接。 TextNode 没有用于测量视口定位的原始 IE 偏移*(和类似)扩展。
仅在 IE 上,您可以创建一个 TextRange 对象,费力地尝试将其与 TextNode 的边界对齐,然后测量 TextRange 的boundingLeft/boundingTop,并将其添加到父元素的位置(通过通常的方式获得) 。 然而,对于可能不稳定的单浏览器解决方案来说,这是一项艰巨的工作。
您可能能够摆脱的另一种方法是将文本包装在 span 元素中(在文档中,或者通过脚本动态和/或临时),并使用 span 来测量位置,假设它没有拾取任何额外的内容可能影响位置的样式。 但请注意,包裹的跨度可能不会给出预期的右/底值; 根据您想用它做什么,您可能最终会包装第一个和最后一个字符或其他一些安排。
总结一下:呃,没什么好。
Not directly. TextNode does not have the originally-IE offset* (and similar) extensions for measuring on-viewport positioning.
On IE only, you could create a TextRange object, laboriously attempt to align it with the bounds of the TextNode, then measure the boundingLeft/boundingTop of the TextRange, and add it to the position of the parent element (obtained by the usual means). However this is a bunch of work for a potentially-wobbly single-browser solution.
Another approach you might be able to get away with would be wrapping the text in a span element (either in the document, or dynamically and/or temporarily by script), and using the span to measure positioning, assuming it's not picking up any additional styles that may affect the position. Note however that a wrapped span may not give the expected right/bottom values; depending on what you want to do with it, you might end up wrapping the first and last character or some other arrangement.
In summary: urgh, nothing good.
今天您可以通过
Range.getBoundingClientRect()
。Today you can via
Range.getBoundingClientRect()
.相对于视口的文本节点
相对于元素的文本节点
相对于文本节点父元素的字符偏移
Text node relative to viewport
Text node relative to an element
Character offset relative to text node's parent element
看看 这篇文章 - 它使用 offsetParent 属性递归地计算出偏移量。
对于像这样的浏览器变化的东西,我总是推荐 jquery 而不是滚动你自己的方法。 jquery CSS 函数 似乎有您需要的方法!
Have a look at this article - it uses the offsetParent property to recursively figure out the offset.
I would always recommend jquery over rolling your own methods for browser-varying stuff like this. The jquery CSS functions seem to have the methods you need!
没有任何内置的跨浏览器方法可以做到这一点。 我会
将 jQuery 与 Dimensions 插件结合使用: http://brandonaaron.net/docs/dimensions/
它是跨浏览器,将为您提供高度、宽度和 x & y 偏移等。
There isn't any built-in, cross-browser way to do this. I would
use jQuery with the Dimensions plugin: http://brandonaaron.net/docs/dimensions/
It is cross-browser and will give you height, width and x & y offsets, among others.
这些天有办法。 一种方法: getBoundingRectangle: https://developer.mozilla.org/ en-US/docs/Web/API/Element.getBoundingClientRect
These days there are ways. One way: getBoundingRectangle: https://developer.mozilla.org/en-US/docs/Web/API/Element.getBoundingClientRect