2010-05-20 124 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選擇如何多才多藝的。

相關問題