Селектор на основе текста между тегами, в Jquery - PullRequest
2 голосов
/ 03 октября 2010

Мне нужно получить данные из DOM, но у контейнеров нет определенного class или id, и иногда они не все доступны.

Чтобы я мог найти это:

<h2>name</h2>
<p>john</p>
<h2>address</h2>
<p>street 1</p>
<h3>email</h3>
<p>jong@site.com</p>

или это:

<h2>name</h2>
<p>john</p>
<h3>email</h3>
<p>jong@site.com</p>

Как вы можете видеть, чтобы получить письмо, которое я не могу выбрать ни по class или id, ни по n (th) элементу, потому что это может быть 2-й или 3-й <p>

Единственное решение, которое я вижу, это получить первый <p> сразу после <h3>email</h3>, но я не знаю, как фильтровать данные по text().

Спасибо.

Ответы [ 4 ]

6 голосов
/ 03 октября 2010

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

Этот делает это, но сначала обрезает любой пробел.

$.extend($.expr[':'], {
    textIs: function(elem, i, attr) {
        return ( $.trim( $.text([elem]) ) === attr[3] );
    }
});

Тогда вы будете использовать его следующим образом:

Пример: http://jsfiddle.net/aXvm3/

$('h3:textIs(email)').next()
6 голосов
/ 03 октября 2010

Используйте :contains() ... или точное совпадение с .filter(), затем выполните .next(), чтобы получить <p> брата, который следует , вот так:

$("h3:contains('email')").next().doSomething();

Или с .filter() для точного совпадения (где :contains() - совпадение подстроки), например:

$("h3").filter(function() { return $.text([this]) == "email"; }).next()

Вы можете проверить оба здесь .

3 голосов
/ 03 октября 2010

Например, чтобы получить электронное письмо, вы можете сделать следующее:

var emailAddress = $('h3:contains(email)').next('p').text();
2 голосов
/ 03 октября 2010
var yourP = $('h3:contains("email")').next()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...