#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, я просто поиграл и обнаружил, что фильтр сработал, но ваш ответ имеет гораздо больше смысла