2012-05-11 26 views
7

tengo este código HTML/CSS:jquery seleccionar todos los elementos excepto un div y sus hijos

<body> 
     <!-- BEGIN: HEADER AREA --> 
     <?php require("snippets/header_area.php"); ?> 
     <!-- END: HEADER AREA --> 
     <div id = "presentation_area"> 
      <div id = "submenu_area"> 
       <div id = "sliding_menu_area"> 
       </div> 
       <div id = "tags"> 
        <div id = "1"> 
         <img src = "lang/el/images/1.png" /> 
        </div> 
        <div id = "2"> 
         <img src = "lang/el/images/2.png" /> 
        </div> 
        <div id = "3"> 
         <img src = "lang/el/images/3.png" /> 
        </div> 
        <div id = "4"> 
         <img src = "lang/el/images/4.png" /> 
        </div> 
       </div> 
      </div> 
     </div> 
    </body> 

Estoy tratando de desencadenar una función cuando el usuario hace clic en todo lo demás, excepto para el #sub_menu_area. Yo uso la siguiente parte de js:

$('*').not('#submenu_area').click(function(){ 
     if(slide == "open"){ 
      $('#sliding_menu_area').toggle(effect); 
      slide = "close"; 
     } 
    }); 

Desafortunadamente los niños de alguna manera no están excluidos y haga clic en este botón alterna muchas veces. ¿Alguien sabe cómo hacerlo correctamente? :)

EDIT: Así que lo que necesito es un selector de jQuery para obtener correctamente: on click of all elements of body EXCEPT for #submenu_area and its descendants.

+0

Podría funcionar la palanca en '$ (este)'? ¿Eso está en el corazón de lo que quieres que se haga? – veeTrain

+0

No porque quiero algo como "todo menos esto y sus hijos". ¿Tiene algún ejemplo de trabajo con '$ (this)'? –

+0

Lo siento; Posiblemente no entiendo exactamente lo que estás viendo y no quiero que suceda. Me doy cuenta de que se están alternando más efectos de los deseados, pero si crea un jsfiddle.net, sería útil mostrar el comportamiento específicamente. Pensé que querías cambiar lo que se hizo clic, pero parece que estás intentando ver ** sin efecto ** en las 4 imágenes, ya que son descendientes de 'submenu_area', ¿correcto? – veeTrain

Respuesta

16

Prueba esto:

$(document).click(function(e) { 
     if ($(e.target).is('#submenu_area, #submenu_area *')) { 
      return; 
     } 
     if(slide == "open"){ 
      $('#sliding_menu_area').toggle(effect); 
      slide = "close"; 
     } 
    }); 
+0

ty mate! ¡Funcionó! :) –

+0

Así se hace; esto fue todo un desafío. Me alegra que tengas tu respuesta @Jonur – veeTrain

4

Utilice esta:

$('*').not("#submenu_area *").click(function() { ... }); 
+0

¿No son los corchetes solo para los atributos? Intenté tu sugerencia pero no funciona ... –

+0

Sería '$ ('*: not (#submenu_area)')', pero esta idea no hará lo que el OP quiere de todos modos. – thirtydot

+0

Woops, eso es cierto (fijo). ¿Y por qué no haría esto lo que quiere el OP? –

Cuestiones relacionadas