2013-04-01 9 views
7

Sto usando il plug-in prettyprint come evidenziatore della sintassi, funziona bene quando la pagina viene caricata ma quando aggiungo nuovi elementi dinamicamente non funziona! Ho provato a utilizzare prettyPrint() per richiamarlo dopo aver caricato il nuovo contenuto ma non ha funzionato! Ho anche seguito le istruzioni sul sito Web del plugin avvolgendo prettyPrint() con una funzione ma non ha funzionato neanche! Qualsiasi aiuto sarebbe molto apprezzato. ho installato il plugin in questo modo:Come far funzionare prettyprint sull'elemento dom dinamicamente generato

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

il mio codice è:

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

Attualmente sto ricevendo il messaggio di errore prettyPrint non è definito.

+0

È necessario mostrare un contesto. Se dice 'prettyPrint' non è definito, è perché non è definito! Impossibile sapere con il tuo codice attuale – Alexander

+0

Ho aggiunto il link al sito web del plugin, si suppone che crei la funzione 'prettyPrint' quando la pagina viene caricata, penso che funzioni perché funziona su altri' pre' elementi quando la pagina inizia! –

+0

ma dice qui: http://google-code-prettify.googlecode.com/svn/trunk/README.html che posso (scorrere fino alla fine della pagina), no? –

risposta

7

Per quanto posso dire il tuo codice sembra corretto.

1) comprendono abbastanza stampa (non il run_xxx) Versione

2) chiamare prettyPrint() ogni volta che il Dom viene aggiornato

Tuttavia lo script che include prettyPrint manca una chiusura", così forse è solo un errore di battitura il problema :)

+0

come includo una bella stampa? devo scaricarlo sul mio server? –

+0

Non basta seguire i passaggi su http://google-code-prettify.googlecode.com/svn/trunk/README.html e assicurarsi di aggiungere una classe CSS di prettyPrint a qualsiasi cosa si desideri. Niente di veramente altro necessario. – Robert

+0

In realtà sì, è necessario scaricarlo o trovare una versione di cdn ... È la prima cosa detta nella pagina doc sopra. Lo uso sul mio sito all'indirizzo www.i-technology.net e guardo la fonte per vedere come l'ho fatto riferimento. Sono su un iPad in questo momento, quindi non posso fare molto ma se ricordo bene ho fatto riferimento a qualche versione di cdn lì. – Robert

6

Quando prettyprint() esegue, si aggiunge la classe "prettyprinted" per l'elemento contenitore. immagino in modo che la sua non è abbastanza stampato due volte, probabilmente rompe le cose.

È sufficiente rimuovere quella classe prima di eseguire nuovamente prettyprint().

+1

sopra votati in quanto questa è la risposta corretta. È necessario rimuovere la classe prima di chiamare prettyPrint(). Può anche essere fatto con plain javascript: element.classList.remove ("prettyprinted"). – Roberto

Problemi correlati