2014-01-24 233 views
3

我想從簡化我的選擇:jQuery是否有類似於:any或:matches僞類的內容?

'#a #b a[href^=mailto], .c .d a[href^=mailto]' 

要:

':matches(#a #b, .c .d) a[href^=mailto]' 

這可能只是使用jQuery選擇?或者我必須這樣做:

$('#a #b, .c .d').find('a[href^=mailto]') 

哪個不靈活。

+3

出了什麼問題'.find()'? –

+0

爲什麼你認爲僞類應該在jQuery中,如果它們不在CSS規範中?你爲什麼不看看jQuery文檔? http://api.jquery.com/category/selectors/ – Serg

+0

.find不允許使用其他選擇器(您可以通過'child'直接執行子操作,或者使用'find'執行子代操作)。並且jQuery中有一整類選擇器不在css中:http://api.jquery.com/category/selectors/jquery-selector-extensions/ – theazureshadow

回答

0

目前沒有像你在jQuery中提到的選擇器。

看起來像你的最後選擇的是最簡單的方式已經,如果有什麼可以做的不僅僅是縮短:如果您需要#b#a後代

$('#b, .c .d').find('a[href^=mailto]') 

,那麼有沒有辦法縮短您的選擇IMO

+2

如果他只希望'#b'如果它是'#a'的後代呢? –

+1

我在說'$('#a #b')'(給我的#a *的後裔,id爲b),與'('#b')'不一樣給我#b)。 –

+0

@JeromyFrench然後有最短的方式已經 – Felix

1

它們具有.has()這減少匹配元素到那些具有使選擇或DOM元素相匹配的後代。

因此,這將返回父對象有帶有href開始錨用的mailto:

$('#a #b, .c .d').has('a[href^=mailto]'); 

但是就選擇錨自己,你最後的選擇,find(),最好。它基本上就是用其他任何方法在封面下面調用的東西。

$('#a #b, .c .d').find('a[href^=mailto]'); 
+0

我認爲他正試圖獲得'a [href^= mailto]',而不是他們的父母。 –

+1

@Jeromy法國 - 這是真的,我讀得太快了。我已更新澄清。 –

1

,如果你正在尋找所有a[href^=mailto],然後

$('a[href^=mailto]').... 

$('* a[href^=mailto]').... 

,或者如果他們有一個 「通用」 選擇/父母

$('selector * a[href^=mailto]').... 

否則:

$('#a #b, .c .d').find('a[href^=mailto]'),你在你的問題

3

jQuery的寫不提供選擇相當於:any()/:matches()(其中:any()的是原來的形式和it was first implemented internally in Gecko and WebKit)。如果您無法或不願意展開您的選擇器,您確實必須拆分選擇器字符串並進行單獨的方法調用。

哪種方法()你使用取決於確切位置在哪裏:matches()將出現在您的選擇:

  • 如果:matches()自動出現在選擇字符串的開頭,任意組合程序之前,如問題:

    ':matches(#a #b, .c .d) a[href^=mailto]' 
    

    替代$()其中:matches()出現,並且選擇器的其餘部分傳遞給.find().children().next().nextAll(),具體取決於:matches()(子代,子代,+~)之後的組合子。

    從提問轉載:

    $('#a #b, .c .d').find('a[href^=mailto]') 
    
  • 如果:matches()出現本身就是一個組合子之後,例如:

    $('#a #b').children('.c, .d') 
    

    '#a #b > :matches(.c, .d)' 
    

    替代的其中:matches()出現上述方法之一

  • 如果:matches()表現爲另一種化合物選擇的部分,例如:

    ':matches(#a #b, .c .d) a[href^=mailto]:matches(.e, .f)' 
    

    替代.filter()如該:matches()出現:

    $('#a #b, .c .d').find('a[href^=mailto]').filter('.e, .f') 
    
相關問題