Avatar billede madeindk Nybegynder
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
Avatar billede roenving Novice
14. oktober 2006 - 15:14 #1
Hvordan ser værdien ud ?-)
Avatar billede madeindk Nybegynder
14. oktober 2006 - 15:15 #2
Værdien - hvad mener du?
Avatar billede madeindk Nybegynder
14. oktober 2006 - 15:17 #3
Omkring mit textarea ser det sådan her ud: onkeyup="setResult(this);"
Avatar billede roenving Novice
14. oktober 2006 - 15:19 #4
Hvordan ser ta.value ud, hvis der er 'mellemrum' ?-)
Avatar billede madeindk Nybegynder
14. oktober 2006 - 15:20 #5
Så laver den intet mellerum. Går ud fra man bare skal bruge vbCrlf :-)
Avatar billede roenving Novice
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 !-)
Avatar billede madeindk Nybegynder
14. oktober 2006 - 15:40 #7
Du kan se det her: http://betatest.alcopeople.dk/Users/EditProfile/ProfileText/Default.asp

Så skal du bare logge ind med: testbruger / test
Avatar billede roenving Novice
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>");
Avatar billede madeindk Nybegynder
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 :-)
Avatar billede roenving Novice
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.
Avatar billede roenving Novice
14. oktober 2006 - 15:46 #11
= ta.value.replace(/(\r\n|\n|\r)/g,"<br>");
Avatar billede madeindk Nybegynder
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å?
Avatar billede roenving Novice
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 !-)
Avatar billede madeindk Nybegynder
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.
Avatar billede roenving Novice
14. oktober 2006 - 16:08 #15
Hvordan ser dine smiley-koder ud ?-)
Avatar billede madeindk Nybegynder
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 :)
Avatar billede roenving Novice
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]
Avatar billede madeindk Nybegynder
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.
Avatar billede roenving Novice
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 !-)
Avatar billede madeindk Nybegynder
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?
Avatar billede roenving Novice
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 !-)
Avatar billede roenving Novice
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");
Avatar billede madeindk Nybegynder
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 :-)
Avatar billede madeindk Nybegynder
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]
Avatar billede roenving Novice
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 '-)
Avatar billede madeindk Nybegynder
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.
Avatar billede madeindk Nybegynder
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 :-)
Avatar billede roenving Novice
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]
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