0
我有下一個指令,在JavaScript:獲取節點的完整路徑,在與XPath查詢得到它在JavaScript
var firstScene = document.evaluate('//Scene', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
所以我的問題是如何獲得的節點firstscene
的完整路徑?
我有下一個指令,在JavaScript:獲取節點的完整路徑,在與XPath查詢得到它在JavaScript
var firstScene = document.evaluate('//Scene', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
所以我的問題是如何獲得的節點firstscene
的完整路徑?
使用這種getXPath() function:
function getXPath(node, path) {
path = path || [];
if(node.parentNode) {
path = getXPath(node.parentNode, path);
}
if(node.previousSibling) {
var count = 1;
var sibling = node.previousSibling
do {
if(sibling.nodeType == 1 && sibling.nodeName == node.nodeName) {count++;}
sibling = sibling.previousSibling;
} while(sibling);
if(count == 1) {count = null;}
} else if(node.nextSibling) {
var sibling = node.nextSibling;
do {
if(sibling.nodeType == 1 && sibling.nodeName == node.nodeName) {
var count = 1;
sibling = null;
} else {
var count = null;
sibling = sibling.previousSibling;
}
} while(sibling);
}
if(node.nodeType == 1) {
path.push(node.nodeName.toLowerCase() + (node.id ? "[@id='"+node.id+"']" : count > 0 ? "["+count+"]" : ''));
}
return path;
};
通過DOM ojbect從firstScene.iterateNext()
獲得到getXPath()
方法,它將返回一個數組與所有的XPATH步驟。
然後,您可以使用數組join()
方法返回一個完整的XPath表達式:
getXPath(firstScene.iterateNext()).join("/");
這是行不通的,你在哪裏得到所有的屬性?我調試了程序,XpathResult沒有定義你使用的任何東西,nodeType,nextSibling,previousSibling .... XpathResult.ORDERED_NODE_ITERATOR_TYPE的迭代器只有一個方法來移動到下一個結果節點iterateNext()和屬性來訪問內部值。 – mjsr 2010-06-20 05:30:27
對不起。我測試了'document.getElementById'的結果。我會看看是否可以用XPATH評估的結果來正確評估它。 – 2010-06-20 13:20:35
看起來'getXPath()'方法需要一個DOM對象,並且XPATH表達式的結果不是,但是您可以從'iterateNext()'方法獲得它。我已經用適合我的一些東西糾正了我的答案。 – 2010-06-20 14:43:12