2012-04-30 11 views
5

Tengo una lista de divs todos con la misma clase, quiero aplicar una función a todos los que no son los clics (this), ¿cómo puedo seleccionar !this con jQuery?¿Cómo seleccionar un elemento que no es 'esto'?

ACTUALIZACIÓN: He hecho esto y no está funcionando, ¿alguna idea de por qué?

$("li").each(function(){ 
     $("li").not(this).click(function(e) { 
      $(this).hide(); 
     }); 
    }); 

ACTUALIZACIÓN 2: este es todo el código real:

$(".mark").click(function(e) { 
    e.preventDefault(); 
    var id = "#" + $(this).parent().parent().parent().parent().attr("id") + " "; 

    var currentStatus = "deleted"; // to be replaced with actual status 
    var currentStatusClass = "." + currentStatus + "-heading"; 
    $(id + currentStatusClass).show(); 

    $(id + ".edit-headings").click(function(){ 
     $(this).find(".headings-status").show().addClass("bg-hover"); 

     $(id + ".headings-status").click(function() { 
      $(id + ".headings-status").not(this).hide(); 
     }); 
    }); 
}); 
+0

que no funciona causa que está diciendo: 'LI (cada uno), pero no LI -> hide' –

+0

es' this' aquí incluye todos los ' li' elementos? no solo el que hizo clic? ¿De qué otra forma puedo obtener solo el 'li' cliqueado? – ilyo

+0

¿Qué es 'newStatus'? – thecodeparadox

Respuesta

3

utilizar la función .not():

$('.yourclass').click(function() { 
    $('.yourclass').not(this).yourFunc(); 
}); 
7

Tenga una mirada en jQuerys not función: http://api.jquery.com/not/

$('div').not(this).doSomething(); 

En cuanto a su actualización, intente:

 $("li").click(function(e) { 
      $("li").not(this).hide(); 
     }); 
+0

Estoy usando un nombre de clase en lugar de 'li' y no está funcionando, ¿alguna idea de por qué? – ilyo

+0

podría publicar su código real, por favor? recuerde poner un punto '.' antes del nombre de clase al usarlos a través de jquery (es decir' $ ('. myClass') '). –

1

uso $('div').not(this) para seleccionar uno que no sea hecho clic.

0

usando :not() o .not()

$this; 

function myFunction(){ 
     // stuff here // and use $this for element reference 
} 


$('yourElement:not(.selected)').on('click',function(){ 
    // (make sure to add '.selected' to the new one and toggle existant) 
    $('.selected').removeClass('selected'); 
    $this = $(this); 
    $this.addClass('selected'); 

    myFunction(); 
}); 
0

esto es falso:

var newStatus = $(this).className().replace("contribution-", ""); 

className no es una función.

En lugar de la línea de arriba se puede probar esto:

var cls = $(this).attr('class').replace('contribution-',''); 
$(this).removeClass().addClass(cls); 
Cuestiones relacionadas