10. april 2004 - 17:23Der er
25 kommentarer og 2 løsninger
Lange ord og cellebredde
Hvordan løser man bedst problemet: En <td> er sat til f.eks. 80px bredde. Pludselig er der en eller anden idiot som skriver (f.eks.): sporvognsskinneskidtskrabertillidsmandsmødedagsordenpunkt.
Man kunne splitte teksten op ved " ". Hvis arrayen indholder "ord" der er længere end X antal tegn, juster ordet til X antal tegn, og indsæt et mellemrum, og derefter checkes det næste ord i arrayen :-)
<script type="text/javascript"> function delLangeOrd(txt){ return txt.replace(/(\w{12,})/g,"$1 ");//Alle ord over 12 bogstaver deles i klumper af 12 ... } </script>
Men betyder det virkelig, at man ikke kan få et element i html til at undgå at svulme op når der kommer store ord? Det er da enormt bøvlet at man skal programmere sig igennem hele teksten.
Du matcher alle forekomster af 0-4 ord-tegn, det er vel næppe din mening !-)
delLangeOrd-funktionen skal køres een gang mod teksten ...
-- og problemet er, at tableData-elementer er beregnet til at systematisere data, ikke formattere, det kan gøres med div'er inde i, men er ofte ikke hensigtsmæssigt !o]
{tal} matcher tal tegn {tal,} matcher tal eller flere tegn {tal1,tal2} matcher mindst tal1 og højest tal2 tegn
-- og hvor der i den oprindelige står {12,} skal man angive det maksimale antal bogstaver, som der er plads til, prøv f.eks. med en stribe w'er som test ...
-- og hvis man skal have alle mulige special-tegn med kan man:
<script type="text/javascript"> function delLangeOrd(txt){ var t = "\\wáàãââæåçéèêëìíîïñòóôõöøùúûüýÿ"; var regexp = new RegExp("(["+t+"]{12})","gi");//Alle ord over 12 bogstaver deles i klumper af 12 ... return txt.replace(regexp,"$1 "); } </script>
Det er en liste over de special-bogstaver, man kan støde ind i i en tekst, som er skrevet i Danmark, da vi som regel respekterer andre sprogs bogstaver, og så er æøå også med !-)
Jeg tror nok jeg fandt en løsning som lige akkurat gør det som jeg vil have den til uden at lave tekstbehandling. Det er meget, meget enkelt og suger ikke vand. Mærkeligt nok kan man ikke lave overflow:hidden på en <td>, men man kan på en <div>.
Her er det: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html> <head> <title>Systemkritisk analyse af verbalkvantitiv fejlhåndtering</title> </head>
<body> <table width="300" cellpadding="0" cellspacing="0"> <tr> <td bgcolor="#ff00ff" width="150">Hallo</td> <td bgcolor="#fff0dd" width="150"> <div style="width:150px;overflow:hidden;background-color:red;"> Kammerater!<br> vi skriver en masse ævl men det er på tide vi udvikler vort sprog. sporvognsskinneskidtskrabertillidsmandsmødedagsordenpunkt - nej det ord var for langt osv osv</div> </td> </tr>
nogle svar, tak. Men hvis jeg ville vælge at bruge javascript til orddeling, hvordan gør jeg det så nemmest, når jeg fra serveren udskriver et antal ord/linier, som skal gennem en javascript funktion hos klienten?
Både php og vbscript har integreret brugen af regexps, så det er ikke så forskelligt, du kan gå ind i regexp-kategorien og finde den nøjagtige syntaks til dit scripting-sprog ...
Hvis du synes det er lettere at bruge den nuværende javascript-ting kan du:
<script type="text/javascript"> var txt = "<%=rs("shout")%>"; document.getElementById('TABELCELLEID').innerHTML = delLangeOrd(txt); function delLangeOrd(txt){ var t = "\\wáàãââæåçéèêëìíîïñòóôõöøùúûüýÿ"; var regexp = new RegExp("(["+t+"]{12})","gi");//Alle ord over 12 bogstaver deles i klumper af 12 ... return txt.replace(regexp,"$1 "); } </script>
-- og grunden til at jeg ikke fremhævede, at man kunne bruge divs var, at man ganske ofte får en uhensigtsmæssighed ud af det, f.eks. som på forsiden her, hvor 'Sagt om Eksperten'-boksen oftest er noget vrøvl, fordi en del af en sætning mangler ...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.