2009-09-02 7 views
6

Ich bin Seiten asynchron mit der jQuery Ladefunktion lädt, wie folgt aus:jquery Last Ausgabe

tree.click(function() { 
       if ($(this).hasClass("file")) { 
        tree.removeClass("selected"); 
        $(this).addClass("selected"); 
        content.load("content/"+this.id+".html"); 
        contentContainer.effect("highlight"); 
        SyntaxHighlighter.all(); 
       }       
      }); 

Einer der externen Seiten wie folgt aussieht:

<pre class="brush: java;"> 
    /** 
    * The HelloWorldApp class implements an application that 
    * simply prints "Hello World!" to standard output. 
    */ 
    class HelloWorldApp { 
     public static void main(String[] args) { 
     System.out.println("Hello World!"); // Display the string. 
     } 
    } 
</pre> 

jetzt die SyntaxHighlighter.all (); Aufruf in der Funktion tree.click() von oben sollte den Pre-Block mit hübscher Syntaxhervorhebung rendern, aber beim Laden der Datei mit dem Pre-Block über die jQuery load() -Funktion funktioniert das nicht.

Wenn ich den Pre-Block in den Content-Div der Hauptdatei hartcodiere, funktioniert es jedoch.

Irgendwelche Ideen ??

Danke für die Antworten bisher. Ich verstehe den Callback-Teil und ich implementiert den Aufruf SyntaxHighlighter.all() im Callback der Ladefunktion jetzt, aber immer noch kein Glück ...

Ich werde die 2 vollständigen Dateien anhängen, da sie eher klein sind in der Größe atm.

index.php:

<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
    <title>braindump</title> 
    <link type="text/css" href="css/style.css" rel="stylesheet" /> 
    <link type="text/css" href="css/jquery.treeview.css" rel="stylesheet" /> 
    <script type="text/javascript" src="jquery/jquery-1.3.2.min.js"></script> 
    <script type="text/javascript" src="jquery/jquery-ui-1.7.2.custom.min.js"></script> 
    <script type="text/javascript" src="jquery/jquery.treeview.js"></script> 
    <script type="text/javascript" src="syntaxhighlighter_2.0.320/scripts/shCore.js"></script> 
    <script type="text/javascript" src="syntaxhighlighter_2.0.320/scripts/shBrushJava.js"></script> 
    <link type="text/css" rel="stylesheet" href="syntaxhighlighter_2.0.320/styles/shCore.css"/> 
    <link type="text/css" rel="stylesheet" href="syntaxhighlighter_2.0.320/styles/shThemeDefault.css"/> 
    <script type="text/javascript"> 
     $(document).ready(function() { 
      var tree = $("#tree li"); 
      var contentContainer = $("#contentContainer"); 
      var content = $("#content"); 

      SyntaxHighlighter.config.clipboardSwf = 'syntaxhighlighter_2.0.320/scripts/clipboard.swf'; 
      SyntaxHighlighter.all(); 

      // Treeview 
      $("#tree").treeview({ 
       persist: "location", 
       collapsed: true 
      }); 

      tree.click(function() { 
       if ($(this).hasClass("file")) { 
        tree.removeClass("selected"); 
        $(this).addClass("selected"); 
        content.load("content/"+this.id+".html", function() { 
         contentContainer.effect("highlight"); 
         SyntaxHighlighter.all(); 
        }); 
       }       
      }); 

     }); 
    </script> 
</head> 
<body> 
    <div id="container"> 
     <div id="header"> 

     </div> 

     <div id="leftMenu" class="thinDottedBorder"> 
      <div class="min500px"></div> 
      <ul id="tree" class="filetree"> 
       <li> 
        <span class="folder selectable">Design Patterns</span> 
        <ul> 
         <li id="softwareengineering/designpatterns/decorator" class="file"><span class="file selectable">Decorator Pattern</span></li> 
         <li id="softwareengineering/designpatterns/visitor" class="file"><span class="file selectable">Visitor Pattern</span></li> 
         <li id="softwareengineering/designpatterns/chainofresponsibility" class="file"><span class="file selectable">Chain of Responsibility</span></li> 
        </ul> 
       </li> 
       <li> 
        <span class="folder selectable">Design Principles</span> 
        <ul> 
         <li></li> 
        </ul> 
       </li> 
      </ul> 
      <div class="clear"></div> 
     </div> 

     <div id="contentContainer" class="thinDottedBorder"> 
      <div class="min500px"></div> 
      <div id="content"> 
       <pre class="brush: java;"> 
/** 
* The HelloWorldApp class implements an application that 
* simply prints "Hello World!" to standard output. 
*/ 
class HelloWorldApp { 
    public static void main(String[] args) { 
     System.out.println("Hello World!"); // Display the string. 
    } 
} 
</pre> 
      </div> 
      <div class="clear"></div> 
     </div> 
    </div> 
</body> 

und die andere Datei:

<pre class="brush: java;"> 
/** 
* The HelloWorldApp class implements an application that 
* simply prints "Hello World!" to standard output. 
*/ 
class HelloWorldApp { 
    public static void main(String[] args) { 
     System.out.println("Hello World!"); // Display the string. 
    } 
    } 
</pre> 

Bitte beachten Sie, dass zunächst der fest codierte pre-Block korrekt durch SyntaxHighlighter.all() gemacht, aber der eine im Callback der Ladefunktion funktioniert nicht.

+0

auf die Gefahr hin, wie ein Idiot klingen, hast du meine contentContainer.ef fect ("Hervorhebung"); oder content.effect ("highlight"); – karim79

+0

findet der Aufruf zum Hervorheben statt, bevor der Inhalt geladen wird? z.B. Wäre es besser als Callback Onload des Contents? – scunliffe

Antwort

25

SyntaxHighlighter.all bindet in das Ereignis window.onload - das nur einmal ausgelöst wird.

an Syntax-Highlight nach dem Laden der Seite, verwenden Sie die highlight Funktion statt:

content.load("content/"+this.id+".html", function() { 
    // this is executed after the content is injected to the DOM 
    contentContainer.effect("highlight"); 
    SyntaxHighlighter.highlight(); 
});

die Daumen, dass Werke, wenn nicht (basierend auf den Code auf der Suche) Sie einige explizite Argumente chuck in vielleicht müssen (wo {} ist ein leerer Satz von Konfigurationsparametern und this wird content sein, wenn sie von der ajax-Last-Handler genannt):


    SyntaxHighlighter.highlight({}, this); 
+0

Sorry für den Push, ich habe gerade versucht Syntaxhighlighter.highlight(); und es funktioniert gut! aber ich bekomme eine Warnung(), wenn ein Text hinzugefügt wird, sagen: Pinsel js nicht gefunden oder etwas. kann ich diese Nachricht deaktivieren? –

+0

@searlea: danke du hast mich gerettet, also wähle ich !! – Devima

0

Sie müssen, dass in dem Rückruf Last nennen:

content.load("content/"+this.id+".html",function() { 
    SyntaxHighlighter.all(); 
    }); 

load asynchron sind, so dass es entlang der Ausführung der Anweisungen glücklich weiter, während die GET-Anforderung im Hintergrund erfolgt.