我有一个javascript函数,需要使用document.evaluate通过xpath检索某些节点,直到现在我正在使用像
这样的东西.//span[contains(@title, 'alerting')] | .//span[contains(@title, 'caution')]
但是当匹配的值更多时,它会变成一个非常长的字符串。我不能使用[@title = word],因为我需要检索其atributes包含一些字符串的元素。我尝试过像
这样的事情.//span[contains(@title, ('alerting'|'caution'))]
但它没有找回任何东西。
你能给我一个缩短第一个sintax的想法吗?
答案 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;
});