Supportnet Computer
Planet of Tech

Supportnet / Forum / Webseiten/HTML

zeilenumbruch erzwingen





Frage

moin ich versuch gerade herauszufinden, wie man in einer tabellenzelle nach einer gewissen anzahl von zeichen, einen zeilenumbruch erzwingen kann, wenn kein space dazwischen ist. das muss es doch irgendwas geben. bspw. wird ja auch hier bei langen ausdrücken die seite ind sie länge gezogen: YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX nun soll einfach hart, also egal was kommt nach bspw. 30 zeichen ein umbruch gemacht werden. geht das in html oder muss (bitte kein JS)? danke schon mal g, disco

Antwort 1 von Fonda

Irgendwie verstehe ich deine Frage nicht. Du, oder ein Serverskript, bist doch der Autor der Seite. Dann kannst Du doch den Zeilenumbruch selbst ins Dokument schreiben, bzw. das Skript ihn reinschreiben lassen, wo immer Du es möchtest?

Gruß,
Fonda

Antwort 2 von disco

naja, nicht jede seite ist statisch. das ist der html-teil einer jsp-seite. auf das was da aus der datenbank kommt hab ich keinen einfluss. ich könnte zwar auf java-ebene zeilenumbrüche in die strings einbauen, aber da wird es doch bestimmt auch was schickes in html geben, was ich leider nicht finde.

Antwort 3 von rfb

meines Wissens gibts da nix.
du kannst der Tabellenzelle ein style="width:30em;overflow:hidden" mitgeben (oder overflow:scroll), dann wird der Überhang nicht angezeigt (in der 2ten Variante aber scrollbar)
Nicht zum Standard gehört <wbr> :
Zitat:
Mit <wbr> markieren Sie eine Stelle, an der getrennt werden darf, falls diese Stelle bei der Bildschirmanzeige am Ende der Zeile steht (wbr = word break = Umbruch innerhalb eines Wortes). Sinnvoll ist dies bei langen Wörtern.
(SelfHTML)

Antwort 4 von Fonda

Ohne Tabelle:

<html><form>
<input type="text" size="50" maxlength="30" value="YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" disabled>
</form></html>


Gruß,
Fonda

Antwort 5 von Fonda

.. bzw für Clients ohne CSS-Unterstützung

Antwort 6 von rfb

@Fonda:
wozu das Attribut maxlength, zumal in der ungewöhnlichen Konstellation, dass es einen kleineren Wert als size hat, wo doch die Eingabe durch den User eh nicht möglich ist?

Mit disabled verhinderst du übrigens in manchen Browsern (Opera, Firefox) jegliches Scrollen.

Antwort 7 von Fonda

@rfb
Jo, war alles nicht so durchdacht. Dieser Thread überfordert mich irgendwie. :-)

Gruß,
Fonda

Antwort 8 von disco

ok
danke.
werds mir morgen nochmal anschauen.
kann mir vielleicht doch jemand sagen, wie ich das mit nem javascript mache? da hab ich nämlich keine ahnung von.
ansonsten muss ich doch alle X zeichen ein <br/> auf controller-ebene einfügen.

g,
disco

Antwort 9 von AndyZink

Ich weiss nicht ob ich da richtig liege, aber wenn zB. ein zeichen 5px breit ist und du willst ein zeilenbruch nach 10 Zeichen haben, dann setzte doch ein Attrib das die Zelle nur 50px breite haben darf.
z.B.: <td width="50px" height="100%">

Gruß
Andy

Antwort 10 von rfb

@AndyZink:
das hatten wir schon vorgeschlagen (A3) mit der Einheit em, die unabhängig von der Zeichengröße sich immer relativ auf die Zeichengröße des m bezieht. Der Vorteil gegenüber Angaben in px ist klar.

Was du nicht klärst ist: was passiert mit dem, was nicht reinpasst. Einen Zeilenumbruch mitten im Wort macht kein Browser. Also wird es ohne weitere Angaben zu Anzeigekonflikten kommen, die jeder Browser anders löst (Tabellenzelle wird trotzdem ausgedehnt oder Text läuft aus der Tabellenzelle). Daher die Eigenschaft overflow.

Antwort 11 von rfb

folgende Funktion im head-Bereich


<script type="text/javascript">
<!--
function trenne(wo) {
var zelle=document.getElementsByTagName("td")
for (var j=0; j<zelle.length; j++) {
 var txt=zelle[j].firstChild.data;
 if (txt.length>wo) {
  var y=txt.slice(0,wo-1);
  txt=txt.slice(wo);
  zelle[j].firstChild.data=y;
  var br=document.createElement("br");
  zelle[j].appendChild(br);
  var t=document.createTextNode(txt);
  zelle[j].appendChild(t);
  }
 }
}
//-->
</script>


Aufruf erfolgt mit onload im body-Tag:

<body onload="trenne(30)">


Arbeitsweise: nach dem Laden der Seite (onload) startet die Funktion und prüft in allen Tabellenzellen (td) ob der Inhalt größer als 30 Zeichen ist (einstellbar bei onload="trenne(30)" ).
Andernfalls wird der Zelleninhalt zerlegt.
Im ersten Schritt werden die ersten 30 Zeichen eingefügt, dann ein br-Kindknoten erzeugt und dann ein weiterer Textknoten, der den Rest enthält.

Antwort 12 von rfb

funktioniert zwar vermutlich trotzdem, aber ein ; fehlt im Script:

...
var zelle=document.getElementsByTagName("td");
...


Antwort 13 von rfb

neue Version:
  • ein Fehler beseitigt (das letzte Zeichen der ersten Zeile wurde abgeschnitten)
  • bei sehr langen Texten wird mehrfach umgebrochen
    
    <script type="text/javascript">
    <!--
    function trenne(wo) {
    var zelle=document.getElementsByTagName("td");
    for (var j=0; j<zelle.length; j++) {
     var txt=zelle[j].firstChild.data;
     if (txt.length>wo) {
      zelle[j].firstChild.data=txt.slice(0,wo);
      do {
      txt=txt.slice(wo);
      var br=document.createElement("br");
      zelle[j].appendChild(br);
      var t=document.createTextNode(txt.slice(0,wo));
      zelle[j].appendChild(t);
      } while (txt.length>wo);
      }
     }
    }
    //-->
    </script>
    


  • Antwort 14 von disco

    danke rfb.

    klappt an sich super (auf einer statischen html-seite). aber leider nicht auf dem dynamischen jsp anteil meiner seite.
    ich vermute mal, dass es daran liegt, dass deine funktion ausgeführt wird, bevor meine jsp-variablen den string ins <td> feld setzen.
    gibt es da eine möglichkeit trenne() erst dann aufzurufen, wenn alles andere (inkl. der jsp-verarbeitung) durchgelaufen ist?

    Antwort 15 von Fonda

    Darf ich Dich mal fragen, warum Du es nicht in direkt in Java machen willst? Es gibt nämlich weder eine einfachere noch eine bessere Lösung. Wahrscheinlich gibt es überhaupt nicht einmal eine einzige andere brauchbare Lösung.

    Übrigens wird Java Skript, wenn überhaupt, erst dann ausgeführt, wenn die JSP-Seite den Server längst verlassen hat.

    Gruß,
    Fonda

    Antwort 16 von disco

    ich hab schon herausgefunden warum es nicht geht:
    http://www.jsp-develop.de/knowledgebase/print/271/

    im nachinein ist mir auch eingefallen, dass JS clientseitig ist, weswegen meine frage blödsinn war.

    ich weiss nicht wie du programmierst, aber im normalfall versucht man zwischen logik und anzeige zu trennen. weswegen ich versuche die probleme, die den reinen auswurf als HTML-Code betreffen, dort zu lösen wo sie entstehen. schon alleine für die kosten.

    ich sehe auch ein, dass das in manchen fällen vielleicht mehr nerven raubt und zeit kostet, als da fix ne serverseitige lösung zu finden. aber das macht es auch oft für nachfolgende programmierer schwerer, die nur die jsp-seiten bearbeiten und keinen plan von java oder den methoden dahinter haben, weil sie nur die variablennamen kennen (müssen).

    ansonsten nochmal danke rfb.

    Antwort 17 von Fonda

    Zitat:
    ich weiss nicht wie du programmierst, aber im normalfall versucht man zwischen logik und anzeige zu trennen.

    Kannst Du doch durch eine benutzerdefinierte Funktion, oder was immer es entsprechendes in Java gibt ..

    Ich möchte kostenlos eine Frage an die Mitglieder stellen:


    Ähnliche Themen:


    Suche in allen vorhandenen Beiträgen: