在xpath中使用动态变量

时间:2013-01-03 17:28:16

标签: javascript variables xpath greasemonkey

我需要一点这个脚本的帮助:

var xpathResult = document.evaluate("(//text()[contains(., 'TEXT GOES HERE')])[1]", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
var node=xpathResult.singleNodeValue;
if (node==null)

我也有这样的字符串列表:

var mycars = new Array();
mycars[0] = "Saab";
mycars[1] = "Volvo";
mycars[2] = "BMW";

我可以在第一个脚本中用变量mycars替换TEXT GOES吗?我这样做是因为我有一个动态生成的页面,我想用greasemonkey来操作,具体取决于哪个数组存在。

2 个答案:

答案 0 :(得分:1)

这个问题有点不清楚,但总的来说,你会使用for()循环。像这样:

var foundSomething  = false;

for (var J in mycars) {
    var xpathResult     = document.evaluate (
        "(//text()[contains(., '" + mycars[J] + "')])[1]",
        document,
        null,
        XPathResult.FIRST_ORDERED_NODE_TYPE,
        null
    );
    var node            = xpathResult.singleNodeValue;
    if (node) {
        foundSomething  = true;
        // DO WHATEVER WITH THE FOUND NODE HERE.
        // break;  // Un-comment this statement to stop on the first match.
    }
}

答案 1 :(得分:0)

您必须修改包含XPath表达式的字符串,以在xpath中表达您的要求。因此,在您的示例中,您必须创建一个字符串,其中多个条件由or分隔,或者您可以使用|分隔多个XPath表达式。请参阅以下示例:

(//text()[contains(., 'Saab') or contains(., 'Volvo') or contains(., 'BMW')])[1]

(//text()[contains(., 'Saab')]|//text()[contains(., 'Volvo')]|//text()[contains(., 'BMW')])[1]