给出以下结构:
A。主体节点作为根
B.主体仅包含跨度节点,称它们为顶级跨度
C.顶级范围包含(1)文本节点(2)具有类的范围的组合,称它们为较低级别的范围
D.下层跨度仅包含文本节点
我们需要检索每个具有一个或多个下级跨度的顶级跨度,它们的类别为“ a”或“ b”。
我们最好的镜头:
//span//span[contains(concat(' ', normalize-space(@class), ' '), ' qri ') or contains(concat(' ', normalize-space(@class), ' '), ' ktiv ')]
但是它给出了较低的跨度。
演示:
x = new XPathEvaluator();
var it = x.evaluate("//span//span[contains(concat(' ', normalize-space(@class), ' '), ' a ') or contains(concat(' ', normalize-space(@class), ' '), ' b ')]", document.body.cloneNode(true));
var results = [];
for (var current = it.iterateNext(); current; current = it.iterateNext()) {
results.push(current.id);
}
console.log(results);
<span id="top1">In a<span id="a1" class="a">ultrices felis</span><span id="b1" class="b">sollicitudin felis</span></span>
<span id="top2">congue velit<span id="a2" class="a">Sed porttitor</span>Phasellus posuere</span>
<span id="top3">purus. Etiam<span id="b2" class="b">tellus, ultrices</span>Morbi interdum</span>
<span id="top4">leo malesuada tristique</span>
所需的输出是:
[
"top1",
"top2",
"top3"
]
答案 0 :(得分:1)
尝试以下XPath
//span[.//span[@class = 'a' or @class='b']]
它选择所有span
S的有一个或多个span
的儿童class
a
或b
。
如果您需要更具体的信息,请添加一个parent::
轴
//span[parent::body and .//span[@class = 'a' or @class='b']]
另一种可能是绝对路径:
/body/span[.//span[@class = 'a' or @class='b']]