我正在使用Range
和XPATH
来检索,保存和重建html文件中的位置。要重建范围,我正在使用document.evaluate().singleNodeValue
,问题是singleNodeValue在firefox上返回null,它在chrome上运行良好。知道为什么吗?在这里我的代码:
fonction rebuildRange(xpath){
var selectionDetails = xpathh;
selectionDetails = selectionDetails.split(/\|/g);
var range = oDoc.createRange();
var selectionDetails0 = selectionDetails[0];
selectionDetails0 = selectionDetails0.replace(/\//g, "/h:");
selectionDetails0 = selectionDetails0.replace("h:t", "t");
var selectionDetails2 = selectionDetails[2];
selectionDetails2 = selectionDetails2.replace(/\//g, "/h:");
selectionDetails2 = selectionDetails2.replace("h:t", "t");
range.setStart(oDoc.evaluate(selectionDetails0, oDoc, nsResolver, 9, null).singleNodeValue, Number(selectionDetails[1]));
range.setEnd(oDoc.evaluate(selectionDetails2, oDoc, nsResolver, 9, null).singleNodeValue, Number(selectionDetails[3]));
}
答案 0 :(得分:1)
Testcase here适用于Chrome和FireFox
var x = document.evaluate("/html/body", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
console.log(x.singleNodeValue);
但是,从FireBug尝试相同的操作不会,FireFox中的Web控制台( Ctrl + Shift + K )会给出{{ 1}}在某些页面上,并在其他页面上工作。
这里的安全/起源很可能是奇怪的事情;你是在页面中运行脚本,加载外部资源(相同域)还是从其他域加载?
尝试将功能放在null
的{{1}}中实际调用document.evaluate
,然后使用{em>功能代替<script>
。例如打开 FireBug 并在this page上运行<head>
,document.evaluate
de('/html/body').singleNodeValue;
答案 1 :(得分:0)
最后,我明白了:错误来自这两行
selectionDetails0 = selectionDetails0.replace(/\//g, "/h:");
selectionDetails0 = selectionDetails0.replace("h:t", "t");
和nsResolver
,firefox不接受带有resolver
的xpath,这就是document.evalute()
返回empty set
然后singleNodeValue
返回null
的原因。
我只是删除了这两行,并将nsResolver
替换为null
,现在每个人都认为工作正常,如果有人看到没有resolver
的错误,请告诉我...