Retrieving DOM textnode position

后端 未结 6 2075
萌比男神i
萌比男神i 2020-12-30 01:14

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?

6条回答
  •  轻奢々
    轻奢々 (楼主)
    2020-12-30 02:16

    Text node relative to viewport

    function getBoundingClientRectText(textNode) {
      const range = document.createRange()
      range.selectNode(textNode)
      return range.getBoundingClientRect()
    }

    Text node relative to an element

    function getTextOffsetRelativeToElement(element, textNode) {
      const elementRect = element.getBoundingClientRect()
      const range = document.createRange()
      range.selectNode(textNode)
      const textRect = range.getBoundingClientRect()
      return {
        top: textRect.top - elementRect.top,
        left: textRect.left - elementRect.left
      }
    }

    Character offset relative to text node's parent element

    function getCharOffset(textNode, offset) {
      const parentRect = textNode.parentElement.getBoundingClientRect()
      const range = document.createRange()
      range.setStart(textNode, offset)
      range.setEnd(textNode, offset + 1)
      const charRect = range.getBoundingClientRect()
      return {
        top: charRect.top - parentRect.top,
        left: charRect.left - parentRect.left
      }
    }

提交回复
热议问题