Avatar billede kongknabe Nybegynder
26. juni 2008 - 14:48 Der er 16 kommentarer

Dynamisk indsættelse af <wbr> i textarea?

Hejsa..

Sidder for sjov og roder med at lave et <textarea> der automatisk tilpasser sig i størrelse til den indtastede tekst. Er dog rendt ind i et firefox problem, da denne tilsyneladende ikke understøtter "word-wrap: brek-word", eller wrap="hard"... Eneste måde jeg kan finde en løsning på er at indsætte følgende tag <wbr> mellem hvert bogstav.

Spørgsmålet er så hvordan jeg gør dette smart, og på det rigtige sted mens folk skriver? - Nogle gode forslag?

(Har en funktion der fyre på "input", så mangler bare at finde ud af hvordan jeg indsætter dette tag, og hvordan det skal skrives for at det bliver tolket rigtigt i textareaet, og ikke bare står som tekst "<wbr>", samt hvordan jeg indskriver det umiddelbart der hvor cursoren er osv.)

NB. Dette er primært for sjov... Sidder bare og hygger mig og gik så igang med dette :)
Avatar billede kongknabe Nybegynder
26. juni 2008 - 14:49 #1
Benytter mig i øvrigt af jQuery, så en løsning i henhold til dette ville være lækrest :)
Avatar billede roenving Novice
26. juni 2008 - 14:55 #2
Måske:

onkeyup="this.value=insertBreaks(this.value);"

function insertBreaks(val){
  val = val.replace(/<wbr>/g,"");
  return val.replace(/./g,"$1<wbr");
}
Avatar billede kongknabe Nybegynder
26. juni 2008 - 15:03 #3
Takker, men kan ikke helt overskue hvad du gør i de to sidste linje?

-------
val = val.replace(/<wbr>/g,"");
return val.replace(/./g,"$1<wbr");
Avatar billede kongknabe Nybegynder
26. juni 2008 - 18:56 #4
Hmm.. Hvis jeg skriver "&#8203;" direkte ind i et sted i den tekst der er i mit textarea fra start af virker det fint - Den vælger at bryde linjen der hvis der er brug for det.. men hvis jeg forsøger at tilføje det via Javascript skriver den bare "&#8203;" i selv teksten!?

Forsøger følgende:

$("#JQAEtextarea").val($(this).val()+&#8203;);

(Ikke at det skal se sådan ud på sigt.. prøver bare at få et eller andet til at virke :D)
Avatar billede olebole Juniormester
27. juni 2008 - 02:18 #5
<ole>

Ikke fordi, det gør så meget, da jQuery i forvejen bygger på invalid slamkode, men <wbr> eksisterer ikke i HTML  =)

/mvh
</bole>
Avatar billede olebole Juniormester
27. juni 2008 - 02:19 #6
- og hvis der er tale om brugerinput, undlader du jo bare at indsætte noget i databasen, der er alt for langt. Den slags bliver jo kun skrevet for at drille, så det kan du roligt dumpe  ;o)
Avatar billede kongknabe Nybegynder
27. juni 2008 - 16:13 #7
Hej Ole. er godt klar over at <wbr> ikke er validt, men Firefox forstår det godt, og det er eneste måde jeg lige kan se jeg kan lave dette på i Firefox, og som sagt leger jeg bare ;)

Har du en ide om hvordan jeg gør?
Avatar billede olebole Juniormester
27. juni 2008 - 18:07 #8
Hvis du skal lave det på en fornuftig måde, skal du inkludere en hel dansk ordbog og regler for orddeling på dansk. Hvorfor ikke bare gøre som alle andre steder, hvor man skriver tekst: Lad forfatteren stå for orddelingen  ;o)
Avatar billede kongknabe Nybegynder
27. juni 2008 - 18:20 #9
Nu er mit spørgsmål jo temmelig specifikt... Jeg er forsøger udelukkende at hacke CSS3 proportyen "word-break" til Firefox, og dette er en måde jeg tænker det kunne gøres på... (om end jeg godt er klar over at det vil være en frygtelig grim måde). Hvis du kan hjælpe mig videre i forhold til mit oprindelige spørgsmål, eller hvis du har andre konstruktive forslag hører jeg dem meget gerne.. Men at jeg bare skal lade være kan jeg ærlig talt ikke bruge til så meget! ;)
Avatar billede kongknabe Nybegynder
27. juni 2008 - 19:35 #10
Undkyld - den CSS3 property jeg taler om hedder selvfølgelig "word-wrap", og ikke "word-break" - En bug report/feaure request er i øvrigt sendt til Mozilla.. Spænende at se om det hjælper noget :)
Avatar billede olebole Juniormester
27. juni 2008 - 21:57 #11
Gecko's Range model har ikke metoder eller properties, der kan give dig info om fysiske forhold vedr. et range.
Derfor må du kæmpe dig ud af det med et kontrol-div, hvori du indsætter teksten fra textarea'et - plus et element, hvis placering du finder. Elementets Y-værdi gemmes i en variabel. Hvis elementets Y-værdi er større end sidst, ved vi, sidste linje er for lang - og der må indsættes noget linjebrud. Alt i alt noget af en DOM-øvelse!

