如何使用XPATH检索具有一个或另一个值的节点

时间:2012-02-25 17:58:37

标签: javascript regex xpath

我有一个javascript函数,需要使用document.evaluate通过xpath检索某些节点,直到现在我正在使用像

这样的东西
.//span[contains(@title, 'alerting')] | .//span[contains(@title, 'caution')]

但是当匹配的值更多时,它会变成一个非常长的字符串。我不能使用[@title = word],因为我需要检索其atributes包含一些字符串的元素。我尝试过像

这样的事情
.//span[contains(@title, ('alerting'|'caution'))]

但它没有找回任何东西。

你能给我一个缩短第一个sintax的想法吗?

4 个答案:

答案 0 :(得分:1)

为什么不创建一个创建字符串并以编程方式构建表达式的函数,而不用担心它?大致是:

function spanContains(s) {
    return ".//span[contains(@title, '" + s + "')]";
}

var contains = [spanContains('word1'), spanContains('word2')].join("|");

您也可以尝试使用matches代替contains,但我不确定它的JavaScript语法是什么,或者是否支持。

答案 1 :(得分:1)

XPath应该是这样的: -

.//span[contains(@title, 'alerting') or contains(@title, 'caution')]

答案 2 :(得分:1)

.//span[contains(@title, ('alerting'|'caution'))]

这是无效的XPath - 联合运算符|只能包含节点集 - 而不是字符串。

使用

.//span[@title
          [contains(.,'alerting')
         or
           contains(.,'caution') 
          ]
        ]

答案 3 :(得分:0)

您可以使用jquery代替使用document.evaluate(),在这种情况下您可以执行:

$('span').filter(function() { 
    var title = $(this).attr('title');
    return title != undefined && title.search(/(alerting|caution)/) != -1;
});