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

Javascript 给定提取的组合文本字符串中的偏移量,如何确定包含节点和偏移量?,javascript,jquery,dom,Javascript,Jquery,Dom,给出以下HTML(只是一个示例): 现在,确定提取文本中的偏移量10对应于上例中的部分节点内文本节点的偏移量2的最简单、最快速、最优雅的方法是什么?此外,如何进行反向操作,即确定从DOM对象提取的文本中的偏移量10,以及偏移量2?这里是一个开始。您可以使用TreeWalker获得一个非常优雅的解决方案。不过,您需要为IE实现TreeWalker(假设您需要IE支持) 现在换个相反的…那么span前面的空格呢?对不起,这是一个格式错误的示例。删除了空白。支持所有主要供应商(IE/FF/Safar

给出以下HTML(只是一个示例):


现在,确定提取文本中的偏移量
10
对应于上例中的
部分
节点内文本节点的偏移量
2
的最简单、最快速、最优雅的方法是什么?此外,如何进行反向操作,即确定从
DOM对象提取的文本中的偏移量
10
,以及偏移量
2

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


现在换个相反的…

那么
span
前面的空格呢?对不起,这是一个格式错误的示例。删除了空白。支持所有主要供应商(IE/FF/Safari/Chrome/Opera),但可以安全地假设最近发布了一个兼容HTML5的ish版本(分别是9/4/5/12?/11?),似乎可以工作!为了答案的完整性,IE9有TreeWalker,这对于我来说在IE支持方面已经足够好了。
<div id="container"><span>This is <strong>SOME</strong> great example, <span style="color: #f00">Fred!</span></span></div>
var text = $('container').text();
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 };
}