mbr: das WTF zum Montag

Hallo,

mir fehlen die Worte

sorry, das mußte ich jetzt einfach mal loswerden. Vielleicht kann mir ja einer von den Cracks hier erklären, was dieses Verhalten soll? Dass Software meint, besser als ich zu wissen, was ich will, habe ich bisher eher mit windows Programmen assoziiert.

Liebe Grüße mbr

  1. Hi,

    mir fehlen die Worte
    sorry, das mußte ich jetzt einfach mal loswerden. Vielleicht kann mir ja einer von den Cracks hier erklären, was dieses Verhalten soll?

    Worauf genau beziehst Du Dich?

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
    1. hi,

      mir fehlen die Worte
      sorry, das mußte ich jetzt einfach mal loswerden. Vielleicht kann mir ja einer von den Cracks hier erklären, was dieses Verhalten soll?

      Worauf genau beziehst Du Dich?

      er gibt test<br />test ein und wundert sich, dass test<br>test dabei rauskommt. Ich hab's auch erst nicht kapiert.

    2. Hallo Mudguard,

      Worauf genau beziehst Du Dich?

      darauf, dass ich X-HTML angebe (<br />), aber "normales" (die Profis mögen mir diese Wortwahl verzeihen) HTML (<br>) zurückbekomme. Wie gesagt, war gestern etwas frustriert, daher entschuldigt bitte die Wortwahl.

      Noch zum Hintergrund: Ich "programmiere" gerade für einen Kumpel eine Webanwendung, bei der man Werte aus einer Textarea in eine Tabelle verschieben kann und diese Werte dann bei Bedarf wieder in die Textarea zurückschreiben kann (mit Javascript). Ich habe im Netz eine Javascript Entsprechung zu nl2br gefunden und dachte: super: die nutze ich. Und für den Rückweg schreibe ich mir selber eine Funktion, die einfach die <br /> wieder entfernt. Idealerweise mit denselben Mechanismus (falls X-HTML, entferne <br />, sonst entferne <br>). So, und dann durfte ich gestern ca. 30 Minuten suchen, warum trotzdem immer wieder <br> in den Textareas auftauchten (ja, das ganze ist noch etwas komplizierter, es gibt mehrere Textareas)...

      Viele Grüße und einen entspannten 3. Oktober

      mbr

  2. Hallo,

    Vielleicht kann mir ja einer von den Cracks hier erklären, was dieses Verhalten soll? Dass Software meint, besser als ich zu wissen, was ich will, habe ich bisher eher mit windows Programmen assoziiert.

    var o=document.getElementById("test");  
    o.innerHTML = "test<br />test";  
    alert(o.innerHTML); // test<br>test
    

    Hier geht alles mit rechten Dingen zu. Du verstehst anscheinend nicht, was hier vorgeht (soll kein Vorwurf sein). Ich werd’s versuchen zu erklären.

    Drei Begriffe sind hier zum Verständnis nötig:

    • Parsing – das Einlesen und Verarbeiten von Markup (das ist eine Zeichenkette) zu einer Objektstruktur im Speicher.
    • DOM, Document Object Model – die Objektstruktur im Speicher, die das Markup repräsentiert. Genauer gesagt ist das ein Knotenbaum.
    • Serialisierung – Die Umwandlung der Objektstruktur in Markup, damit sie übertragen oder gespeichert werden kann.

    Du parst hier XHTML-Syntax zu DOM. Dann serialisierst du das DOM zu HTML-Syntax. Was kommt heraus? HTML-Code! Das ist kein Wunder.

    Der Browser verwendet zum Parsen von HTML einen HTML5-konformen Parser. Das gilt auch für den XHTML-Schnipsel, den du innerHTML zuweist. XHTML-Markup schluckt der HTML5-Parser ebenfalls (siehe auch Parsing HTML fragments).

    Das Markup wird also eingelesen und in DOM-Knoten umgesetzt. In dem Moment ist jede Information darüber, wie das Markup ursprünglich aussah, verloren! Das DOM weiß nichts davon, wie es ursprünglich mal serialisiert war. Der Browser nimmt beim Parsen verschiedene Normalisierungen vor. In Pseudocode ausgedrückt: Der Ergebnis von serialisierung(parsing(code)) gibt nicht exakt den Eingabewert zurück.

    Das Serialisieren des DOM ist ebenfalls in HTML5 standardisiert. HTML5 kennt zwei Syntaxen zur Repräsentation von HTML5-Dokumenten: Die HTML-Syntax und die XHTML-Syntax. Wenn du innerHTML ausliest, so wird eine HTML-Fragment-Serialisierung vorgenommen (siehe link:http://domparsing.spec.whatwg.org/@title=DOM Parsing and Serialization]). Was herauskommt, ist also immer HTML-Syntax. Für XML-Syntax gibt es den XMLSerializer.

    Also: Du gibst "<br />" hinein, damit erzeugst du einen br-Elementknoten im DOM. In HTML-Syntax serialisiert ergibt das "<br>".

    Grüße,
    Mathias

    1. Hallo

      var o=document.getElementById("test");

      o.innerHTML = "test<br />test";
      alert(o.innerHTML); // test<br>test

      
      >   
      > Du parst hier XHTML-Syntax zu DOM. Dann serialisierst du das DOM zu HTML-Syntax. Was kommt heraus? HTML-Code! Das ist kein Wunder.  
      >   
      > Der Browser verwendet zum Parsen von HTML einen HTML5-konformen Parser. ...  
      >   
      > Also: Du gibst "<br />" hinein, damit erzeugst du einen br-Elementknoten im DOM. In HTML-Syntax serialisiert ergibt das "<br>".  
        
      Ich vermute, dass das auch für die Funktion "Auswahl-Quelltext anzeigen" des Firefox gilt. Über <br />2<br> bin ich dort nämlich auch schon mal gestolpert und war in dem Moment auf's Äußerste verwirrt.  
        
      Tschö, Auge  
      
      -- 
      Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.  
      Terry Pratchett, "Wachen! Wachen!"  
        
      ie:{ fl:| br:> va:) ls:[ fo:) rl:( ss:| de:> js:| zu:}  
        
      [Veranstaltungsdatenbank Vdb 0.3](http://termindbase.auge8472.de/)
      
    2. Hallo Mathias,
      vielen Dank für die sehr ausführliche und hilfreiche Antwort. Ich hatte mir fast schon gedacht, dass die Erklärung ganz einfach (und logisch) sein muss, aber gestern Nachmittag hat mich dieses Verhalten eine halbe Stunde Debugging gekostet, daher war ich einfach etwas gefrustet. Also nochmal ganz herzlichen Dank.

      Viele Grüße

      mbr

      P.S.: Sind vier Sterne (Stand 01.10.2013) eigentlich schon Foren-Rekord?

      1. Om nah hoo pez nyeetz, mbr!

        P.S.: Sind vier Sterne (Stand 01.10.2013) eigentlich schon Foren-Rekord?

        Bei 3 Sternen ist Schluss. Den dritten Stern gibts für die 7. fachlich-hilfreich-Bewertung.

        Matthias

        --
        Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Pol und Polizei.

        1. Hallo Matthias,

          P.S.: Sind vier Sterne (Stand 01.10.2013) eigentlich schon Foren-Rekord?

          Bei 3 Sternen ist Schluss. Den dritten Stern gibts für die 7. fachlich-hilfreich-Bewertung.

          danke für den Hinweis. Ich sollte besser aufpassen, bevor ich poste. Ich hatte drei Sterne geshen und dann einfach nochmal als "fachlich hilfreich" gewertet, weil ich die Anntwort wirklich klasse fand - und angenommen, dass der Post jetzt vier Sterne hätte, ohne nochmal zu kontrollieren.

          (mindestens) sieben Bewertungen also - WOW

          Liebe Grüße

          mbr

          1. Om nah hoo pez nyeetz, mbr!

            (mindestens) sieben Bewertungen also - WOW

            In der Zeile unter dem Beitragstitel kann man es auch genauer erfahren:

            Der folgende Beitrag wurde am 30. September 2013, 21:55 Uhr von molily,  
            zapperlott@gmail.com veröffentlicht und bisher 10 mal als fachlich hilfreich bewertet.
            

            Matthias

            --
            Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Herz und Herzog.