给定提取的组合文本字符串中的偏移量,如何确定包含节点和偏移量?

时间:2011-08-25 13:20:08

标签: javascript jquery dom

给出以下HTML(仅作为示例):

<div id="container"><span>This is <strong>SOME</strong> great example, <span style="color: #f00">Fred!</span></span></div>

可以使用例如提取文本jQuery的text()函数:

var text = $('container').text();

现在,确定提取文本中的偏移10对应于2内文本节点的偏移<strong>SOME</strong>的最简单,最快速,最优雅的方法是什么?上面例子中的节点?另外,如何做反向,即从10 DOM对象和偏移<strong>中确定提取文本中的偏移2

1 个答案:

答案 0 :(得分:2)

这是一个开始。您可以使用TreeWalker获得非常优雅的解决方案。您需要为IE实现TreeWalker(假设您需要IE支持)。

function findOffset(node, initialOffset) {
  var offset = initialOffset;
  var walker = node.ownerDocument.createTreeWalker(node, NodeFilter.SHOW_TEXT);
  while(walker.nextNode()) {
    var text  = walker.currentNode.nodeValue;
    if (text.length > offset) {
      return { node: walker.currentNode.parentNode, offset: offset };
    }
    offset -= text.length;
  }
  return { node: node, offset: initialOffset };
}

demo

现在反过来......