balduin: zeilenumbruch bei firstChild.data

Hallo,

habe mir eine Fotoshow gebastelt. Die Bildadresse und der Begleittext stehen in einer JS-Datei.

Klappt alles bestens, bis auf den Zeilenumbruch.
Ich weise den Text mit "firstChild.data" zu.
(....firstChild.data=b[nr]['txt'];)

Gleichgültig ob ich in den Text ein "<br>","&#10;","%A0","\n" eingebe, das Ergebnis ist Mist. "unescape" habe ich auch bereits versucht.

Geht das überhaupt nicht oder hat jemand eine Idee.

Danke und Gruß
balduin

  1. Hi,

    Klappt alles bestens, bis auf den Zeilenumbruch.
    Ich weise den Text mit "firstChild.data" zu.
    (....firstChild.data=b[nr]['txt'];)
    Gleichgültig ob ich in den Text ein "<br>","&#10;","%A0","\n" eingebe, das Ergebnis ist Mist. "unescape" habe ich auch bereits versucht.

    <br> ist ein Element, kein Text, wenn <br> als Text eingefügt wird, wird das nicht funktionieren.
    &#10; ist zwar ein Zeilenumbruch-Zeichen, in HTML wirkt das (sofern nicht white-space:pre gesetzt ist) wie anderer Whitespace.
    %A0 ist außerhalb von URLs ohne Bedeutung.
    \n ist in Javascript sinnvoll, aber nicht in HTML.

    Füge den Text als Text ein und die br-Elemente als Elemente.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Danke für die ausführliche Erklärung.

      Gruß balduin

  2. Hallo Balduin,

    (....firstChild.data=b[nr]['txt'];)

    ein Zeilenumbruch läßt sich in einer JavaScriptvariablen als String m. E. nicht speichern. Sommit solltest Du zur Auszeichnung auf eine Zeichenkette ausweichen, die mit größtmöglicher Wahrscheinlichkeit nicht in der Variablen b[nr]['txt'] vorkommen wird (var trennzeichen="²³¬½¼";).

      
     a = b[nr]['txt'].split(trennzeichen);  
      
     if (a.length > 1)  
      {  
      for (var i = 0; a[i]; i++)  
       {  
       d = gestalte_link(document.createElement("p"),a[i]);  
       document.getElementById(kennung).appendChild(d);  
       }  
      }  
    
    

    Im Beispiel wurde eine symantische Trennung mit dem Element <p> vorgenommen, aber es steht Dir auch frei Textnodes im Wechsel mit Umbrüchen (<br>) zu kreieren und diese einem Element als Childnodes einzuhängen.

    Gruß aus Berlin!
    eddi

    1. prompt eine Funktion unterschlagen:

        
      function gestalte_link(e,f)  
       {  
       g = f.split(" ");  
        
       for (j = 0; g[j]; j++)  
        {  
        if (g[j].substr(0,7)=="http://")  
         {  
         m = document.createTextNode(k);  
         e.appendChild(m);  
         k = " ";  
        
         n = document.createElement("a");  
         n.href   = g[j];  
         n.target = "_blank";  
        
         m = document.createTextNode(g[j]);  
         n.appendChild(m);  
         e.appendChild(n);  
         }  
        else k += g[j] + " ";  
        }  
        
       m = document.createTextNode(k);  
       k = "";  
       e.appendChild(m);  
       return(e);  
       }  
      
      

      Gruß aus Berlin!
      eddi

    2. Hi,

      (....firstChild.data=b[nr]['txt'];)

      ein Zeilenumbruch läßt sich in einer JavaScriptvariablen als String m. E. nicht speichern.

      Doch, läßt sich. Allerdings nicht als Zeilenumbruch, nur als Zeichen. D.h.: als '\r' beim MAC, '\n' bei Unix, "\r\n" bei DOS/Windows und die ganzen anderen spar' ich mir mal.
      Da der Ersteller des Strings das aber vorher weiß ist das ja kein Problem.

      Probleme gibt's natürlich bei der Direkteingabe, aber dafür gibt's dann wieder Perl ;-)

      Noch eine Möglichkeit wäre die Base64 Codierung. Allerdings hat die eingebaute base64 Funktion bein einigen Browsern wohl eine harte Längenbegrenzung, bei meinen Bloomfilterexperimenten hat mich das mal schier zum Wahnsinn getrieben bis ich dahinter kam, das die alten Netscape Funktionen btoa()/atob() keine Strings mit 50 kib Länge vertrugen. Auch nicht im Mozilla 1.7nochwas.
      Jaja, wenn man's sich mal einfach machen will ... ;-)

      Ah, eins noch:

      for (var i = 0; a[i]; i++)
         {
         d = gestalte_link(document.createElement("p"),a[i]);
         document.getElementById(kennung).appendChild(d);
         }

      Du mußt den Knoten nicht jedesmal neu bauen, einmal reicht. Ich weiß aber aauch nicht, ob das "work on copy" etwas bringt, da bin ich ehrlich, finde aber, das es einfach eleganter aussieht ;-)

      so short

      Christoph Zurnieden

      1. Moin Christoph,

        for (var i = 0; a[i]; i++)
           {
           d = gestalte_link(document.createElement("p"),a[i]);
           document.getElementById(kennung).appendChild(d);
           }

        Du mußt den Knoten nicht jedesmal neu bauen, einmal reicht. Ich weiß aber aauch nicht, ob das "work on copy" etwas bringt, da bin ich ehrlich, finde aber, das es einfach eleganter aussieht ;-)

        Mit stetem Kopieren bin ich schon mal gestandet. Ich glaube, es war mit einem Mozilla 1.6.x unter SuSE; will mich aber nicht darauf festlegen. Daher arbeite ich immer noch mit "frischen" Elementknoten lieber.

        Gruß aus Berlin!
        eddi

        1. Hi,

          Mit stetem Kopieren bin ich schon mal gestandet. Ich glaube, es war mit einem Mozilla 1.6.x unter SuSE; will mich aber nicht darauf festlegen. Daher arbeite ich immer noch mit "frischen" Elementknoten lieber.

          Auha, na, gut zu wissen!

          Aber ich sollte ja wegen der btoa/atob-Sache eigentlich schon vorgewarnt sein, hätte es mir also eigentlich denken müssen ;-)

          so short

          Christoph Zurnieden

          1. Hi Christoph,

            so short

            *lach* auch diesmal will ich ein "so long":

            Aber ich sollte ja wegen der btoa/atob-Sache eigentlich schon vorgewarnt sein,...

            Was ist diese btoa/atob-Sache genau?

            Gruß aus Berlin!
            eddi

            1. Hi,

              *lach* auch diesmal will ich ein "so long":

              Ich habe mir vor einiger Zeit für den Rosenmontag ein Schild geschnitten, auf dem in gülden hinterlegten Lettern prangt:

              NIX GIBT'S!

              und das ich mittlerweile auch zu anderen Zeiten vor die Hautür hänge.

              Aber ich sollte ja wegen der btoa/atob-Sache eigentlich schon vorgewarnt sein,...

              Was ist diese btoa/atob-Sache genau?

              Wie in https://forum.selfhtml.org/?t=108503&m=675803 schon beschrieben: ein Netscape-Builtin für Base-64 Codierung.

              so short

              Christoph Zurnieden