2011-01-29 13 views
23

Questo potrebbe essere un tipo sì/no di domanda.Disabilitazione ricorsiva di tutti i bambini di un elemento

Sto provando a disabilitare assolutamente tutti i child di un elemento in jquery.

Does chiamando

$('#id_of_an_element').children().do(function(){ 
    do_something; 
}); 

ricorsivamente chiamare tutti i figli di un elemento, o lo fa solo do_something a tutti i discendenti diretti di ?

aiuto è apprezzato,

Josh

+0

Cosa spera di fare?Potrebbe non essere necessario influire su ogni singolo discendente. – user113716

risposta

61

Dato un oggetto jQuery che rappresenta un insieme di elementi DOM, i .children() metodo ci permette di cercare attraverso i figli immediati di questi elementi nell'albero DOM e costruire un nuovo oggetto jQuery dagli elementi corrispondenti. I metodi .find() e .children() sono simili, tranne per il fatto che l'ultimo percorre solo un singolo livello lungo l'albero DOM. Nota anche che, come la maggior parte dei metodi jQuery, come , .children() fa non restituisce nodi di testo; per ottenere tutti i bambini tra cui testo e commentare i nodi , utilizzare .contents().

http://api.jquery.com/children/

È possibile farlo se si vuole agire su tutti i discendenti a qualsiasi livello di nidificazione:

$('#id_of_an_element').find('*').attr('disabled', true); 

o utilizzando il selettore discendente:

$('#id_of_an_element *').attr('disabled', true); 
+0

Funziona per me, grazie! – jherax

+3

Potrebbe dover essere leggermente regolato per _properties_, come 'disabled', che sono differenziati da _attributes_ nelle versioni più recenti di jQuery. "A partire da jQuery 1.6, il metodo [.prop()] (http://api.jquery.com/prop/) fornisce un modo per recuperare esplicitamente i valori delle proprietà, mentre .attr() recupera gli attributi." –

+0

bella soluzione !!! – sony

2

È può fare

function disableChildren(obj) { 
    obj.children().each(function(i, val) { 
     disable(val); 
     disableChildren(val); 
    }); 
} 

disableChildren($("#id")); 

Vedere .each Non sembra essere un metodo .do.

Dovrai implementare disable come una funzione per fare ciò che ogni che vuoi quando si dice "disable"

5

Dal momento che si desidera modificare tutti discendenti, basta fare questo:

$('#id_of_an_element *').each(function() { 
    // do something 
}); 

Ma sarei curioso di sapere cosa stai facendo esattamente.

La proprietà disabled non ha senso per molti tipi di elementi. Potrebbe essere che qualunque cosa tu stia facendo trarrà vantaggio dall'eredità dei CSS.

Oppure se si desidera effettivamente la proprietà disabled, allora si potrebbe anche scegliere come target gli elementi form.

$('#id_of_an_element :input').attr('disabled','disabled'); 
+2

+1 buon punto sul selettore ': input'. Sicuramente ha più senso del loop su tutti i discendenti. – karim79

+0

@ karim79: Grazie. Difficile dire quale sia il migliore, ma scommetterei che la soluzione adeguata a qualunque OP sta facendo non implicherà '*'. Potrei sbagliarmi però. – user113716

Problemi correlati