2013-04-01 10 views
7

Używam wtyczki prettyprint jako zakreślacza składni, działa dobrze, gdy strona ładuje się, ale kiedy dynamicznie dodaje nowe elementy, to nie działa! Próbowałem użyć prettyPrint(), aby wywołać go po załadowaniu nowej zawartości, ale nie zadziałało! Postępowałem również zgodnie z instrukcjami na stronie wtyczki przez zawijanie prettyPrint() z funkcją, ale to też nie działa! jakakolwiek pomoc byłaby mile widziana. Po zainstalowaniu wtyczki tak:Jak uzyskać prettyprint do pracy z dynamicznie generowanym elementem domowym

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

mojego kodu jest:

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(); 
     } 
    } 
} 

obecnie Dostaję komunikat o błędzie prettyprint nie jest zdefiniowana.

+0

Musisz pokazać jakiś kontekst. Jeśli napis "prettyPrint" nie jest zdefiniowany, to dlatego, że nie jest zdefiniowany! Niemożliwe poznanie twojego obecnego kodu – Alexander

+0

Dodałem link do strony wtyczki, ma to stworzyć funkcję 'prettyPrint' kiedy strona ładuje się, co myślę, że robi, ponieważ działa na innych elementach' pre' kiedy strona się zaczyna! –

+0

, ale tutaj: http://google-code-prettify.googlecode.com/svn/trunk/README.html, które mogę (przewiń do końca strony), nie? –

Odpowiedz

7

O ile wiem, Twój kod wydaje się być poprawny.

1) obejmują ładny druk (nie run_xxx) wersja

2) zadzwonić prettyprint() za każdym razem, Twój Dom jest aktualizowana

Jednak skrypt, który zawiera prettyprint brakuje zamykanie”, tak może to tylko literówka problem :)

+0

jak czy mogę nakleić ładny wydruk? czy muszę go pobrać na mój serwer? –

+0

Nie należy wykonywać następujących czynności: http://google-code-prettify.googlecode.com/svn/trunk/README.html i pamiętaj o dodaniu klasy prettyPrint w CSS do elementów, które chcesz ulepszyć. Nic tak naprawdę nie potrzebował. – Robert

+0

Właściwie tak, musisz go pobrać, lub znaleźć wersję CDN ... To jest pierwsza rzecz wspomniana na powyższej stronie dokumentu. Używam go na mojej stronie internetowej pod adresem www.i-technology.net i przejrzyj źródło, aby zobaczyć, jak się do niego odwoływałem. Jestem na iPadzie, więc nic nie mogę na to poradzić, ale jeśli dobrze pamiętam, odwołałem się do tamtej wersji CDN. – Robert

6

Kiedy prettyprint() jest wykonywana, dodaje klasa „ładnie sformatowany” do elementu pojemnika. Myślę więc, że jego nie całkiem drukowany dwukrotnie, prawdopodobnie łamie rzeczy.

Wystarczy usunąć tę klasę przed ponownym uruchomieniem prettyprint().

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

w górę głosował, ponieważ jest to poprawna odpowiedź. Musi usunąć klasę przed wywołaniem prettyPrint(). Można to również zrobić za pomocą zwykłego javascript: element.classList.remove ("prettyprinted"). – Roberto

Powiązane problemy