2011-05-29 10 views
37

cant wydają się następującą pracę:jQuery - Wiele selektorów w: not()?

$('input:not([type=radio][type=checkbox])').live('click', function() { 
    alert("You haven't clicked a radio or checkbox!"); 
}); 

próbowałem kilka różnych składni'S, może ktoś mi pomóc na ten jeden.

Cheers
Charlie

+0

możliwe duplikat [jQuery - wiele: nie selektora] (http://stackoverflow.com/questions/7144976/jquery-multiple-not-selector) –

Odpowiedz

67

pan myli multiple selector z multiple attribute selector. Należy napisać:

$("input:not([type=radio], [type=checkbox])"); 

Wielokrotna selektor atrybutu [type=radio][type=checkbox] dopasowuje elementy, których type atrybuty są równe zarównoradioicheckbox, który nie może się zdarzyć w tym wszechświecie.

+0

Idealne !, dzięki Frédéric. Wydaje się, że myliłem te. Zaznaczone :) –

+0

Myślę, że byłoby bardziej prawdą, aby powiedzieć "nie może się zdarzyć w tej realizacji HTML", niż próbować mówić dla całego wszechświata. To wielki * wszechświat, w niektórych obcych rasach może być implementacja html, która pozwala na przykład rozdzielić listę wartości dla danego atrybutu. (* wielu kosmologów uważa, że ​​wszechświat jest w rzeczywistości nieskończony, w takim przypadku jakakolwiek implementacja html, o której mógłbyś pomyśleć, będzie gdzieś istnieć) –

3

Składnia wewnątrz not() jest identyczna z normalną składnią selektora, więc jeśli chcesz dopasować rzeczy, które nie są żadną z tych rzeczy, użyjesz selektora w nie, który pasowałby do obu (ponieważ w zasadzie negujesz selektor). Jak to robisz? Ten sam sposób można zastosować style do wielu selektorów naraz w CSS, z przecinkiem, a więc:

$('input:not([type=radio],[type=checkbox])') 

To powinno wybrać wszystkie Wejścia nie [type=radio] i nie [type=checkbox]

+3

Zauważ, że odnosi się to tylko do ': not() jQuery. CSS3 ': not()' nie może zaakceptować niczego oprócz [prosty selektor] (http://www.w3.org/TR/css3-selectors/#simple-selectors-dfn). W związku z tym, jeśli przekażesz coś więcej niż prosty selektor do ': not()' w jQuery, współczesne przeglądarki nie będą mogły parsować selektora za pomocą 'querySelectorAll()', więc może to być hit wydajności (jeśli jest mikroskopijny). – BoltClock

+0

Tak, dziękuję za to wyjaśnienie, moje porównanie CSS nie wyjaśniło, że CSS3 nie selektor _nienie tak działa. – darkliquid

0

Można również wykluczyć przedmiotów, takich jak ten :

$('input').not('[type=radio], [type=checkbox]').live('click', function() { 
    alert("You haven't clicked a radio or checkbox!"); 
}); 
Powiązane problemy