2012-08-12 15 views
11

Quello che voglio fare è selezionare tutti i pulsanti di input sul documento, ad eccezione di quelli che si trovano sotto un ID specifico.Come faccio a selezionare tutti gli input tranne in un ID specifico?

Esempio:

<body> 
<input type="button"> 

<div id="something"> 
    <input type="button"> 
</div> 
<div id="something2"> 
    <input type="button"> 
</div> 


<input type="button"> 
<input type="button"> 
<input type="button"> 
</body> 

Per esempio, vorrei selezionare tutti gli ingressi, ad eccezione di quelli che risiede sotto il <div> cui id è "qualcosa".

Quello che ho provato:

1) $('input[type="button"]:not(:parent(#something))').addCSS(); 

2) $('input[type="button"] :not(#something input[type="button"])') 

E altri approcci simili

+0

possibile duplicato di [JQuery Selector per elementi non "incapsulati"] (http://stackoverflow.com/questions/11924672/jquery-selector-for-not-wrapped-elements) – Blazemonger

risposta

18

Si può fare in questo modo (relativamente efficiente).

$("input[type=button]").filter(function() { 
    return $(this).closest("#something").length == 0; 
}); 

In primo luogo, si ottengono tutti i input[type=button] elementi, quindi rimuovere quelli con #something come un genitore.

Un'altra possibilità è questa:

$("input[type=button]").not("#something input[type=button]") 

Dovreste provare sia per vedere che è più efficiente, ma in entrambi funzionerà.

Lavorare demo di entrambi: http://jsfiddle.net/jfriend00/fjxDb/

1

Forse questo funziona: $(":not(#something) input[type=button]")

+1

Mi chiedo dell'efficienza di questo dato che quasi tutti gli oggetti nel documento (tranne uno) corrispondono a ': not (#qualcosa)'. – jfriend00

+1

@ jfriend00 E non funziona anche http://jsfiddle.net/Zt4Qd/ – undefined

+0

Dagli un colpo a caso ... forse avrai un po 'di fortuna. La prossima volta ti consiglio di provare da solo se è già facile ricostruirlo. – Kiruse

6

Eri quasi arrivati, tutto quello che dovevo fare era rimuovere lo spazio prima: no.

$('input[type="button"]:not(#something input[type="button"])') 

So che questa è una vecchia questione, ma si presenta prima su Google, e l'utilizzo di .non di jQuery() come indicato nella risposta accettata non è sempre un'opzione.

+0

I miglioramenti sono sempre ben accetti! : D –

+0

Perché jQuery '.not()' a volte non è un'opzione? Questa è una domanda jQuery, quindi puoi sempre usare '.not()' con jQuery, giusto? – jfriend00

+0

Quando si desidera gestire gli eventi in modo dinamico, così anche sugli elementi che vengono aggiunti ** dopo ** viene applicato, in genere si usa $ (document) .on ('theEvent', 'theSelector'). Lì, non è possibile combinare il selettore con .not(), mentre è possibile usare: non nel selettore. –

Problemi correlati