Det er ikke helt uden grund, jeg fraråder dig det - og det tror jeg sådan set godt, du kan bruge til noget, selvom du måske endnu ikke ved det  =)
Avatar billede olebole Juniormester
27. juni 2008 - 21:58 #12
- og i det ovenstående scenarium skal der tjekkes på hver keydown eller -up
Avatar billede kongknabe Nybegynder
28. juni 2008 - 17:07 #13
At du bare siger at jQuery er invalid slamkode, og at jeg i øvrigt skal lade være, kan jeg ikke bruge til så meget nej! - Først når du fortælle mig hvorfor du vil fraråde mig det bliver det anvendeligt (Og kommentaren ang. jQuery er under alle omstændigheder overflødig).

Som sagt har jeg en funktion, der i Firefox, fyrer på onInput - altså hver gang der bliver tilføjet eller fjernet et tegn i teksten. - Det eenste jeg ønsker at gøre at at indskrive et <wbr> dynamisk hvergang der bliver indskrevet et andet tegn også. Jeg kan bare ikke finde ud af hvordan jeg indskriver det så det virker, og ikke bare står som tekst.. Går ud fra at det skal escapes på en eller anden måde, men kan ikke finde noget om hvordan?

(Der er enten tale om <wbr> &#8203; eller &shy;)
Avatar billede olebole Juniormester
28. juni 2008 - 17:43 #14
jQuery's mest grundlæggende funktion hedder '$'. Ifølge ECMA 262, som er standarden bl.a. JavaScript bygger på og skal overholde, er $ reserveret til maskingenereret kode og bør derfor ikke anvendes i alm. kode.

jQuery bygger derudover for en stor dels vedkommende på innerHTML, som er yderst uhensigtsmæssig. Jeg har således lige siddet og hjulpet i en anden tråd, hvor spørgeren skød sig selv i foden med et andet kendt JS-library, som også bygger på innerHTML.

Udover at være uhensigtsmæssig har innerHTML aldrig været valid i nogen somhelst standard. Den strider lodret mod hele W3C's model for, hvordan et HTML dokument bør opfattes og bearbejdes - og bliver derfor heller aldrig valid.
Sidst - men ikke mindst - giver innerHTML absolut ingen mening under XHTML.

Både <wbr> &#8203; og &shy; er HTML, og det giver ikke mening at skrive HTML i et textarea. Derfor kan du roligt opgive at komme længere ned ad dén sti.

Tro mig: Det er et stort arbejde, du har foran dig, hvis du vil til at skrive den slags editor ... et alm. textarea vil ikke uden videre kunne omdannes til en sådan  =)
Avatar billede olebole Juniormester
28. juni 2008 - 17:45 #15
- og hvad innerHTML angår, så er der en artikel, der uddyber nogle af pointerne, her:
    http://www.dengodekode.dk/artikler/DOM/no_innerhtml.php
Avatar billede kongknabe Nybegynder
28. juni 2008 - 17:53 #16
Som sagt virker det perfekt hvis jeg fra start af, manuelt, indskriver f.eks. &#8203; mellem hvert bogstav i mit textarea.. Hvorfor kan jeg så ikke indsætte det dynamisk?

Takker for historien ang. jQuery, men du har givet mig den en gang før, hvilket nok også var grunden til at jeg blev lidt små irriteret over at du hev det frem igen, i stedet for at svare på mit egentlige spørgsmål.
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester