我需要从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个元素选择,因为它可能是第2或第3 {{1} }
我看到的唯一解决方案是在<p>
之后获取第一个<p>
,但我不知道如何按<h3>email</h3>
数据进行过滤。
谢谢。
答案 0 :(得分:6)
使用:contains()
...或与.filter()
完全匹配,然后.next()
获取后面的<p>
兄弟,如下所示:
$("h3:contains('email')").next().doSomething();
或者使用.filter()
进行完全匹配(其中:contains()
是子字符串匹配),如下所示:
$("h3").filter(function() { return $.text([this]) == "email"; }).next()
答案 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()