2012-04-03 20 views
10

Sto utilizzando un'istruzione if per determinare se un elemento ha figli. Se NON ha figli, voglio fare qualcosa solo per quell'elemento.jQuery con 'this' in una dichiarazione if

Ecco la premessa di quello che sto cercando di fare:

if ($("#div a").children().length > 0){ 
    $(this).hide(); 
} 

Quindi, se un tag <a> non ha figli, voglio fare qualcosa per tale specifico elemento (o più elementi che hanno anche figli).

Il problema è che this non è stato definito perché è un'istruzione if.

Potrei mancare completamente qualcosa ma non sono abbastanza sicuro di come farlo. Tutto il consiglio sarebbe apprezzato

risposta

9

Edit: Aggiunto DEMO link

È possibile utilizzare .filter per verificare le condizioni e chiamare .hide sui risultati del filtro. Vedi sotto,

$("#div a").filter(function() { 
    return ($(this).children().length > 0) 
}).hide(); 
+0

perfetto, funziona alla grande. Grazie! – scferg5

3

La soluzione semplice è posizionare l'elemento in una variabile.

var elem = $("#div a"); 
if (elem.children().length > 0){ 
    elem.hide(); 
} 
+3

Non sono sicuro che la tua risposta funzionerà davvero se #div ha più tag 'a'. http://jsfiddle.net/skram/bxDNq/5/ –

+0

@SKS, buon punto, +1 –

6

si potrebbe usare ogni per scorrere gli elementi

$('input').each(function(){ 
    if ($(this).val()) { 
    $(this).addClass('has-value'); 
    } 
});