2012-04-13 12 views
10

Chcę tylko zaznaczyć elementy, które pasują do klasy X i nie mają żadnychrodzeństwo, które również posiadają klasę X. W moim przypadku, X = hasDatepicker. Oto co mam wymyślić:jQuery: Wybierz elementy klasy X, które nie mają rodzeństwa z tej klasy

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

Jednak nie wyklucza to pierwszy element, więc w każdej grupie datepickers, to będzie jeszcze wybrać pierwszy. Nie chcę włączać żadnych grup, tylko singli.

Przykład z Partner:

<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> 

Przykład z wyników:

<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> 

Jakieś pomysły? Dzięki!

+1

Czy możesz podać przykład struktury HTML i jakie elementy chcesz dopasować? –

+0

@GaryGreen done :) – Garrett

+0

Jaki element chcesz wybrać w oparciu o twój przykład, div rodzica lub dane wejściowe z klasą hasDatepicker? – j08691

Odpowiedz

8

To nie jest eleganckie, ale to załatwia sprawę za pomocą pseudo-selektor :first-child i filtrowanie zestaw wyników z .filter():

  • :first-child pomogą wybrać tylko pierwszą .test element wielu możliwych rodzeństwa lista

  • użycie .filter() rzeczywiście sprawdzić, czy nie ma rodzeństwa z tej samej klasy

Oto kod:

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

DEMO

+3

zwraca '! $ (This) .siblings ('. Text'). Length' zamiast – ori

+0

Po prostu sens ma użycie funkcji .siblings(). Dzięki ! –

+0

Nie jestem pewien, czy to jest problem, ale to nie zadziała, jeśli istnieje inny element, który jest pierwszym rodzeństwem. Jeśli to jest problem, po prostu usuń część ': first-child'. –

Powiązane problemy