Avatar billede madsmm Nybegynder
14. juni 2007 - 10:51 Der er 6 kommentarer og
1 løsning

lav wellformed html

Hej,

Jeg har et script der skal rydde op i brugerindtastet tekst, hvor det skal sikre at der er lige mange start og end tags i, den tekst brugerne skriver:

    function makeWellFormed(id){

        var lmnt = document.getElementById(id);
        var tags = Array('b','i','u');
        var missingTags = Array();

        var str = lmnt.value;
        for (i=0;i<tags.length;i++) {
            count = 0;
            search = '<';
            pos = str.indexOf(search.concat(tags[i],'>'));
            while ( pos != -1 ) {
              count++;
              pos = str.indexOf(search.concat(tags[i],'>'),pos+1);
            }
            count = 0;
            pos2 = str.indexOf('</'+tags[i]+'>');
            while ( pos2 != -1 ) {
              count++;
              pos2 = str.indexOf('</'+tags[i]+'>',pos2+1);
            }
            if ((pos-pos2)>0) {
                for (j=0;j<(pos-pos2);j++) {
                    str += '</'+tags[i]+'>';
                }
            }
        }
        lmnt.value = str;
    }


problemet er bare at den finder ingen tags.

Hvis jeg udfører en normal str.indexOf('<b>'); virker det fint, men denne:
  pos = str.indexOf(search.concat(tags[i],'>'));
returnerer -1 hver gang, har også prøvet med:
  pos = str.indexOf('<'+tags[i]+'>'));
og
  pos = str.indexOf("<"+tags[i]+">"));

nogen der har en god forklaring på det?
Avatar billede erikjacobsen Ekspert
14. juni 2007 - 11:04 #1
Nej, for det du skriver virker forsåvidt: http://n0p.com/783064.php
Og vil også virke med "+" i stedet for concat.
Avatar billede madsmm Nybegynder
14. juni 2007 - 11:09 #2
hmm, meget mystisk...
Avatar billede madsmm Nybegynder
14. juni 2007 - 11:21 #3
og så slet ikke så mystisk endda...

    function makeWellFormed(id){

        var lmnt = document.getElementById(id);
        var tags = Array('b','i');

        var str = lmnt.value;
        for (i=0;i<tags.length;i++) {
            count = 0;
            pos = str.indexOf('<'+tags[i]+'>');
            while ( pos != -1 ) {
              count++;
              pos = str.indexOf('<'+tags[i]+'>',pos+1);
            }
            count2 = 0;
            pos2 = str.indexOf('</'+tags[i]+'>');
            while ( pos2 != -1 ) {
              count2++;
              pos2 = str.indexOf('</'+tags[i]+'>',pos2+1);
            }
            if ((count-count2)>0) {
                for (j=0;j<(count-count2);j++) {
                    str += '</'+tags[i]+'>';
                }
            }
        }
        lmnt.value = str;
    }

virker
Avatar billede madsmm Nybegynder
14. juni 2007 - 11:22 #4
og tak for input Erik. Det fik mig til at nærlæse koden.. hvilket jo tit løser problemerne.
Avatar billede erikjacobsen Ekspert
14. juni 2007 - 11:37 #5
Hvad var problemet ?
Avatar billede madsmm Nybegynder
14. juni 2007 - 11:40 #6
den fandt sådan set tags rigtigt nok, men jeg tjekkede på de forkerte variable:

            if ((pos-pos2)>0) {
blev til:
            if ((count-count2)>0) {
og så virkede det sørme :)
Avatar billede erikjacobsen Ekspert
14. juni 2007 - 11:52 #7
;)
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