2013-04-01 4 views
7

Ich verwende prettyprint Plugin als Syntax Highlighter, es funktioniert gut, wenn Seite geladen wird, aber wenn ich neue Elemente dynamisch hinzufügen, funktioniert es nicht! Ich habe versucht, prettyPrint() zu verwenden, um es nach dem Laden der neuen Inhalte aufzurufen, aber es hat nicht funktioniert! Ich folgte auch den Anweisungen auf der Plugin-Website, indem ich prettyPrint() mit einer Funktion verpackte, aber es funktionierte auch nicht! jede Hilfe würde sehr geschätzt werden. i installiert das Plugin wie folgt aus:Wie bekomme ich prettyprint zur Arbeit am dynamisch generierten dom-Element

<script src="https://google-code-prettify.googlecode.com/svn/loader/run_prettify.js"></script> 

mein Code:

function showCode(e){ 
    (e.preventDefault) ? e.preventDefault() : e.returnValue = false; 
    var parent = document.createElement('div'), 
     pre = document.createElement('pre'), 
     code = document.createElement('code'), 
     elm = (e.currentTarget) ? e.currentTarget : e.srcElement, 
     src = elm.getAttribute('href'), 
     id = elm.getElementsByTagName('img')[0].getAttribute('src').replace(/images\/(.+?)\.png/g, "$1"); 
    parent.id = "codeZoom"; 
    pre.className = "prettyprint linenums lang-" + id; 

    var xhr = (window.XMLHttpRequest) ? new window.XMLHttpRequest() : new activeXObject("Microsoft.XMLHTTP"); 
    xhr.open('get', src, true); 
    xhr.send(); 
    xhr.onreadystatechange = function() 
    { 
     if(xhr.readyState == 4 && xhr.status == 200) 
     { 
      var text = document.createTextNode(xhr.responseText); 
      code.appendChild(text); 
      pre.appendChild(code); 
      parent.appendChild(pre); 
      document.getElementsByTagName('body')[0].appendChild(parent); 
      center(parent); 
      prettyPrint(); 
     } 
    } 
} 

derzeit Ich erhalte die Fehlermeldung Schöndruck ist nicht definiert.

+0

Sie müssen einen Kontext anzeigen. Wenn "prettyPrint" nicht definiert ist, liegt es daran, dass es nicht definiert ist! Unmöglich, mit Ihrem aktuellen Code zu wissen – Alexander

+0

Ich habe den Link zur Plugin-Website hinzugefügt, es soll 'prettyPrint'-Funktion erstellen, wenn Seite lädt, was ich denke, es funktioniert, weil es auf andere' pre' Elemente beim Starten der Seite funktioniert! –

+0

aber hier steht: http://google-code-prettify.googlecode.com/svn/trunk/README.html das kann ich (zum Ende der Seite scrollen), nein? –

Antwort

7

Soweit ich das beurteilen kann, scheint Ihr Code korrekt zu sein.

1) sind ziemlich Druck (nicht die run_xxx) Version

2) nennt Schön() jederzeit Ihr Dom aktualisiert

aber Ihr Skript, das Schön fehlt ein Schließen“enthält, so vielleicht ist es nur ein Tippfehler Ihr Problem :)

+0

wie schließe ich hübschen Druck ein? Muss ich es auf meinen Server herunterladen? –

+0

Nein, folgen Sie einfach den Schritten auf http://google-code-prettify.googlecode.com/svn/trunk/README.html und stellen Sie sicher, dass Sie eine CSS-Klasse von prettyPrint zu dem hinzufügen, was Sie möchten. Nichts wirklich benötigtes. – Robert

+0

Eigentlich ja müssen Sie es herunterladen, oder finden Sie eine CDN-Version davon ... Es ist das erste, was in der oben genannten Doc-Seite gesagt. Ich benutze es auf meiner Website unter www.i-technology.net gehe dorthin und schaue mir die Quelle an, um zu sehen, wie ich darauf verwiesen habe. Ich bin gerade auf einem iPad, also kann ich nicht viel helfen, aber wenn ich mich recht erinnere, habe ich auf eine CDN-Version verwiesen. – Robert

6

Wenn Schön() führt, fügt die Klasse „sauber aussehen“, um das Containerelement. ich denke, so dass es nicht recht zweimal gedruckt, wahrscheinlich bricht Dinge.

Sie müssen diese Klasse nur entfernen, bevor Sie prettyprint() erneut ausführen.

$('#my_element').removeClass('prettyprinted'); 
prettyPrint(); 
+1

, da diese die richtige Antwort ist. Muss die Klasse vor dem Aufruf von prettyprint() entfernen. Kann auch mit plain javascript: element.classList.remove ("prettyprinted") gemacht werden. – Roberto