在Jquery中基于标记之间的文本的选择器

时间:2010-10-03 12:45:42

标签: jquery css-selectors

我需要从DOM检索数据,但容器没有特定的classid, 有时它们并非全部可用。

所以我能找到这个:

<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>

正如您所看到的,要抓取我无法通过classid选择的电子邮件,也不能通过第n个元素选择,因为它可能是第2或第3 {{1} }

我看到的唯一解决方案是在<p>之后获取第一个<p>,但我不知道如何按<h3>email</h3>数据进行过滤。

谢谢。

4 个答案:

答案 0 :(得分:6)

使用:contains() ...或与.filter()完全匹配,然后.next()获取后面的<p>兄弟,如下所示:

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

或者使用.filter()进行完全匹配(其中:contains()是子字符串匹配),如下所示:

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

You can test both here

答案 1 :(得分:6)

您始终可以创建与精确文本内容匹配的自己的选择器。

这个做到了,但首先修剪任何空格。

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

然后你会像这样使用它:

示例: http://jsfiddle.net/aXvm3/

$('h3:textIs(email)').next()

答案 2 :(得分:3)

要获取电子邮件,例如,您可以执行此操作:

var emailAddress = $('h3:contains(email)').next('p').text();

答案 3 :(得分:2)

var yourP = $('h3:contains("email")').next()