2013-04-01 7 views
7

मैं prettyprint प्लगइन सिंटैक्स हाइलाइटर के रूप में उपयोग कर रहा हूं, पेज लोड होने पर यह ठीक काम करता है लेकिन जब मैं गतिशील रूप से नए तत्व जोड़ता हूं तो यह काम नहीं करता है! मैंने नई सामग्री लोड करने के बाद इसे prettyPrint() का उपयोग करने का प्रयास किया लेकिन यह काम नहीं किया! मैंने फ़ंक्शन के साथ prettyPrint() को लपेटकर प्लगइन वेबसाइट पर निर्देशों का भी पालन किया लेकिन यह न तो काम करता था! कोई भी सहायताकाफी प्रशंसनीय होगी। मैं इस तरह प्लग-इन इंस्टॉल:गतिशील रूप से जेनरेट किए गए डोम तत्व पर काम करने के लिए सुंदरप्रिंट कैसे प्राप्त करें

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

मेरी कोड है:

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

वर्तमान में मैं त्रुटि संदेश prettyPrint परिभाषित नहीं है हो रही है।

+0

आपको कुछ संदर्भ दिखाना होगा। अगर यह कहता है कि 'prettyPrint' परिभाषित नहीं किया गया है तो ऐसा इसलिए है क्योंकि यह परिभाषित नहीं है! अपने वर्तमान कोड – Alexander

+0

के साथ जानना असंभव है, मैंने प्लगइन वेबसाइट पर लिंक जोड़ा है, यह पृष्ठ लोड होने पर 'prettyPrint' फ़ंक्शन' बनाना है, जो मुझे लगता है कि यह ऐसा करता है क्योंकि यह पृष्ठ शुरू होने पर अन्य 'pre' तत्वों पर काम करता है! –

+0

लेकिन यह यहां कहता है: http://google-code-prettify.googlecode.com/svn/trunk/README.html जो मैं कर सकता हूं (पृष्ठ के अंत तक स्क्रॉल करें), नहीं? –

उत्तर

7

जहाँ तक मैं आपका कोड बता सकता हूं सही लगता है।

1) सुंदर प्रिंट (नहीं run_xxx) संस्करण

2) फोन prettyPrint() किसी भी समय अपने डोम अद्यतन किया जाता है शामिल हैं

हालांकि अपनी स्क्रिप्ट भी शामिल है कि prettyPrint एक बंद "याद आ रही है, तो शायद यह सिर्फ एक टाइपो आपकी समस्या :)

+0

क्या मैं सुंदर प्रिंट संलग्न करता हूँ? क्या मुझे इसे अपने सर्वर पर डाउनलोड करना है? –

+0

http://google-code-prettify.googlecode.com/svn/trunk/README.html पर चरणों का पालन न करें और सुंदरता के सीएसएस वर्ग को जो कुछ भी आप चाहते हैं उसे जोड़ने के लिए सुनिश्चित करें। वास्तव में कुछ और जरूरत नहीं है। – Robert

+0

असल में हाँ, आपको इसे डाउनलोड करने की आवश्यकता है, या इसके सीडीएन संस्करण को ढूंढें ... उपर्युक्त दस्तावेज़ पृष्ठ में यह पहली बात है। मैं इसे www.i-technology.net पर अपनी साइट पर उपयोग करता हूं और वहां देखने के लिए स्रोत को देखता हूं कि मैंने इसका संदर्भ कैसे दिया। मैं अभी एक आईपैड पर हूं इसलिए बहुत मदद नहीं कर सकता लेकिन अगर मुझे सही याद है तो मैंने वहां कुछ सीडीएन संस्करण का संदर्भ दिया है। पहले चरण में – Robert

6

जब prettyprint() कार्यान्वित करता है, यह वर्ग कंटेनर तत्व को "prettyprinted"। मैं ऐसा लगता है कि अपनी सुंदर दो बार मुद्रित नहीं, शायद चीजें टूट जाता है कहते हैं।

है

आपको फिर से सुंदर प्रिंट() चलाने से पहले उस वर्ग को हटाने की आवश्यकता है।

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

को हाइलाइट करने वाले वाक्यविन्यास के लिए आपको आवश्यक सीएसएस फ़ाइलों को संदर्भित करना भी सुनिश्चित करें क्योंकि यह सही उत्तर है। PrettyPrint() को कॉल करने से पहले कक्षा को हटाना होगा। सादे जावास्क्रिप्ट के साथ भी किया जा सकता है: element.classList.remove ("prettyprinted")। – Roberto

संबंधित मुद्दे