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

Javascript 如何使用XPATH检索具有一个或另一个值的节点,javascript,regex,xpath,Javascript,Regex,Xpath,我有一个javascript函数,需要使用document.evaluate通过xpath检索某些节点,到目前为止,我使用的是 .//span[contains(@title, 'alerting')] | .//span[contains(@title, 'caution')] 但当要匹配的值更多时,它会变成一个很长的字符串。我不能使用[@title=word],因为我需要检索其属性包含一些字符串的元素。我试过类似的方法 .//span[contains(@title, ('alerting

我有一个javascript函数,需要使用document.evaluate通过xpath检索某些节点,到目前为止,我使用的是

.//span[contains(@title, 'alerting')] | .//span[contains(@title, 'caution')]
但当要匹配的值更多时,它会变成一个很长的字符串。我不能使用[@title=word],因为我需要检索其属性包含一些字符串的元素。我试过类似的方法

.//span[contains(@title, ('alerting'|'caution'))]
但它无法检索任何内容


你能给我一个缩短第一个sintax的主意吗?

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

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

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

您也可以尝试使用
匹配项
,而不是
包含
,尽管我不确定它的JavaScript语法是什么,或者是否受支持。

XPath应该是这样的:-

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

您可以使用jquery,而不是使用
document.evaluate()
,在这种情况下,您可以执行以下操作:

$('span').filter(function() { 
    var title = $(this).attr('title');
    return title != undefined && title.search(/(alerting|caution)/) != -1;
});
这是无效的XPath--联合运算符
|
只能包含节点集的参数,而不能包含字符串

使用

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