用于包含短语的多个标签的JSoup Selector

时间:2018-05-30 01:31:07

标签: css-selectors jsoup

在JSoup中,如何编写一个匹配可以来自多个标签的元素的选择器,并包含一个文本短语?

例如,我想匹配任何包含"短语"。

的标头标记

这有效,但我想避免重复: :has(h1:contains(phrase), h2:contains(phrase), h3:contains(phrase))

这仅匹配包含以下短语的h3个: :has(h1, h2, h3:contains(phrase))

抱歉,我之前没有说明,因为我想让问题保持简单。 :(我需要一个纯粹的选择器解决方案,因为我实际上使用jsoup https://jsoup.org/cookbook/extracting-data/selector-syntax"支持CSS(或jquery)之类的选择器语法来查找匹配元素"。 / p>

2 个答案:

答案 0 :(得分:1)

一种选择是使用filter()方法。

$(document).ready(function() {
  $("h1,h2,h3").filter(":contains('key word')").addClass('bingo');
});
.bingo {
  color: #ff0000;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="container">
  <h1 class="not-it">This header does not contain the phrase</h1>
  <h2 class="not-it">This header does not contain the phrase</h2>
  <h3 class="not-it">This header does not contain the phrase</h3>
  <h1 class="it">This header contains the key word</h1>
  <h2 class="it">This header contains the key word</h2>
  <h3 class="it">This header contains the key word</h3>
  <h4 class="it">This header contains the key word but is an H4</h4>
</div>

答案 1 :(得分:1)

JSoup不仅支持select(String query)类型的对象的Document方法,还支持类型为Elements的对象的select(String query)方法。 Elements本身会返回Elements hWithText = doc.select("h1,h2,h2").select(":matchesOwn(regEx)"); 。因此,您可以连接几个select语句来过滤掉您想要的内容:

select(":contains(whatever)"

当然,如果您不需要正则表达式的灵活性,也可以使用{{1}}。