2010-07-29 18 views
7

Nel mio codice ho il seguente codice HTML che viene aggiunto ad un elemento di elenco quando l'utente fa clic su un elemento specifico.jQuery: Rileva se esiste un elemento

<span class="greenCheckMark"></span> 

utilizzando jQuery, come faccio a rilevare se l'elemento esisteva, e in caso affermativo, non aggiungere un altro segno di spunta verde?

$('.clickedElement').live('click',function(){ 
//does the green check mark exist? if so then do nothing, else 
$('#listItem).append('<span class="greenCheckMark"></span>'); 
}); 

risposta

12

Usa not e has

$('#listItem:not(:has(.greenCheckMark))') 
    .append('<span class="greenCheckMark"></span>'); 
+0

+1 - Mi piace questo.Nessun test necessario – user113716

+1

concordato. Non sono necessari test ** visibili **. Mi chiedo in che modo il rendimento si confronta con un selettore con scope o con il find (osservando la fonte cercando di capirlo - http://code.jquery.com/jquery -1.4.2.js) –

0
$('.clickedElement').live('click',function(){ 
    //does the green check mark exist? if so then do nothing, else 
    if($("#listItem span.greenCheckMark").length != 0) 
    { 
     $('#listItem').append('<span class="greenCheckMark"></span>'); 
    } 
}); 

Va bene, dopo un paio di modifiche, questo dovrebbe essere quello che stai cercando.

$("#listItem span.greenCheckMark").length != 0 restituirà una matrice di oggetti JQuery, se quell'area ha una lunghezza diversa da 0 allora esiste. Assicurati di controllare specificamente dove vuoi controllare, ($("span.greenCheckMark").length controllerà l'intero documento per i segni di spunta verdi).

+0

@EliThompson +1 Grazie man –

+0

@Eli, perché "questo?" - non dovrebbe essere '$ ('# listItem'). find (...'? – James

+0

Sembra che abbia letto male la domanda, commento rimosso – EliThompson

1

Si potrebbe semplicemente cercarlo?

($('.greenCheckMark', '#listItem').length > 0) ? /* found green check mark in #listItem */ : /* not found */ ; 

EDIT: Fisso 'un-relazionalità' mettere in discussione.

+0

Eh, perché usare un operatore condizionale quando un'istruzione 'if' sarebbe più adatta? – James

+1

@JP, che è assolutamente irrilevante.Tuttavia, se vuoi un motivo, un operatore ternario mi permette di facilmente mappare il ritorno binario della condizione in modo chiaro e conciso –

+0

Non capisco cosa intendi per "mappa" ...? Non stai assegnando il valore restituito dell'espressione a qualcosa ... – James

0

Come per le vostre esigenze, questo aggiungerà solo la <span> nel caso in cui #listItem non contiene già un <span> con un class di greenCheckMark.

var listItem = $('#listItem'); 
if (!listItem.find('span.greenCheckMark')[0]) { 
    listItem.append('<span class="greenCheckMark"></span>'); 
} 
+1

JP - jQuery" .has() "sarà sempre restituire un oggetto Mi confondo su questo perché il nome del metodo suona come dovrebbe restituire 'boolean'. – user113716

+0

@Patrick, grazie per avermelo ricordato :-) .. Ho appena cambiato – James

+0

JP +1 Mi piace il tuo aggiornamento. meno caratteri di 'length'. – user113716

Problemi correlati