Wie füge ich ein Vor-Tag innerhalb eines Code-Tags mit jQuery hinzu?

8

Ich versuche, jQuery zu verwenden, um Codeblöcke zu formatieren, insbesondere um ein <pre> -Tag innerhalb des <code> -Tags hinzuzufügen:

%Vor%

Firefox wendet die Formatierung korrekt an, aber IE platziert den gesamten Codeblock in einer Zeile. Wenn ich eine Warnung hinzufüge

%Vor%

Ich sehe, dass der IE zusätzlichen Text in das Pre-Tag eingefügt hat:

%Vor%

Wenn ich die Seite neu lade, ändert sich die Nummer nach jQuery.

Wenn ich wrap() anstelle von wrapInner() verwende, um das <pre> außerhalb des <code> -Tags zu umbrechen, behandeln IE und Firefox es korrekt. Aber sollte nicht auch <pre> innerhalb <code> funktionieren?

Am liebsten würde ich wrapInner() verwenden, da ich dann eine CSS-Klasse zum <pre> -Tag hinzufügen kann, um alle Formatierungen zu verarbeiten. Wenn ich jedoch wrap() verwende, muss ich Seitenformatierungs-CSS in% co_de einfügen % Tag und Text / Schriftformatierung im <pre> -Tag, oder Firefox und IE beide ersticken. Keine große Sache, aber ich möchte es so einfach wie möglich halten.

Hat jemand anderes das angetroffen? Fehle ich etwas?

    
Bruce Alderman 15.08.2008, 21:35
quelle

5 Antworten

11

Das ist der Unterschied zwischen Block- und Inline-Elementen . pre ist ein Block-Level-Element . Es ist nicht legal, es in ein code -Tag einzufügen, das nur inline enthalten kann Inhalt .

Da Browser jede goodawful Tag-Suppe, die sie im echten Web finden, unterstützen müssen, versucht Firefox zu tun, was Sie meinen. IE passiert es anders, was in der Spezifikation gut ist; Verhalten in diesem Fall ist nicht spezifiziert, weil es nie passieren sollte.

  • Könnten Sie statt dessen das Element code durch das pre ersetzen? (Aufgrund des Block / Inline-Problems sollte das technisch gesehen nur funktionieren, wenn sich die Elemente in einem Element mit befinden "flow" -Inhalt , aber die Browser könnten trotzdem tun, was Sie wollen.)
  • Warum ist es ein code Element an erster Stelle, wenn Sie das Verhalten von pre wollen?
  • Sie können dem code element pre auch die whitespace erhaltende Macht mit dem CSS geben white-space: pre , aber anscheinend IE 6 ehrt nur das im Strict Mode .
markpasc 16.08.2008, 04:04
quelle
3

Übrigens, ich weiß nicht, ob es verwandt ist, aber Vor-Tags innerhalb von Code-Tags werden nicht im strikten Modus validiert.

    
Pat 15.08.2008 21:56
quelle
1

Verwenden Sie die neueste jQuery? Was ist, wenn Sie

versuchen? %Vor%

Ist es besser oder erhalten Sie das gleiche Ergebnis?

    
Pat 15.08.2008 21:50
quelle
1

Wie von markpasc angegeben, ist ein PRE-Element innerhalb des CODE-Elements in HTML nicht erlaubt. Die beste Lösung besteht darin, Ihren HTML-Code so zu ändern, dass & lt; pre & gt; & lt; code & gt; (was einen vorformatierten Block bedeutet, der Code enthält) direkt in Ihrem HTML für Codeblöcke.

    
Vincent Robert 18.08.2008 12:13
quelle
1

Sie könnten html () verwenden, um es zu umbrechen:

%Vor%

Wie oben erwähnt, wäre es besser, wenn Sie Ihren HTML-Code ändern. Aber diese Lösung sollte funktionieren.

    
Harry B 18.08.2011 14:21
quelle