嵌套的document.evalute搜索?

时间:2011-11-13 12:10:32

标签: javascript firefox xpath

var links = document.evaluate("//BODY/CENTER[1]/P[1]/TABLE[1]/TBODY[1]/TR[1]", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null).evaluate("//A");

基本上我需要通过xpath找到一个元素。然后通过xpath搜索此元素。上面的内容显然不起作用,但也没有使用contextNode参数。

var headings = document.evaluate("//BODY/CENTER[1]/P[1]/TABLE[1]/TBODY[1]/TR[1]", document, null, XPathResult.ANY_TYPE, null); 
var thisHeading = headings.iterateNext();  

var headings2 = document.evaluate("//A", thisHeading, null, XPathResult.ANY_TYPE, null); 

headings2.iterateNext().style.backgroundColor = "red";

我需要能够通过xpath搜索元素的子元素。

3 个答案:

答案 0 :(得分:2)

您必须将XPathResult.FIRST_ORDERED_NODE_TYPEsingleNodeValue结合使用才能获得XPath表达式的第一个元素。然后,使用.//A选择任何<a>元素,该元素是匹配节点的子元素。如果您想与直接孩子匹配,请使用./A

var headings = document.evaluate("//BODY/CENTER[1]/P[1]/TABLE[1]/TBODY[1]/TR[1]",
                     document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null); 
var thisHeading = headings.singleNodeValue;    
var headings2 = document.evaluate(".//A", thisHeading, null, XPathResult.ANY_TYPE, null); 

headings2.iterateNext().style.backgroundColor = "red";

答案 1 :(得分:2)

问题是,p标记的子项必须是内联元素。段落中的表格是不允许的。如果您删除p标记,则可以使用源代码,请参阅此jsfiddle

答案 2 :(得分:1)

  

基本上我需要通过xpath找到一个元素。然后搜索这个   元素通过xpath

这可以通过单个XPath表达式完成。

使用

//BODY/CENTER[1]/P[1]/TABLE[1]/TBODY[1]/TR[1]//A

要选择拥有//BODY/CENTER[1]/P[1]/TABLE[1]/TBODY[1]/TR[1]后代的所有A元素,请使用

//BODY/CENTER[1]/P[1]/TABLE[1]/TBODY[1]/TR[1][not(//A)]