2010-07-29 12 views
7

En mi código tengo el siguiente html que se agrega a un elemento de la lista cuando el usuario hace clic en un elemento específico.jQuery: detectar si el elemento existe

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

Usando jQuery, ¿cómo puedo detectar si existía el elemento, y si es así, no añadir otra marca de color verde?

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

Respuesta

12

Uso not y has

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

+1 - Me gusta este. No se necesitan pruebas. – user113716

+1

Estoy de acuerdo. así también. No se necesitan pruebas ** visibles. Me pregunto cómo se compara el rendimiento con un selector de ámbito o el hallazgo (viendo la fuente tratando de resolverlo - 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>'); 
    } 
}); 

bien, después de algunos cambios, esto debe ser lo que estás buscando.

$("#listItem span.greenCheckMark").length != 0 devolverá una matriz de objetos JQuery, si esa área tiene una longitud no igual a 0, entonces existe. Asegúrese de verificar específicamente dónde desea verificar ($("span.greenCheckMark").length revisará todo el documento en busca de marcas verdes).

+0

@EliThompson +1 Thanks man –

+0

@Eli, why 'this'? - no debería ser '$ ('# listItem'). find (...'? – James

+0

Parece que he leído mal la pregunta, comentario eliminado. – EliThompson

1

Se podía buscarlo?

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

EDITAR: Fijo "no-relación a la pregunta.

+0

Eh, ¿por qué usar un operador condicional cuando una instrucción 'if' sería más adecuada? – James

+1

@JP, eso no tiene importancia. Sin embargo, si quieres un motivo, un operador ternario me permite fácilmente mapear el retorno binario de la condición de una manera clara y concisa. –

+0

No entiendo lo que quiere decir con "mapa" ...? No está asignando el valor de retorno de la expresión a nada ... – James

0

según sus necesidades, esto sólo añadirá los <span> en el caso de que #listItem no contiene ya un <span> con un class de greenCheckMark.

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

JP - '.has()' de jQuery siempre devolver un objeto. Me confundo en este caso porque el nombre del método suena como debería devolver 'boolean'. – user113716

+0

@Patrick, gracias por recordarme :-) .. Acabo de cambiarlo. – James

+0

JP +1 Me gusta su actualización. menos caracteres que 'longitud '. – user113716

Cuestiones relacionadas