2012-04-30 19 views
5

Ho una lista di div tutti con la stessa classe, voglio applicare una funzione a tutti quelli che non sono quelli cliccati (this), come posso selezionare !this con jQuery?Come selezionare l'elemento che non è 'questo'?

UPDATE: Ho fatto questo e non funziona, qualche idea perché?

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

UPDATE 2: questo è l'intero codice vero e proprio:

$(".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

non funziona perché si sta dicendo: 'LI (ciascuno), ma non LI -> hide' –

+0

è' this' include qui tutto il ' li' elementi? non solo quello cliccato? in quale altro modo posso ottenere solo il 'li' cliccato? – ilyo

+0

cos'è 'newStatus'? – thecodeparadox

risposta

3

utilizzare la funzione .not():

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

Dai un'occhiata alla jQuerys not funzione: http://api.jquery.com/not/

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

Per quanto riguarda l'aggiornamento, provare:

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

Sto usando un nome di classe invece di 'li' e non funziona, nessuna idea del perché? – ilyo

+0

potresti pubblicare il tuo codice vero per favore? ricorda di mettere un punto '.' prima del nome della classe quando li usi tramite jquery (ad esempio' $ ('. myClass') '). –

1

uso $('div').not(this) per selezionare una voce diversa cliccato uno.

0

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

questo è sbagliato:

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

className non è una funzione.

Invece di linea di cui sopra si può provare questo:

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