2010-05-20 106 views
2

我想动态样式在我的网页上的一些元素。所以,如果我有以下代码:jQuery来选择没有孩子或第一个孩子不是图像

<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,请不要选择它。

回答

9

如果你想选择哪一个没有图像作为第一个孩子所有链接,使用这样的:如果你想选择哪一个没有图片的所有环节

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

在所有,使用此:

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

我认为这将起作用,但它让我的头部伤害推理。该文档已经说过,如果“它的任何后代与选择器相匹配”都包含这个元素,但是不会将它限制为直接后代。你知道这是否会匹配,如果有一个主播的直系后代内的图像? – tvanfosson 2010-05-20 15:37:30

+0

梅,模仿; -P – 2010-05-20 15:37:57

+1

tvanfosson:事实上*有*的作品,但你可以看到,下一个选择器以>开头,意思是“子女”(直接后代)。 – 2010-05-20 15:43:25

4

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

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

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


下面您的意见后,我原来写的选择应该为你工作。

+0

会跳过图像不是第一个孩子的链接。 – nickf 2010-05-20 15:24:51

+0

@nickf:啊,我看错了(看起来你也是)。 – 2010-05-20 15:26:00

+0

我想他想让只有第一个孩子不能成为img。这段代码会过滤出一些不是第一个孩子的图片。 – 2010-05-20 15:26:09

1

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

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

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

UPDATE
nickf解决方案是绝对清晰的:-)
我经常忘了jQuery选择如何多才多艺的。

相关问题