2012-12-24 5 views
5

In particolare, voglio dire: per gli elementi il ​​cui valore di classe non contiene il valore ID di questo elemento, eseguire questa funzione.Come posso targetare elementi le cui classi non contengono l'ID di questo elemento?

Per esempio, cliccando #foo eseguirà fadeOut() sulle voci di elenco le cui classi non contengono .foo nel seguente codice HTML:

<button id="foo">foo</button> 
<button id="bar">bar</button> 
<button id="baz">baz</button> 
<ul> 
    <li class="foo">Lorem</li> 
    <li class="foo bar">Ipsum</li> 
    <li class="baz">Dolor</li> 
</ul> 

Così dopo aver fatto clic #foo, l'ultimo elemento della lista dovrebbe scomparire, in quanto la prima due entrambi contengono la classe .foo.

risposta

5

Prova

$('button').on('click', function(){ 
    $('li:not(.'+this.id+')').fadeOut(); 
}); 

Demo

+0

Meraviglioso! Questa è la soluzione leggera che stavo cercando! Ma ora questo fa cenno alla domanda ... come faccio a scegliere come target gli elementi le cui classi DO contengono l'ID del pulsante? Scusate, sono estremamente nuovo a jQ/JS. – Chris

+0

@Chris rimuovi solo ': not()', '$ ('li.' + This.id)' – Musa

+0

Oh, certo! Silly me. Ho pensato troppo a quello. Grazie! – Chris

0

È necessario selezionare i pulsanti in qualche modo è possibile collegare il vostro evento. Quindi dovrai estrarre l'id e selezionare quelli che NON contengono quella classe. Ecco un esempio utilizzando il metodo not:

$(':button').click(function(){ 
    $('li').not('.' + $(this).attr('id')).fadeOut(); 
}); 

http://jsfiddle.net/ureyes84/Fr7dm/2/

0

È possibile utilizzare il selettore di non: http://api.jquery.com/not-selector/

$('#foo').click(function() { 
    $('li').not('.foo').fadeOut(); 
});​ 

vedi:

http://jsfiddle.net/dSSza/

+0

Grazie per la tua risposta! Questo era il mio approccio originale, ma non è esattamente il più efficace perché dovrei ripetere un codice simile per gli altri pulsanti. – Chris

Problemi correlati