Gle*_*rce 7 javascript tree range nodes
下面的代码经常抛出一个错误,读取
未捕获的 DOMException:无法在“Range”上执行“setStart”:偏移
some integer量大于节点的长度 (some smaller integer)。
var range = document.createRange();
range.setStart(pos.node, pos.position + someNumber);
Run Code Online (Sandbox Code Playgroud)
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);
Run Code Online (Sandbox Code Playgroud)
我正在寻找的是如何在调用 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
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1959 次 |
| 最近记录: |