jQuery选择没有子对象或第一个子对象不是图像的位置

jQuery选择没有子对象或第一个子对象不是图像的位置,jquery,html,jquery-selectors,Jquery,Html,Jquery Selectors,我正在尝试动态设置页面上某些元素的样式。因此,如果我有以下代码: <a href="#"> Select Me </a> <a href="#"> <img src="blah.jpg" /> Don't select me </a> <a href="#"> <div>Don't select me either</div> <img src="blah.jpg" />

我正在尝试动态设置页面上某些元素的样式。因此,如果我有以下代码:

<a href="#">
  Select Me
</a>

<a href="#">
  <img src="blah.jpg" />
  Don't select me
</a>

<a href="#">
 <div>Don't select me either</div>
 <img src="blah.jpg" />
</a>

<a href="#">
  <div>You can select me too.</div>
</a>
不会选择第一个标记,因为它没有任何子项(只有文本)。不应选择第二个标记,例如:

$("a:first-child").not("img)
但这就遗漏了第一项


编辑:如果A元素中的任何位置都有IMG,请不要选择它。

假设我正确理解了您的问题

$("a:not(:has(img))");



在您发表以下评论后,我最初编写的选择器应该适用于您。

如果要选择所有没有图像作为第一个子项的链接,请使用以下选项:

$('a:not(:has(> img:first-child))')
$('a:not(:has(img))')

如果要选择完全没有图像的所有链接,请使用以下选项:

$('a:not(:has(> img:first-child))')
$('a:not(:has(img))')

我没有试过,但你应该写下这样的话:

$("a").filter(function() {
    return $(this).filter("> img:first-child").length != 0;
})
它将首先选择所有的a,然后过滤那些将img作为第一个子项的a

更新
nickf解决方案显然更清晰:-)

我经常忘记jquery选择器的用途。

这会跳过图像不是第一个孩子的链接。@nickf:啊,我确实看错了(看起来你也看错了)。我想他希望只有第一个孩子不能是img。这段代码也会筛选出一个没有img作为第一个孩子的a。你很好,但在看了多一点之后,我认为这不会是一个问题。我想设置链接的样式,但不设置任何在A中有图像的内容的样式。我将对问题进行编辑以使其更清晰。@nickf:不是,对不起,我也误读了你的答案。让我们把它归结为睡眠剥夺,我会+1你的答案:-)我认为这会起作用,但这让我的头受伤的原因。has的文档说明,如果“其任何子体与选择器匹配”,则包含该元素,但没有将其限制为直接子体。你知道如果主播的直系后代中有一个图像,这是否会匹配吗?tvanfosson:事实上,它是这样工作的,但正如你所看到的,下一个选择器以>开头,表示“子代”(直系后代)。