09. juni 2004 - 12:29Der er
22 kommentarer og 1 løsning
Hvordan "knækker" man en lang linje og fjerner linjeskift?
Hej eksperter (igen igen)
Jeg har et textarea, hvor man kan indtaste en sms-besked. Ved siden af tekstarea'et, bliver meddelelsen opsummeret, så man nogenlunde kan se, hvordan den færdige sms vil se ud. (Der tilføjes nemlig per automatik forskellige tekststumper, som brugeren ikke har mulighed for at fjerne, men som han skal have mulighed for at se.)
Men jeg vil gerne have fjernet de linjeskift, brugeren eventuelt vælger at "pynte" sin sms med (da linjeskiftene alligevel ikke kan indgå i den færdige sms-besked). Desuden skal beskeden/teksten "knækkes" efter et antal karakterer - igen for at simulere den måde, hvorpå en sms vises på en mobiltelefon.
...jeg har en <p id="feltSumMsg"></p> et sted i body på htmldokumentet. ...en javascript-funktion i toppen af dokumentet sørger for at samle/opsummere den indtastede tekst (fra et textarea) i variablen sumMsg. ...den samme funktion udfører den ovennævnte getElementById. ...funktionen gennemløbes hver gang brugeren tilføjer en ny karakter til textarea.
*grlmpff* *host* >>mm12010 ... din løsning er noget over det ydmyge begynderstadie jeg jonglerer på. Jeg er sikker på at det virker (tester lige), men kunne man ikke udbede sig bare en lillebitte kort forklaring til visse af detaljerne i:
str=str.replace(/\s/gi,"\40");//erstatter alle forekomster mellemrumstegn incl linieskift med alm mellemrum for(i=0;i<str.length;i++){//løber teksten igennem if(i%tegn==tegn-1&&str.charAt(i)!="\40"){ temp+=str.charAt(i)+"<br>";//hvis den ønskede linielængde er nået tilføjes et linieskift } else{ temp+=str.charAt(i);//ellers forstætter vi }
...det du kaldte str har jeg erstattet med sumMsg, som er den variabel, der i en anden funktion samler den tekst som indtastes af brugeren (+ lidt andet). Desuden har jeg tilføjet den der getElementById-sætning - den lå i en anden funktion før.
...har forsøgt mig uden &&str.charAt(i)!="\40", men det gør ingen forskel. Der er intet af det jeg indtaster, som kommer med over i <p id="feltSumMsg">
det bliver lidt kringlet at forklare men jeg prøver :o)
i%tegn==tegn-1 //<< hvis tegn nummer 'i' modulus antallet af tegn pr linie, er lige med antallet af tegn pr linie minus 1(da man man starte med nul), så har vi nået den ønkede linielængde, og derfor skal vi ha et linieskift
sumMsg.charAt(i)!="\40" //<< hvis tegnet på den pågældende placering så er et mellemrum behøver vi ikke linieskiftet, da linien automatisk brydes hvis det er defineret width på det p-tag vi indsætter teksten i
...ja det burde jeg vel vide nu efterhånden (har lige haft et andet problem, hvor det var "return" der spøgte). Men nu er return blevet sparket ud - og jeg kan stadig ikke få det til at virke. Har forsøgt med:
Hæhæ - nu virker det alligevel. Havde kaldt funktionen makeSMS efter "return true;" - så altså igen en return der spøgte. Tak for hjælpen igen igen. Vil du >>mm12010 være så elskværdig at sende mig en smule svar, så jeg taknemmeligt kan tildele dig nogle velfortjente points? :))
...bare et lille sidste spørgsmål (såfremt du har tid): Du har sat funktionen til 5 tegn (inden den knækker linjerne) - jeg har lige forsøgsvis ændret det til 20, men så opfører linjeknækkene sig lidt besynderligt - hvorfor? Skal der ændres på det der tal "\40" også?
Hmmmm. Nu har jeg forsøgt igen - med og uden ovenstående. Det ser ud som om, at det er når jeg laver et linjeskift, at der foregår noget mystisk. Linjeskiftet bliver udskiftet med et mellemrum (som det også skal), men de to efterfølgende linjer "knækker" inden de (eksempelvis) 20 tegn er nået (der indsættes per automatik et <br> inden 20-1 er nået). Herefter knækker linjerne igen som de skal. Linjeskiftet giver kludder i regnskabet (modulus?) - og jeg kan simpelthen ikke greje hvorfor...?!?
Nu har jeg testet frem og tilbage, med din gode ide med tallene.
...og dumme mig...jeg kan nu se, at det er mig, der ikke har været opmærksom på, at feltet, hvor teksten (temp) skrives, ikke er helt bred nok til de 20 tegn, som jeg har testet med. Så i de sætninger hvor der er mange "brede" bogstaver, bliver linjerne "knækket" i det nærmeste mellemrumstegn. Linjer med mange "smalle" bogstaver er der rigelig plads til. Det gav altså en noget forvirrende linjedeling.
Så alt er ok - og tusind tak for hjælpen igen igen :)) Kan man tilbyde dig lidt ekstra points for den yderligere service, jeg har fået udover spørgsmålets afslutning?
...løsningen var blandt også at tilføje et style til "feltSumMsg"-feltet, således at dette felt skrive med en monotype-skrifttype. Nu skulle der ikke være problemer uanset om der er tale om "brede" eller "smalle" bogstaver... ;)
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.