14. oktober 2006 - 15:07
Der er
27 kommentarer og 1 løsning
Opdatering af innerHTML
Hej eksperter! Jeg har i øjeblikket denne her kode: function setResult(ta) { document.getElementById("result").innerHTML = ta.value; } Der opdaterer en div, med hvad indholdet er i et textarea. Det fungerer også fint, men nu vil jeg gerne ha sat noget Reg Exp kode i den, så når man laver mellemrum (<br>) i teksten, bliver der også lavet et mellemrum i div'en. På forhånd tak
Annonceindlæg tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
14. oktober 2006 - 15:14
#1
Hvordan ser værdien ud ?-)
14. oktober 2006 - 15:15
#2
Værdien - hvad mener du?
14. oktober 2006 - 15:17
#3
Omkring mit textarea ser det sådan her ud: onkeyup="setResult(this);"
14. oktober 2006 - 15:19
#4
Hvordan ser ta.value ud, hvis der er 'mellemrum' ?-)
14. oktober 2006 - 15:20
#5
Så laver den intet mellerum. Går ud fra man bare skal bruge vbCrlf :-)
14. oktober 2006 - 15:29
#6
vbCrlf virker jo selvfølgelig ikke i javascript, men du må vise, hvad der er i den tekststreng, der findes i ta.value, før det giver mening at foreslå noget !-)
14. oktober 2006 - 15:40
#7
14. oktober 2006 - 15:44
#8
vbCrlf hedder i javascript \n eller \r\n, så f.eks. ta.value.replace(/(\r\n|\n|\r)/g,"<br>");
14. oktober 2006 - 15:45
#9
Hvor skal jeg smide det ind henne i min funktion? function setResult(ta) { document.getElementById("result").innerHTML = ta.value; } JavaScript er sgu ikke lige min stærke side må jeg nok indrømme :-)
14. oktober 2006 - 15:46
#10
En anden ting er, at denne teknik ikke vil holde overfor kommende udgaver af browsere, da innerHTML aldrig har været en del af (x)html-DOM, så denne måde at introducere elementer på ikke er valid.
14. oktober 2006 - 15:46
#11
= ta.value.replace(/(\r\n|\n|\r)/g,"<br>");
14. oktober 2006 - 15:53
#12
Ok - men nu virker det i hvert fald. Kan man putte flere replacer ind, vil nemlig også gerne ha smidt mine smileyer på?
14. oktober 2006 - 15:57
#13
Det kan man godt, men du burde gøre noget andet, nemlig erstatte disse specielle ting med elementer, der oprettes !-)
14. oktober 2006 - 15:58
#14
Ok, er det noget du kan hjælpe med? :-) Som sagt er min stærke side ikke ligefrem JavaScript.
14. oktober 2006 - 16:08
#15
Hvordan ser dine smiley-koder ud ?-)
14. oktober 2006 - 16:13
#16
Fx. sådan her: strText = Replace(strText,":-)","<img height='15' width='15' src='/Pictures/Smileys/smiley.gif'>") Det er jo så skrevet i ASP :)
14. oktober 2006 - 16:24
#17
Det vil sige, at du har en række smileys, som er definerede uden special-tegn !-) -- der må du så lave en lille database, som et script kan bruge ... -- kigger lige på det !o]
14. oktober 2006 - 16:26
#18
Ok - men... Hvorfor en database? Sådan har jeg ikke gjort det nu i min Reg Exp i mit ASP.
14. oktober 2006 - 16:43
#19
-- hvis du skal gøre det på den gammeldags måde med innerHTML, kan du gøre det på samme måde: function setResult(ta){ var txt = ta.value; txt = txt.replace(/(\r\n|\n|\r)/g,"<br>"); txt = txt.replace(/:\-\)/g, "<img height='15' width='15' src='/Pictures/Smileys/smiley.gif'>"); txt = txt.replace(/:\-\(/g, "<img height='15' width='15' src='/Pictures/Smileys/sursmiley.gif'>"); //osv. document.getElementById("result").innerHTML = txt; } -- bemærk escapingen af visse tegn, som har special-betydninger i RegExps !-)
14. oktober 2006 - 16:47
#20
Uh ha - det spiller så pænt godt. Man kan ikke undgå at den henter smileyerne hele tiden, vel?
14. oktober 2006 - 17:17
#21
Det der med smileyerne sker, fordi browseren lige spørger, om der er kommet en ny udgave !-) En udgave, som skulle være fremtidssikret, kunne se således ud: <script type="text/javascript"> function setResult(ta){ var sm = [], reg, img, num; sm[0] = ["","[0]"]; sm[sm.length] = [":\\-\\)","/Pictures/Smileys/smiley.gif"];//bemærk dobbelt-escape: ')' --> '\\)' sm[sm.length] = [":\\-\\(","/Pictures/Smileys/sursmiley.gif"]; sm[sm.length] = [";\\-\\)","/Pictures/Smileys/smileyglimt.gif"]; var div = document.getElementById("result"); while(div.firstChild) div.removeChild(div.firstChild); var txt = ta.value.replace(/(\r\n|\n|\r)/g,"[:0]"); for(j=1,jm=sm.length;jm>j;j++){ reg = new RegExp(sm[j][0],"g"); txt = txt.replace(reg, "[:" + j + "]"); } txt = txt.split(/\[:/g); div.appendChild(document.createTextNode(txt[0])); for(i=1,im=txt.length;im>i;i++){ if(txt[i].indexOf("0]") == 0){ div.appendChild(document.createElement("br")); txt[i] = txt[i].replace("0]",""); }else{ num = +txt[i].replace(/^(\d+)].*$/,"$1"); //alert(num); img = document.createElement("img"); img.setAttribute("src",sm[num][1]); img.setAttribute("width",15); img.setAttribute("height",15); div.appendChild(img); txt[i] = txt[i].replace(/^\d+\]/,""); } div.appendChild(document.createTextNode(txt[i])); } } </script> -- og bemærk så, at tegnene her skal _dobbelt_-escapes ... -- og det er ikke testet for alvor, jeg har alene checket, at den foretager den korrekte udskiftning ... -- men som du måske kan fornemme, vil ovenstående æde en hel masse kræfter (men det betyder nok intet udover netop hentningen af billederne !-)
14. oktober 2006 - 17:26
#22
Hov, det vil nok være smart at sætte alt-attributten (og tekst-attributter hele vejen !-) img.setAttribute("width","15"); img.setAttribute("height","15"); img.setAttribute("alt","smiley");
14. oktober 2006 - 17:33
#23
Ok, det lader til at fungere bedre end den anden. 1000 tak for den store hjælp, smid et svar :-)
14. oktober 2006 - 17:34
#24
Men der er en fejl i dit script :-( Prøv at log ind på siden jeg skrev til dig og så skriv som det første ":-)" (bare et smiley), så sætter den 1]
14. oktober 2006 - 17:54
#25
Ja, jeg har også lige opdaget, at den i IE ikke opdager den første (tomme) tekst-node, hvis man starter med en smiley ... Erstat linjerne: ... txt = txt.split(/\[:/g); div.appendChild(document.createTextNode(txt[0])); for(i=1,im=txt.length;im>i;i++){ ... med: ... txt = txt.split(/\[:/g); var st = 0; if(!txt[0].match(/^\d+\]/)){ div.appendChild(document.createTextNode(txt[0])); st = 1; } for(i=st,im=txt.length;im>i;i++){ ... -- og selvom det nok er usandsynligt, at det forekommer ofte, så skal den selvfølgelig ikke fejle !-) Velbekomme '-)
14. oktober 2006 - 18:15
#26
Nu virker det :-) Kan du evt. lige hurtig hjælpe mig med at få lavet så hvis der er 0 tegn i textareaet skal den sætte rette på display i stylen? Det er vel en funktion jeg skal sætte i onKeyUp på min textarea.
14. oktober 2006 - 18:24
#27
Der er også en anden lille ting. Hvis man skriver <b>Denne tekst med fed</b> skriver den bare <b>Denne tekst med fed</b> - hvorfor gør den det ikke til fed? Det gjorde den før :-)
15. oktober 2006 - 11:32
#28
Fordi man ikke, ifølge w3c, må indsætte elementer, uden at oprette dem. Derfor har jeg i ovenstående kode brugt tekstnoder til at indsætte teksten ... -- hvis det også skal være muligt at bruge b- (og f.eks. i-) tags, skal der strikkes en del om (da smileys jo også kan forekomme midt inde i teksten !-) -- hrm, jeg ville nok være doven nok til at lade det hvile !o]
Vi tilbyder markedets bedste kurser inden for webudvikling