m0jo: string umbrechen?

hi,

folgendes Problem.Ich habe eine Stelle in einem template wo ich eine Tabelle definiert habe die sagen wir mal die länge 300px beträgt.
Ich lass mir dort über ein Attribute einen Wert ausgeben den sich der Kunde selbst eintragen kann.Es handelt sich hierbei um einen Link zu einer Grafik.Mit der Grafik selbst soll nichts gemacht werden.Mein Problem ist lediglich wenn der Link zu lang ist,wird da nicht automatisch umgebrochen und es verschiebt die komplette Tabelle auf die länge durch.Enthält der Text Leerzeilen, dann bricht er automatisch um.
Nun soll aber auch der Link umbrechen egal wie bescheuert das nun aussieht.Kann mir jemand eine Lösung dafür vorschlagen?Beispiel:

Wenn der Link länger als 50 Zeichen enthält soll nach dem 50ten Zeichen ein umbruch rein.

Gruß m0jo

  1. hi,

    Wenn der Link länger als 50 Zeichen enthält soll nach dem 50ten Zeichen ein umbruch rein.

    Mache dich mit den Methoden des String-Objektes vertraut, und überlege dir, wie man sie sinnvoll kombinieren könnte, um das gewünschte zu erreichen.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Ich hab mal geschaut.Ich bin nun wirklich nich gut in JS...Aber könnte das so funktionieren?Oder was mache ich noch falsch?
      Was man noch dazu sagen muss ist...der String der übergeben wird steht so im template #Attribute# und enthält eben den String den ich splitten will.Wenn ich denn nun mit onload="spltString(this)" #Attribute# übergebe wird er mir da den String auch auslesen?Oder wie läuft das ab.Nicht das er mir dann versucht #Attribute# zu splitten statt dem eigendlichen Link der da enthalten is.
      Hier mein gebastel...hoffe das taugt irgendwas.

      <script type="text/javascript">
      function splitString(String)
       {
       if(String.length > 31)
        {
        var splitString =    String.split(String.length[31]);
        for(var i = 0; splitString.length; i++)
         {
         document.write(splitString[i] + "<br>");
         }
         }
       else
               {
        document.write(String);
        }
        }
      </script>

      1. Hello out there!

        var splitString =    String.split(String.length[31]);

        Schau doch nochmal nach, was split() als Argument erwartet.

        Vermutlich möchtest du eine andere Methhode nutzen: substr() oder substring()

        Und was soll length[31]?

        See ya up the road,
        Gunnar

        --
        „Wer Gründe anhört, kommt in Gefahr nachzugeben.“ (Goethe)
        1. Hello out there!

          var splitString =    String.split(String.length[31]);

          Schau doch nochmal nach, was split() als Argument erwartet.

          Ja das Problem ist ich habe kein Zeichen nach dem ich suchen und umbrechen kann.Ich will nach Stelle 30 in der Zeichenkette einen umbruch.Nicht nach einem bestimmten buchstaben oder nem Leerzeichen o.ä.

          Und was soll length[31]?

          Naja ich dachte vielleicht splittet er mir ja so an der Stelle.

          Also ich häng grad fest.Wie gesagt ich hab nicht so viel ahnung von JS.

          1. Hello out there!

            Ja das Problem ist ich habe kein Zeichen nach dem ich suchen und umbrechen kann.Ich will nach Stelle 30 in der Zeichenkette einen umbruch.Nicht nach einem bestimmten buchstaben oder nem Leerzeichen o.ä.

            Und wo ist das Problem? Welche Frage dazu blieb nach dem Lesen meines Postings und der verlinkten Stellen noch offen?

            Und was soll length[31]?
            Naja ich dachte vielleicht splittet er mir ja so an der Stelle.

            Du hast nicht gedacht, sondern geraten.

            See ya up the road,
            Gunnar

            --
            „Wer Gründe anhört, kommt in Gefahr nachzugeben.“ (Goethe)
            1. Ich hab nun weiter rumprobiert.Bin jetzt hierdrauf gekommen.

              <html>
              <head>
              </head>
              <body>
              <script type="text/javascript">
               var TEXT = "dddddddddddddddddasdffffffffffffffffsssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssdddddddddddddaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
               var aa = 0;
               var ee = 29;
               counter = 0;
               for(var ii = 0;ii < TEXT.length; ii + 30)
               {
                var breakString[counter] = TEXT.substring(aa,ee);
                document.write(breakString[counter] + "<br>");
                aa = ee + 1;
                ee = ee + 29;
                counter++
               }
              </script>
              </body>

              Aber so funkt das immernoch nicht.Irgendein Fehler auf den ich grad nich komme.

              1. Kann mir hier keiner weiterhelfen?Ich brauch das wirklich dringend.......

              2. Hallo,

                for(var ii = 0;ii < TEXT.length; ii + 30)

                Der Ausdruck »ii + 30« ändert am Wert von ii gar nichts, ii bleibt daher imm 0. Dazu brauchst du schon eine Wertzuweisung, also z.B.
                   ii = ii + 30
                oder
                   ii += 30

                var breakString[counter] = TEXT.substring(aa,ee);

                Was soll breakString[counter] darstellen? Einen Array? Den musst du auch mit new Array() initialisieren und dann kannst du einfach mit array.push() Elemente hinzufügen.

                Ich verstehe aber nicht, wieso du counter, ee und ii brauchst. Eine while-Schleife reicht:

                var text = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";  
                  
                var anfang = 0;  
                var schrittbreite = 30;  
                var breakString;  
                  
                while (anfang < text.length) {  
                 breakString = text.substr(anfang, schrittbreite);  
                 document.write(breakString + "<br>");  
                 anfang += schrittbreite;  
                }
                

                Jetzt mal angenommen, du willst ein im Dokument vorhandenen Link nachträglich mit JavaScript umbrechen:

                <head>  
                <script type="text/javascript">  
                [code lang=javascript]window.onload = kürzeLink;  
                  
                function kürzeLink () {  
                 var schrittbreite = 30;  
                  
                 var text = document.getElementById("link").innerHTML;  
                 var neuerText;  
                  
                 var anfang = 0;  
                 var teilString;  
                 while (anfang < text.length) {  
                  teilString = text.substr(anfang, schrittbreite);  
                  neuerText += teilString + "<br>";  
                  anfang += schrittbreite;  
                 }  
                  
                 document.getElementById("link").innerHTML = neuerText;  
                }
                

                </script>
                </head>
                <body>

                <p><a href="#" id="link">abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ</a></p>

                </body>[/code]

                Mathias

                1. Danke das ist super Hilfreich.Ich hab es auch hinbekommen mit einer for Schleife bevor eine weitere Antwort kam.Ich bin auf folgendes gekommen:

                  <script type="text/javascript">
                   var TEXT = "http://tiffstorage.nexmart.mpcnet.de/20070601_001_101100_13798.tif";
                   var teilText;
                   var i = 0;
                   var e = 29;
                  if(TEXT.length > 30)
                  {
                   for(i; i < TEXT.length; i++)
                   {
                    teilText = TEXT.substring(i,e);
                    document.write(teilText + "<br>");
                    e = e + 29;
                    i = e - 29;
                   }
                  document.write("ende");
                  }
                  else
                  {
                          document.write(TEXT);
                  }
                  </script>

              3. Hello out there!

                var TEXT = "dddddddddddddddddasdffffffffffffffffsssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssdddddddddddddaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
                var aa = 0;
                var ee = 29;
                counter = 0;
                for(var ii = 0;ii < TEXT.length; ii + 30)
                {
                var breakString[counter] = TEXT.substring(aa,ee);

                Bevor du ein Arrayelement ansprechen kannst, musst du das http://de.selfhtml.org/javascript/objekte/array.htm@title=Array erzeugen:
                var breakString = new Array(); – vor der Schleife natürlich!

                Zugriff auf Arrayelemente in der Schleife dann ohne Schlüsselwort 'var':
                breakString[counter] = TEXT.substring(aa,ee);

                Wenn du den so verbesserten Code ausführst, wirst du merken, dass die Schleife ohne Ende läuft und läuft und läuft ...

                Schau dir nochmal die http://de.selfhtml.org/javascript/sprache/schleifen.htm#for@title='for'-Schleife an. In der letzten Anweisung berechnest du zwar 'ii + 30', weist das Ergebnis aber keiner Variablen zu. ii behält also unverändert seinen Wert, du kannst es so oft vergleichen ('ii < TEXT.length') wie du willst, die Schleife terminiert nicht.

                Du meintest vermutlich 'ii = ii + 30', was du auch als 'ii += 30' schreiben kannst.

                Dann läuft das Script zwar durch, erzeugt aber nicht das gewünschte Ergebnis. Das fällt dir auf, wenn du als Teststring nicht einen mit sich unmittlebar nacheinander wiederholenden Zeichen nimmst, sondern z.B. "12345678901234567890123456789012345678901234567890". Die erste Zeile ist länger als die nachfolgenden, und ein Zeichen geht jeweils bei jedem Zeilenwechsel verloren.

                Überhaupt ist dein Script zu kompliziert; bei einer späteren Änderung der Zeichenanzahl pro Zeile möchtest du drei Stellen im Code anpassen? Du hast dir die Erklärungen der Methoden http://de.selfhtml.org/javascript/objekte/string.htm#substr@title=substr() und http://de.selfhtml.org/javascript/objekte/string.htm#substring@title=substring() aufmerksam durchgelesen und dich für die richtige entschieden?

                See ya up the road,
                Gunnar

                PS: Und nicht drängeln!

                --
                „Wer Gründe anhört, kommt in Gefahr nachzugeben.“ (Goethe)