2012-04-13 13 views
10

Voglio selezionare solo gli elementi che corrispondono alla classe X e non hanno fratelli che hanno anche classe X. Nel mio caso, X = hasDatepicker. Ecco cosa mi è venuta in mente:jQuery: Seleziona gli elementi della classe X che non hanno fratelli con quella classe

$('.hasDatepicker:not(.hasDatepicker ~ .hasDatepicker)') 

Tuttavia, ciò non esclude il primo elemento, quindi in qualsiasi gruppo di datepickers, questo sarà ancora scegliere il primo. Non voglio includere quelli che sono in un gruppo, solo i singoli.

Esempio con Partita:

<div class="input text"> 
<input name="data[Goal][date_started]" type="text" value="" class="hasDatepicker" style="display: none; "> 
<button type="button" class="ui-datepicker-trigger"><img src="/themed/mocha/images/btn_calendar.png" alt="..." title="..."></button> 
</div> 

Esempio con Partite:

<div class="input text"> 
<input type="text" value="" id="GoalDateStarted" class="hasDatepicker"><input type="text" value="" class="hasDatepicker" style="display: none; "> 
<input type="text" value="" class="hasDatepicker" style="display: none; "> 
<input name="data[Goal][date_started]" type="text" value="" class="hasDatepicker" style="display: none; "> 
<button type="button" class="ui-datepicker-trigger"><img src="/themed/mocha/images/btn_calendar.png" alt="..." title="..."></button> 
</div> 

Tutte le idee? Grazie!

+1

Si può fornire un esempio della struttura HTML e quali sono gli elementi che si desidera abbinare? –

+0

@GaryGreen completato :) – Garrett

+0

Quindi quale elemento stai cercando di selezionare in base al tuo esempio, al div principale o all'input con la classe hasDatepicker? – j08691

risposta

8

Non è che elegante ma ha il trucco usando l':first-child pseudo-selettore e filtrare il set di risultati con .filter():

  • :first-child aiuterà selezionare solo il primo elemento .test of a possible multipli fratelli lista

  • uso .filter() per verificare effettivamente se non ci sono fratelli con la stessa classe

Ecco il codice:

var a = $('.test:first-child').filter(function() { 
    //return $(this).parent().find('.test').not(this).length == 0; 
    return !$(this).siblings('.test').length 
}); 

DEMO

+3

restituisce '! $ (This) .siblings ('. Text'). Length' invece – ori

+0

Ha proprio senso usare .siblings(). Grazie ! –

+0

Non sono sicuro se questo è un problema, ma questo non funzionerà se c'è un altro elemento che è il primo fratello. Se si tratta di un problema, basta rimuovere la parte ': first-child'. –

Problemi correlati