2012-04-26 16 views
7

Sto aspettando l'evento document.ready per fare qualcosa sulla mia pagina.Attendere fino a quando gli elementi HTML ottengono una classe, quindi fare qualcosa

Purtroppo un altro script, che non posso modificare, non ha ancora funzionato con la sua magia una volta che il mio script è stato chiamato. Quindi, la selezione jquery sul nome della classe fallisce poiché la classe non esiste ancora nel DOM.

Questo è il motivo per cui voglio dire alla mia funzione di ascoltare fino a quando un elemento ottiene una certa classe, quindi fare qualcosa con esso.

Come ottengo questo? da inserire

var timer = setInterval(function() { 
    if (element.className=='someclass') { 
     //run some other function 
     goDoMyStuff(); 
     clearInterval(timer); 
    } 
}, 200); 

o ascoltare per l'elemento::

+0

si fa a controllare questo altro script? Non puoi chiamare il tuo codice come callback dell'altro codice? – j08691

+0

o ottieni l'altro script per attivare un evento personalizzato – rgvcorley

+0

Sembra un duplicato di questa domanda: http://stackoverflow.com/questions/1950038/jquery-fire-event-if-css-class-changed –

risposta

3

È possibile attivare alcuni eventi una volta aggiunta la classe.

Esempio:

$('#ele').addClass('theClass'); 
$(document).trigger('classGiven') 


$(document).bind('classGiven',function(){ 
    //do what you need 
}); 
12

Qualcosa di simile (pseudo codice)

function flagInsertedElement(event) { 
    var el=event.target; 
} 
document.addEventListener('DOMNodeInserted', flagInsertedElement, false); 

jQuery versione:

$(document).on('DOMNodeInserted', function(e) { 
    if (e.target.className=='someclass') { 
     goDoMyStuff(); 
    } 
}); 

C'è anche il plugin liveQuery :

$("#future_element").livequery(function(){ 
    //element created 
}); 

O se questo è un gestore di eventi regolare, eventi delegati con jQuery su();

+0

L'approccio del timer ha funzionato come un fascino. – k0pernikus

+0

Ottenuto tre downvotes su questo, ma un setInterval semplice come quello non usa molte risorse e funziona bene, ma dovrebbe avere una sorta di finale se la classe non è mai stata trovata, come una funzione di timeout che cancella l'intervallo dopo un paio di secondi . La funzione jQuery per l'ascolto del nodo DOM inserito è probabilmente il modo migliore per farlo, ma a meno che il gestore non venga rimosso continuerà a controllare tutti gli elementi inseriti per className, che a mio parere è peggiore di un setInterval. – adeneo

+0

@adeneo ottima risposta, complimenti, grazie :) –

0

Mi dispiace se ho ricevuto la tua domanda sbagliata, ma perché non solo fare qualcosa di semplice come questo su document.ready? :

$("#myelement").addClass('myclass'); 

if($("#myelement").hasClass('myclass')) { 
    alert('do stuff here'); 
} 
+0

Non aggiungo l'elemento con questa classe. Viene aggiunto da un altro script. E voglio prendere quel cambiamento e poi fare qualche magia su di esso. – k0pernikus

+0

quindi forse sarebbe meglio aggiungere la callback in un altro script, se possibile? – Vytautas

Problemi correlati