jQuery Несколько селекторов: первый и: содержит текст ()

#jquery

#jquery

Вопрос:

 var text = $('span:first:contains("From:")').siblings(span).text()
  

Я хочу выбрать только текст, чей родной брат является первым промежутком, содержащим текст ‘From:’. На странице есть второй «From:», поэтому приведенный выше запрос без «: first» работает без ошибок, но возвращает оба текста. Я просто хочу, чтобы текст относился к первому экземпляру ‘From:’. В xpath я думаю, я мог бы просто добавить [0] в конце. Но я не знаю, как «вложить» селектор:first (псевдоселектор?). Я новичок в jquery.

Ответ №1:

Возможно, вам следует поделиться своей структурой HTML, чтобы мы лучше понимали, что вы пытаетесь сделать.

Из вашего объяснения я понимаю, что вы пытаетесь это сделать:

 $(document).ready(() => {
    var text = $('span:contains("From:"):first').siblings('span').text();
    
  $('.display').text(text);
});  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>
  <span>Testing From: text 1 </span>
  <span>Sibling of text 1</span>
</div>
<div>
  <span>Testing From: text 2 </span>
  <span>Sibling of text 2</span>
</div>
<div>
  <span>Testing From: text 3 </span>
  <span>Sibling of text 3</span>
</div>

<hr>

<div class="display"></div>  

это почти то же самое, что и ваш код, но я поменял местами селектор «: first» и «:contains». Но, возможно, я не понял, что вы объясняете.

Комментарии:

1. Спасибо — я попробовал поставить :first после :contains, но это не сработало. Мне удалось заставить его работать с помощью фильтра

Ответ №2:

Я смог заставить его работать с помощью фильтра:

 var text = $('span:contains("From:")').filter(function() {
      return $(this).text();
    }).first().siblings('span').text();
  

Комментарии:

1. Этот фильтр не имеет смысла и не делает ничего существенного. Удалите его, и вы получите $('span:contains("From:")').first().siblings('span').text() , который делает то же самое

2. Да, вы правы, это действительно работает. Я не знаю jquery, я просто поиграл и обнаружил, что фильтр сработал, но ваш ответ имеет гораздо больше смысла