为什么 $(':not(:has(*))').find("p");不会给出输出

why $(':not(:has(*))').find("p"); won't give an output

我想获取文本的父节点,我知道这不太容易,应该通过手动遍历来完成。但我想知道为什么以下内容不起作用。

$(':not(:has(*))').find(':contains("mytext")');

我只在结果中查找 p 标签,这让事情变得更容易了。 我知道 $(':not(:has(*))'); 会 return 一些 P 标签 .find("p"); 应该 select 那些 P 标签

我知道它不起作用,但我想知道为什么?

您正在尝试查找没有后代的元素的后代元素。那是行不通的。

如果您正在寻找没有后代的 p 元素,您可能打算使用 .filter(),而不是 .find():

$(':not(:has(*))').filter('p')

或者您可以将 p 选择器附加到 :not() — 确实没有理由在此处 运行 一个单独的选择器(除非您的选择器字符串来自变量或其他):

$('p:not(:has(*))')