Javascript 未捕获的DomeException:未能执行';setStart';在';范围';:偏移量大于节点';s长度

Javascript 未捕获的DomeException:未能执行';setStart';在';范围';:偏移量大于节点';s长度,javascript,tree,range,nodes,Javascript,Tree,Range,Nodes,下面的代码经常抛出一个错误,该错误读取 未捕获的DOMEException:未能对“范围”执行“setStart”:偏移量某个整数大于节点的长度(某个较小的整数) pos设置如下: getTextNodeAtPositionAndReturnEndOfContextIfNeeded = function(root, index){ var lastNode = null; var nodeCount = 0; var treeWalker = document.createTreeW

下面的代码经常抛出一个错误,该错误读取

未捕获的DOMEException:未能对“范围”执行“setStart”:偏移量
某个整数
大于节点的长度(
某个较小的整数

pos
设置如下:

getTextNodeAtPositionAndReturnEndOfContextIfNeeded = function(root, index){
  var lastNode = null;
  var nodeCount = 0;
  var treeWalker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, function next(elem) {
    nodeCount++;
    if(index > elem.textContent.length){
      index -= elem.textContent.length;
      lastNode = elem;
      return NodeFilter.FILTER_REJECT;
    }
    return NodeFilter.FILTER_ACCEPT;
  }, true); //true was added as a parameter to satisfy ie, but I haven't determined if it still works in other browsers, seems fine in Chrome so far.
  var c = treeWalker.nextNode();
  return {
    node: c ? c : root,
    position: c ? 0 : nodeCount
  };
}

var pos = getTextNodeAtPositionAndReturnEndOfContextIfNeeded(context, len);
我要寻找的是如何在调用range.setStart之前确定节点的长度,但我不确定在哪里访问它

我猜我可以添加如下内容:

return {
  node: c ? c : root,
  position: c ? 0 : nodeCount,
  maxLength: root.length //<-something like this, but I have no idea what to put here
};
返回{
节点:c?c:根,
位置:c?0:节点计数,

maxLength:root.length/发生这种情况的原因是,在父项中添加标记时,会添加两个额外的相邻文本节点。

因此,使用
node.normalize
来包装节点。

找到解决方案了吗?提议的副本的副本正在尝试设置结束,这是关于设置开始的
return {
  node: c ? c : root,
  position: c ? 0 : nodeCount,
  maxLength: root.length //<-something like this, but I have no idea what to put here
};