Tach!
Ich habe den Inhalt einer HTML-Seite als String vorliegen. In der Webseite, deren Inhalte ich nicht beeinflussen kann, werden sehr viele leere <span/> Elemente zur Formatierung verwendet.
HTML ist nicht XML. Leere Elemente gibt es nicht aufgrund von XML-Syntax, sondern sie sind in der HTML-Spezifikation für einige Elemente (z.B. img) festgelegt. />
wird vom HTML-Parser wie >
gelesen, der Slash wird ignoriert. Also ist ein <span/>
dasselbe wie <span>
, also ein Start-Tag ohne End-Tag. Es ist auch für einige Elemente erlaubt, das End-Tag wegzulassen. Das fügt sich der Browser dann selbst ein. Und die Fehlerkorrektur macht das auch, wenn es nicht erlaubt ist.
Dabei werden die Textknoten in die leeren <span/>-Elemente geschrieben und es zerschiesst die Anzeige.
Also in etwa so:
<span class="_tre"></span>Text nach Span
Hmm, was ist nun bei dir anzutreffen? Spans mit Start- und End-Tag oder nur die Start-Tags mit Slash?
wird dann zu
<span class="_tre">Text nach Span<span>
Wenn es Start-Tags mit Slash sind, dann wird der End-Tag vom Browser gemäß seiner Regeln implizit eingefügt, meist da, wo ein Element beginnt, das kein Kind sein darf. Das sieht man sehr gut in den Entwicklertools, was der Browser aus dem Code für ein DOM erzeugt. Da sind die fehlenden End-Tags eingefügt.
Gibt es einen Weg, dies zu verhindern bzw. weiss jemand, ob leere span-Elemente gem. HTML-Spezifikation erlaubt sind bzw. wo kann man nachlesen, wie diese leeren span Element gemäß Spezifikation zu behandeln sind?
Siehe oben, HTML ist nicht XML.
dedlfix.