2012-08-12 17 views
11

Lo que quiero hacer es seleccionar todos los botones de entrada en el documento, excepto aquellos que residen bajo una identificación específica.¿Cómo selecciono todas las entradas excepto bajo una identificación específica?

Ejemplo:

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

Por ejemplo, me gustaría seleccionar todas las entradas, excepto los que se encuentra bajo la <div> cuya id es "algo".

Lo que he intentado:

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

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

y otros enfoques similares

+0

posible duplicación de [JQuery Selector para elementos no "envueltos"] (http://stackoverflow.com/questions/11924672/jquery-selector-for-not-wrapped-elements) – Blazemonger

Respuesta

18

Puede hacerlo de esta manera (con relativa eficiencia).

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

En primer lugar, se obtiene todos los elementos input[type=button], a continuación, eliminar aquellos con #something como padre.

Otra posibilidad es la siguiente:

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

Habría que poner a prueba tanto para ver cuál es más eficiente, pero tampoco va a funcionar.

demostración de trabajo de ambos: http://jsfiddle.net/jfriend00/fjxDb/

1

Tal vez esto funciona: $(":not(#something) input[type=button]")

+1

Me pregunto acerca de la eficacia de esto ya que casi todos los objetos del documento (excepto uno) coincidirán con ': not (# something)'. – jfriend00

+1

@ jfriend00 Y tampoco funciona http://jsfiddle.net/Zt4Qd/ – undefined

+0

Solo dale una oportunidad al azar ... tal vez tengas un poco de suerte. La próxima vez, recomiendo intentarlo tú mismo si ya es fácil de reconstruir. – Kiruse

6

Eras casi allí, todo lo que tenía que hacer era eliminar el espacio antes: no.

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

Sé que esto es una cuestión de edad, sino que aparece primero en Google, y el uso de .not de jQuery() como se muestra en la respuesta aceptada no siempre es una opción.

+0

¡Las mejoras siempre son bienvenidas! : D –

+0

¿Por qué jQuery '.not()' a veces no es una opción? Esta es una pregunta jQuery por lo que siempre puedes usar '.not()' con jQuery, ¿verdad? – jfriend00

+0

Cuando quiera manejar eventos dinámicamente, también en elementos que se agregan ** después de ** lo aplica, normalmente usará $ (document) .on ('theEvent', 'theSelector'). Allí, no es posible combinar el selector con .not(), mientras que es posible usar: no en el selector. –

Cuestiones relacionadas