jQuery选择没有孩子或第一个孩子不是图像的地方

时间:2010-05-20 15:15:42

标签: 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>

<a href="#">
  <div>You can select me too.</div>
</a>

我希望选择第一个和第四个标签。

据我所知,使用:

 $("a:first-child")

不会选择第一个标记,因为它没有任何子标记(只是文本)。不应该选择第二个标记,例如:

$("a:first-child").not("img)

但是遗漏了第一项。

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

3 个答案:

答案 0 :(得分:9)

如果您想选择所有没有图像作为第一个孩子的链接,请使用以下命令:

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

如果您想要选择所有完全没有图片的链接,请使用:

$('a:not(:has(img))')

答案 1 :(得分:4)

假设我已正确理解你的问题,

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

http://api.jquery.com/not-selector/
http://api.jquery.com/has-selector/

<小时/> 在下面的评论之后,我最初写的选择器应该适合你。

答案 2 :(得分:1)

我还没有尝试过,但你应该这样写:

$("a").filter(function() {
    return $(this).filter("> img:first-child").length != 0;
})

首先选择所有a,然后过滤那些img作为第一个孩子的。

<强>更新
切口解决方案肯定更清晰:-)
我经常忘记jquery选择器的多功能性。