2016-04-12 15 views
0

Nur für den Kontext geschieht dies in meinem WordPress-Admin-Bereich, aber es ist nicht wirklich WP-spezifisch.jQuery Hinzufügen von Text zu einem Element, das noch nicht geladen wurde

Ich habe einen Link, der beim Anklicken ein neues DOM-Element mit ein paar untergeordneten Elemente schafft. Ich versuche, einen Klassennamen zu diesem neuen Elemente hinzuzufügen, etwa so:

<script type="text/javascript">   
    jQuery(document).ready(function($) {     
     $('tr#post-65 span.inline a.editinline').click(function() { 
      $('tr#edit-65').addClass('someclass'); 
     }); 
    }); 
</script> 

So tr#post-65 existiert immer, aber die Tabellenzeile edit-65 existiert nur, wenn a.editinline geklickt wird. Allerdings tr#edit-65 ist nicht erstellt von meinem jQuery oben, aber von WP eigenen jQuery-Code, auf den ich keinen Zugriff habe.

Also, meine Frage ist, wie kann ich eine Klasse auf ein Element hinzufügen, die nach meinem eigenen jQuery Block geladen wird erstellt wird? Ist es möglich zu erkennen, wenn das Element edit-65 erfolgreich geladen/erstellt wurde und nur dann meine benutzerdefinierte Klasse hinzufügen?

Antwort

1

Try this: Wie Sie keine Kontrolle über die Erstellung von Element haben, können Sie eine Arbeit um mit setInterval tun und prüfen, ob Element erstellt dann gesetzt Klasse und beenden.

jQuery(document).ready(function($) {  
     $('tr#post-65 span.inline a.editinline').click(function() { 
      var interval = setInterval(function(){ 
       if($('tr#edit-65').length) 
       { 
        $('tr#edit-65').addClass('someclass'); 
        clearInterval(interval); 
       } 
      }, 500); 
     }); 
    }); 

More Information on setInterval()

+0

Danke, das funktioniert perfekt. Und danke für den zusätzlichen Info-Link. – Kev

+0

glücklich, Ihnen zu helfen :) –

1

Erstellen Sie ein Intervall, um das Vorhandensein des Elements regelmäßig zu überprüfen. und das Intervall löschen, wenn Sie fertig:

<script type="text/javascript">   
    jQuery(document).ready(function($) {     
     $('tr#post-65 span.inline a.editinline').click(function() { 
      var int = setInterval(function(){ 
        if($('tr#edit-65').length>0) 
         {$('tr#edit-65').addClass('someclass'); 
         clearInterval(int); 
         } 
      }, 100); 

     }); 
    }); 
</script> 
+0

Vielen Dank für die Hilfe. – Kev