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

Omi*_*iod 2 jquery css-selectors

我需要从DOM中检索数据,但容器没有特定的class或者id,有时它们并非全部可用.

所以我能找到这个:

<h2>name</h2>
<p>john</p>
<h2>address</h2>
<p>street 1</p>
<h3>email</h3>
<p>jong@site.com</p>
Run Code Online (Sandbox Code Playgroud)

或这个:

<h2>name</h2>
<p>john</p>
<h3>email</h3>
<p>jong@site.com</p>
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,获取的电子邮件,我不能选择classid,也不由N(TH)元素,因为它可能是第二或3TH<p>

我看到的唯一的解决办法是让第一<p>刚过<h3>email</h3>,但我不知道如何来过滤text()数据.

谢谢.

Nic*_*ver 6

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

$("h3:contains('email')").next().doSomething();
Run Code Online (Sandbox Code Playgroud)

或者用.filter()一个精确的匹配(其中:contains()是一个字符串匹配),就像这样:

$("h3").filter(function() { return $.text([this]) == "email"; }).next()
Run Code Online (Sandbox Code Playgroud)

你可以在这里测试.


use*_*716 6

您始终可以创建自己的选择器,以匹配确切的文本内容.

这样做,但首先修剪任何空格.

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

然后你会像这样使用它:

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

$('h3:textIs(email)').next()
Run Code Online (Sandbox Code Playgroud)