JSoup Selector для нескольких тегов, содержащих фразу - PullRequest
0 голосов
/ 30 мая 2018

В 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) как синтаксис селектора для поиска подходящих элементов".

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

JSoup поддерживает метод select(String query) не только для объектов типа Document, но и для объектов типа Elements.select(String query) само возвращает Elements.Поэтому вы можете объединить несколько операторов выбора, чтобы отфильтровать то, что вы хотите:

Elements hWithText = doc.select("h1,h2,h2").select(":matchesOwn(regEx)");

Конечно, вы также можете использовать select(":contains(whatever)", если вам не нужна гибкость регулярных выражений.

0 голосов
/ 30 мая 2018

Один вариант будет использовать метод 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>
...