在Jquery中,基于标记之间的文本的选择器
我需要从DOM中检索数据,但容器没有特定的在Jquery中,基于标记之间的文本的选择器,jquery,css-selectors,Jquery,Css Selectors,我需要从DOM中检索数据,但容器没有特定的类或id, 有时,它们并非全部可用 所以我可以找到这个: <h2>name</h2> <p>john</p> <h2>address</h2> <p>street 1</p> <h3>email</h3> <p>jong@site.com</p> 名称 约翰 地址 第一街 电子邮件 jong@site.com
类
或id
,
有时,它们并非全部可用
所以我可以找到这个:
<h2>name</h2>
<p>john</p>
<h2>address</h2>
<p>street 1</p>
<h3>email</h3>
<p>jong@site.com</p>
名称
约翰
地址
第一街
电子邮件
jong@site.com
或者这个:
<h2>name</h2>
<p>john</p>
<h3>email</h3>
<p>jong@site.com</p>
名称
约翰
电子邮件
jong@site.com
如您所见,要获取电子邮件,我不能通过类
或id
,也不能通过第n(th)个元素进行选择,因为它可能是第2个或第3个
我看到的唯一解决方案是在电子邮件
之后获得第一个
,但我不知道如何通过文本()过滤数据
谢谢。使用…或与精确匹配,然后执行以下操作以获得
兄弟姐妹,如下所示:
var yourP = $('h3:contains("email")').next()
$("h3:contains('email')").next().doSomething();
$("h3").filter(function() { return $.text([this]) == "email"; }).next()
或者使用进行精确匹配(其中:contains()
是子字符串匹配),如下所示:
$("h3:contains('email')").next().doSomething();
$("h3").filter(function() { return $.text([this]) == "email"; }).next()
.例如,要获取电子邮件,您可以执行以下操作:
var emailAddress = $('h3:contains(email)').next('p').text();
您始终可以创建自己的选择器,以匹配精确的文本内容
这一个可以做到这一点,但会先删除所有空格
$.extend($.expr[':'], {
textIs: function(elem, i, attr) {
return ( $.trim( $.text([elem]) ) === attr[3] );
}
});
然后你会这样使用它:
$("h3:contains('email')").next().doSomething();
$("h3").filter(function() { return $.text([this]) == "email"; }).next()
示例:
为什么修剪?:)对于:textIs(email)
案例来说,它不是更有用吗?@Nick-可以选择任何一种方式。您在标记内有一个换行符,突然它不起作用。我猜用户除了文本之外,还希望匹配前导和尾随空格的频率会降低。感谢(非常快速)的回复,我不知道在这种情况下我有这么多选项。在很多情况下我都需要这个选择器,所以自定义选择器将是最有用的。