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搜索元素的子元素。
答案 0 :(得分:2)
您必须将XPathResult.FIRST_ORDERED_NODE_TYPE
与singleNodeValue
结合使用才能获得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)]