Javascript:在元素中查找xpath
我通过下面的xpath获取所有元素。我想查看每个TD,并在每个TD中搜索另一个xpath。我不确定下面的方法是否有效,但这是我想要实现的。我知道您可以//td//a,但我想知道如何以编程方式搜索每个元素以获得更多XPathJavascript:在元素中查找xpath,javascript,dom,Javascript,Dom,我通过下面的xpath获取所有元素。我想查看每个TD,并在每个TD中搜索另一个xpath。我不确定下面的方法是否有效,但这是我想要实现的。我知道您可以//td//a,但我想知道如何以编程方式搜索每个元素以获得更多XPath var tds = document.evaluate('//td', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); for (++index < tds.snapshotLength
var tds = document.evaluate('//td', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
for (++index < tds.snapshotLength){
//this link may or may not exist
var link = document.evaluate('//a', tds[index].document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null).snapshotItem(0);
}
var tds=document.evaluate('//td',document,null,XPathResult.ORDERED\u NODE\u SNAPSHOT\u TYPE,null);
对于(++索引
您的方法看起来不错,但是您的for
语法不正确,您需要使用快照项来访问tds的结果:
var tds = document.evaluate('//td', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
var i;
for (i=0; i < tds.snapshotLength; i++) {
var link = document.evaluate('//a', tds.snapshotItem(i), null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
if(link.snapshotLength) {
console.log(link.snapshotItem(0));
}
}
var tds=document.evaluate('//td',document,null,XPathResult.ORDERED\u NODE\u SNAPSHOT\u TYPE,null);
var i;
对于(i=0;i
定义两个助手函数是明智的,它们完成繁重的工作并返回易于使用的结果:
function selectNodes(path, contextNode) {
var result, item, nodes = [];
result = document.evaluate(path, contextNode || document, null,
XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
while ( item = result.iterateNext() ) nodes.push(item);
return nodes;
}
function selectSingleNode(path, contextNode) {
return selectNodes(path, contextNode)[0];
}
现在使用XPath变得很简单:
var tds = selectNodes('//td'), i, a;
for (i = 0; i < tds.length; i++) {
a = selectSingleNode('.//a', tds[i]);
console.log(a.href);
}
var-tds=selectNodes('//td'),i,a;
对于(i=0;i
注意相对路径(。//a'
)。当您希望上下文节点的结果正确时,需要使用相对路径-普通的/
总是从文档根开始。是的,我发现在xpath之前添加
,否则它不会在正确的上下文节点中查找。