Как выбрать предыдущий / следующий элемент в Tritium?

Я использую Moovweb SDK для преобразования веб-сайта, и у меня есть много страниц с контентом, который соответствует этому формату. Есть <h2> который начинает раздел, и этот раздел имеет случайное число <p> элементы.

Поскольку эти элементы не имеют атрибутов, я не могу выбрать по классу или идентификатору. Я хочу выбрать первый и последний <p> в каждом разделе. Я не хочу, чтобы вручную выбрать как $('./p[1]'), $('./p[4]') и т.д... Есть ли способ выбрать элементы до и после каждого <h2>?

<div>
  <h2>This is a heading</h2>
  <p>Here is some content</p>
  <p>Meh</p>
  <p>Here's another paragraph</p>
  <p>Important sentence because it's the last one</p>
  <h2>Here's a subheading</h2>
  <p>Topic sentence</p>
  <p>Bleh bleh bleh</p>
  <p>Hurray, this fragment.</p>
  <p>May the Force be with you</p>
  <p>Moovweb rocks!</p>
  <h2>New heading</h2>
  <p>More awesome content here</p>
  <p>Why is there so much stuff?</p>
  <h2>The end</h2>
  <p>Or is it?</p>
</div>

1 ответ

Решение

Вы можете использовать preceding-sibling а также following-sibling селекторы в XPath, чтобы сделать это!

Код будет выглядеть примерно так:

$("./div"){
  $("./h2") {
    $("following-sibling::p[1]") { # first p after h2
      # do stuff
    }
    $("preceding-sibling::p[1]") { # first p before h2
      # do stuff
    }
  }
}

Посмотрите этот пример, который я создал в Tritium Tester: http://tester.tritium.io/dc25a419ac15fad70fba6fd3d3a9b512cb8430e8

Другие вопросы по тегам