jQuery 包含 |仅针对第一个祖先

Posted

技术标签:

【中文标题】jQuery 包含 |仅针对第一个祖先【英文标题】:jquery contains | target only first ancestor 【发布时间】:2011-05-20 15:23:39 【问题描述】:

我试图在一个包含许多测试表的 html 页面中定位并最终设置一个字符串的样式,在这个示例 BLA 中。

例如 HTML 页面:

<table>
<tr>
<td><table><div><tr><td>BLA</td></tr></div></table></td>
</tr>

还有我使用的 jquery 脚本:

$("td:contains('BLA')");  

这样做,但我看到所有的 td 都被选中了。我怎样才能得到第一个 td,没有所有的祖先? 如果这是可能的,我如何在向上 DOM 树时向第一个祖先添加一个类? (只有这一个)

感谢社区

【问题讨论】:

也许 $("td").html().contains('BLA') ? @Eric,&lt;td&gt;s 都是这样 【参考方案1】:

您描述的是最后一个 td 而不是第一个,因为它们是按 DOM 层次结构顺序返回的。

$('td:contains("BLA"):not("td td")').addClass('whatever');

http://jsfiddle.net/92Xj2/ 上的演示


更新在评论澄清后

$('td:not(:has(td)):contains("BLA")').addClass('whatever');

新演示 http://jsfiddle.net/gaby/92Xj2/4/

【讨论】:

谢谢你,Gaby,不幸的是,在现实世界的例子中,没有简单的方法知道我们会有多少嵌套的 。另外,我尝试像这样修改这个例子:jsfiddle.net/92Xj2/2 它似乎没有做我们想要的..没有直接的方法来定位“BLA”的第一个容器而不走否定路径吗? @George,:not(td td) 并不意味着两层深度。这意味着我们想要的td 没有嵌套在另一个td 的任何深度。所以它将永远是 DOM 中最顶层的td。 (td td 被称为 descendant 选择器 哦,我明白了。我没有解释清楚我想,我想选择dom中最底层的td而不是最顶层的.. @George,我现在明白了.. 用相反的选择器更新了答案:) 这正是我所需要的。非常感谢盖比!

以上是关于jQuery 包含 |仅针对第一个祖先的主要内容,如果未能解决你的问题,请参考以下文章

二叉树中两个节点的第一个祖先父节点

仅针对第一个 for 循环元素的模式打开?

jQuery源码学习笔记

jquery .each 仅适用于第一个元素

jquery 验证仅验证第一个字段 - 其他字段被忽略

Jquery 仅适用于 gridview 的第一个条目