Javascript 如何使用XPATH检索具有一个或另一个值的节点
我有一个javascript函数,需要使用document.evaluate通过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
.//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')
]
]