Avatar billede and_ Nybegynder
24. september 2003 - 11:57 Der er 48 kommentarer og
1 løsning

Replace-funktion som fejler - Hvorfor?

Hej Rødder ;)

Jeg har denne funktion som bliver ved at fejler... hvorfor?

Lad høre :)

frames.editor.document.body.innerHTML.replace(<?xml:.*?/>, "");
frames.editor.document.body.innerHTML.replace(<o:p>&nbsp;</o:p>, "");
frames.editor.document.body.innerHTML.replace(o:, "");
frames.editor.document.body.innerHTML.replace(<st1:.*?>, "");
Avatar billede and_ Nybegynder
24. september 2003 - 11:59 #1
den får faktisk hele <script language="javascript">-blokken til at fejle....

Hvis jeg fjerner funktionen fra scriptet, er der ikke nogen fejl med resten, men lige så snart jeg sætter den ind igen, fejler hele scriptet....
Avatar billede roenving Novice
24. september 2003 - 12:11 #2
Du mangler tekst-afgrænserne:

frames.editor.document.body.innerHTML.replace('<?xml:.*?/>', "");
frames.editor.document.body.innerHTML.replace('<o:p>&nbsp;</o:p>', "");
frames.editor.document.body.innerHTML.replace('o:', "");
frames.editor.document.body.innerHTML.replace('<st1:.*?>', "");
Avatar billede erikjacobsen Ekspert
24. september 2003 - 12:11 #3
frames.editor.document.body.innerHTML.replace("<?xml:.*?/>", "");

...osv
Avatar billede and_ Nybegynder
24. september 2003 - 12:16 #4
den fejler ihvertfald ikke nu, men den fjerner nu ikke detr den skal...

Funktionen bliver benyttet i en wysiwyg-editor. Den "renser" indholdet når der bliver pastet noget ind fra word.....

Den placerer jo en masse gejl i koden som man paster....

Hvordan er det egentlig muligt at kunne "gribe" når en bruger bruger ctrl+v

Dette skal fx. bruges til at når brugeren paster vha. tastaturet, skal editoren automatisk køre funktionen rensWord()
Avatar billede erikjacobsen Ekspert
24. september 2003 - 12:21 #5
Mener du at det er regulære udtryk du vil ersattet skal du fx:

frames.editor.document.body.innerHTML.replace(/<\?xml:.*?\/>/, "");
Avatar billede and_ Nybegynder
24. september 2003 - 12:23 #6
en paste fra word ser fx sådan ud når man kigger på kildekoden:

&nbsp;
<P align=left>Fd</P>
<P align=left>Fds</P>
<P align=left>F</P>
<P align=left>Sd</P>
<P align=left>F</P>
<P align=left><B normal? ?mso-bidi-font-weight:>Ds<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></B></P>
<P align=left><B normal? ?mso-bidi-font-weight:><I normal? ?mso-bidi-font-style:>F<U>d</U>s<o:p></o:p></I></B></P>
<P align=left>F</P>
<P align=left>Sd</P>
<P align=left>fd</P>

Scriptet skulle så fjerne eksempelvis <?xml - og så frem til tagget slutter...

Man kan jo ikke ligefrem påstå at ms word overholder w3c når man paster...
Avatar billede ocp Nybegynder
24. september 2003 - 12:27 #7
Du kan ikke bruge ? da det er et wildcard - brug \? i stedet.
Avatar billede and_ Nybegynder
24. september 2003 - 12:29 #8
nope - virker ikke
Avatar billede roenving Novice
24. september 2003 - 12:30 #9
/<?xml:[\w \"\:-]*/>/
Avatar billede and_ Nybegynder
24. september 2003 - 12:30 #10
Man skal lige huske på at indholdet kan være dynamisk indenfor taggens'ene
Avatar billede and_ Nybegynder
24. september 2003 - 12:31 #11
Nu er jeg ikke lige ekspert i javascript og den måde som eksperten "retter" scripts'ene for at poste dem... Hvordan skal det der skrives?
Avatar billede roenving Novice
24. september 2003 - 12:32 #12
Hov, der skal en \ mere:

/<?xml:[\w \"\:-]*\/>/
Avatar billede erikjacobsen Ekspert
24. september 2003 - 12:32 #13
Eller

str.replace(/<\?xml:[^>]*>/mg, "");
Avatar billede roenving Novice
24. september 2003 - 12:32 #14
frames.editor.document.body.innerHTML.replace(/<?xml:[\w \"\:-]*\/>/, "");
Avatar billede erikjacobsen Ekspert
24. september 2003 - 12:33 #15
Og husk at tage resultatet igen ;)

str=str.replace(/<\?xml:[^>]*>/mg, "");
Avatar billede and_ Nybegynder
24. september 2003 - 12:36 #16
Kald mig bare dum (rødmer)...

Jeg fatter ikke en bønne af alle de skråatreger osv.
Avatar billede ocp Nybegynder
24. september 2003 - 12:43 #17
Skråstregerne / opdeler en regular expression i to dele. Efter første / står din expression, efter anden / dine options.
\ benyttes for at sikre at det efterfølgende tegn ikke bliver fortolket som et af de "reserverede" tegn i syntaksen.
Avatar billede roenving Novice
24. september 2003 - 12:47 #18
-- og husk at smide værdien tilbage:
frames.editor.document.body.innerHTML = frames.editor.document.body.innerHTML.replace(/<?xml:[\w \"\:-]*\/>/, "");

-- som erik skriver !-)
Avatar billede and_ Nybegynder
24. september 2003 - 12:51 #19
den fjerner ikke en bønne fra teksten. Jeg har prøvet at copypaste det ind her fra exp., men det vil ikke virke
Avatar billede erikjacobsen Ekspert
24. september 2003 - 12:52 #20
Hvad skriver du?
Avatar billede and_ Nybegynder
24. september 2003 - 12:54 #21
????????? hvad mener du?

copy fra min kode:

frames.editor.document.body.innerHTML = frames.editor.document.body.innerHTML.replace("<?xml:[\w \"\:-]*\/>", "");
Avatar billede erikjacobsen Ekspert
24. september 2003 - 12:57 #22
Det står ingen steder. Husk /-erne i stedet for "-erne
Avatar billede and_ Nybegynder
24. september 2003 - 12:58 #23
så fejler scriptet:

frames.editor.document.body.innerHTML = frames.editor.document.body.innerHTML.replace(<?xml:[\w \"\:-]*\/>, "");
Avatar billede erikjacobsen Ekspert
24. september 2003 - 13:00 #24
Husk /-erne i stedet for "-erne
Avatar billede and_ Nybegynder
24. september 2003 - 13:02 #25
det er jo direkte copypaste herinde fra....

Jeg forstår ikke det med /-erne istedet for "-erne
Avatar billede roenving Novice
24. september 2003 - 13:02 #26
document.getElementById('minSpan').innerHTML = document.getElementById('minSpan').innerHTML.replace(/<?xml:[^>]*\/>/gi, "");
Avatar billede and_ Nybegynder
24. september 2003 - 13:06 #27
så skete der sgu noget ;)

Kan man tillade sig at spørge om en lille forklaring på: replace(/<?xml:[^>]*\/>/gi, "");

Hvad det forskellige betyder *står og roder genert med foden i jorden og forsøger at undgå øjenkontakt*.....

Hvordan river man fat i ctrl+v - Jeg smider flere point på ;)
Avatar billede and_ Nybegynder
24. september 2003 - 13:09 #28
Hvordan kan jeg også eksempelvis hive fat at det bare skal være normalt <i> tag istedet for: <I normal? ?mso-bidi-font-style:>

Den gør det fx. også med <b>
Avatar billede erikjacobsen Ekspert
24. september 2003 - 13:11 #29
Du erstatter bare <i ....> med <i> - på samme måde som de steder du fjerner det
Avatar billede and_ Nybegynder
24. september 2003 - 13:21 #30
hmmmmm, sjovt nok skal funktionen køres flere gange for at fjerne alt.

Og hvis vi kigger på fx. <b> tagget - Så placerer den nogle ekstra </b> når funktionen kører:

frames.editor.document.body.innerHTML = frames.editor.document.body.innerHTML.replace(/<?xml:[^>]*\/>/gi, "");
frames.editor.document.body.innerHTML = frames.editor.document.body.innerHTML.replace("<o:p>", "")
frames.editor.document.body.innerHTML = frames.editor.document.body.innerHTML.replace("</o:p>", "")
frames.editor.document.body.innerHTML = frames.editor.document.body.innerHTML.replace(/<I[^>]*\>/gi, "<I>");
frames.editor.document.body.innerHTML = frames.editor.document.body.innerHTML.replace(/<B[^>]*\>/gi, "<B>");
alert('Funktion færdigkørt');


Jeg ved godt at jeg er besværlig, men jeg forsøger at lære ;)

Jeg er villig til at dele flere point ud...
Avatar billede and_ Nybegynder
24. september 2003 - 13:23 #31
Det skulle jo helst være at funktionen kun skal køres en gang for at rense det hele...
Avatar billede and_ Nybegynder
24. september 2003 - 13:28 #32
derudover fjerner den heller ikke <? fra det med xml'en
Avatar billede erikjacobsen Ekspert
24. september 2003 - 13:37 #33
Som vi har forsøgt at sige dig ;)

frames.editor.document.body.innerHTML.replace(/<\?xml:[^>]*\/>/gi, "");

Hvad er det der tager flere gange om at blive fjernet?
Avatar billede and_ Nybegynder
24. september 2003 - 13:42 #34
hmmm, havde ikke lige set den sidste skråstreg.....

Funktionen skal køres en 3-4 gange for at fjerne alt indholdet i dokumentet....

Det skulle jo helst være sådan at den kun skal køres én gang for at fjerne det hele....

Det varer lidt tid før jeg svarer igen - skal lige en tur til kiropraktor....
Avatar billede erikjacobsen Ekspert
24. september 2003 - 13:44 #35
Hvad er det der tager flere gange om at blive fjernet?
Avatar billede and_ Nybegynder
24. september 2003 - 13:46 #36
alt det som skal replaces.....

Funktionen skal køres 3-4 gange før det hele er replacet....
Avatar billede and_ Nybegynder
26. september 2003 - 12:44 #37
I skal jo smide svar for at få point :)

Undskyld det har taget noget tid at komme tilbage, men jeg har ligget langs med min ryg efter turen til kiropraktoren.....
Avatar billede erikjacobsen Ekspert
26. september 2003 - 12:49 #38
Jeg vil ad ikke svare før den virker. Kan du komme med eet eksempel på
tekst, der skal køre igennem flere gange?
Avatar billede and_ Nybegynder
26. september 2003 - 12:52 #39
Denne tekst fra word:

&nbsp;
<P align=left>Fd</P>
<P align=left>Fds</P>
<P align=left>F</P>
<P align=left>Sd</P>
<P align=left>F</P>
<P align=left><B normal? ?mso-bidi-font-weight:>Ds<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></B></P>
<P align=left><B normal? ?mso-bidi-font-weight:><I normal? ?mso-bidi-font-style:>F<U>d</U>s<o:p></o:p></I></B></P>
<P align=left>F</P>
<P align=left>Sd</P>
<P align=left>fd</P>

Skal der trykkes 2 gange på fjern-funktionen for at den fjerner det hele....

Du er ihærdig :) - Men det er jo kun fair nok for os andre der skal bruge hjælp...

Jeg har også sat lidt flere point af
Avatar billede erikjacobsen Ekspert
26. september 2003 - 13:08 #40
Nå, ja, men det kunne du jo bare have sagt. Kan du ikke vælge en anden
kiroprakter, hvor man kan være på nettet under behandlingen :)

Det er fordi en replace med "..." i kun tager første forekomst. Du skal
derfor bruger  /.../g  for at få alle med i et hug. Jeg tillod mig at lave
en lille test:

var t = '&nbsp;\n<P align=left>Fd</P>\n<P align=left>Fds</P>\n<P align=left>F</P>\n<P align=left>Sd</P>\n<P align=left>F</P>\n<P align=left><B normal? ?mso-bidi-font-weight:>Ds<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></B></P>\n<P align=left><B normal? ?mso-bidi-font-weight:><I normal? ?mso-bidi-font-style:>F<U>d</U>s<o:p></o:p></I></B></P>\n<P align=left>F</P>\n<P align=left>Sd</P>\n<P align=left>fd</P>';

alert(t);

t = t.replace(/<?xml:[^>]*\/>/gi, "");
t = t.replace(/<o:p>/gi, "")
t = t.replace(/<\/o:p>/gi, "")
t = t.replace(/<I[^>]*\>/gi, "<I>");
t = t.replace(/<B[^>]*\>/gi, "<B>");
alert(t);
Avatar billede and_ Nybegynder
26. september 2003 - 13:52 #41
hmmmm, sjovt nok:

var rensHTML = frames.editor.document.body.innerHTML
                //t.replace(/<?xml:[^>]*\/>/gi, "");
rensHTML = rensHTML.replace(/<\?xml:[^>]*\/>/gi, "");
rensHTML = rensHTML.replace("<o:p>", "");
rensHTML = rensHTML.replace("</o:p>", "");
rensHTML = rensHTML.replace(/<I[^>]*\>/gi, "<I>");
rensHTML = rensHTML.replace(/<B[^>]*\>/gi, "<B>");
frames.editor.document.body.innerHTML = rensHTML;

Som du kan se er min linie næsten identisk med den linie som du har lavet. Jeg har en ekstra \ i min linie, men ellers er de jo identiske, men jeg kan stadig ikke få den til at fjerne gejlet 1. gang - kun efter 2. gang
Avatar billede erikjacobsen Ekspert
26. september 2003 - 13:55 #42
De er nu ikke helt identiske - prøv lige at finde dine briller *g*
Avatar billede and_ Nybegynder
26. september 2003 - 14:00 #43
de er da identiske, pånær den backslash der er foran spørgsmålstegnet, men hvi jeg fjerner den, lader den <? stående, men fjerner resten......
Avatar billede erikjacobsen Ekspert
26. september 2003 - 14:03 #44
Du har ret:

t = t.replace(/<?xml:[^>]*\/>/gi, "");

skal være

t = t.replace(/<\?xml:[^>]*\/>/gi, "");

men disse linier er anderledes:

t = t.replace(/<o:p>/gi, "")
t = t.replace(/<\/o:p>/gi, "")
Avatar billede and_ Nybegynder
26. september 2003 - 14:08 #45
Halløjsovs :) - Så skete der sgu noget *StorSmiler*

Så må du lige smide et svar :)

Ved du forresten, som spurgt før, hvordan man kan registere at der bliver trykket ctrl + v

Kan du også sige mig hvorfor denne ikke virker (ligger i samme funktion) - taget herinde fra exp.dk:

for (var i = 0; i < frames.editor.document.body.innerHTML.length; i++)
{
frames.editor.document.body.innerHTML.removeAttribute("className","",0);
frames.editor.document.body.innerHTML.removeAttribute("style","",0);
}
Avatar billede and_ Nybegynder
26. september 2003 - 14:10 #46
Avatar billede erikjacobsen Ekspert
26. september 2003 - 14:24 #47
Jeg ved ikke hvordan man fanger Ctrl-V

Måske skal man skrive
frames.editor.document.body.innerHTML=frames.editor.document.body.innerHTML.removeAttribute("className","",0);

(rent gæt...)
Avatar billede and_ Nybegynder
26. september 2003 - 14:29 #48
Kun en ting at sige: Du er for sej ;) - Rejs dig op og modtag stående bifald ....*g*

Ved ikke lige hvordan den anden funktion skal virke, men jeg må jo ud og surfe for at finde det......

Tak for hjælpen :)
Avatar billede erikjacobsen Ekspert
26. september 2003 - 14:35 #49
http://www.mozilla.org/docs/dom/domref/dom_el_ref51.html

removeAttribute skal ikke kaldes på en tekst, men på et object man
har gaflet sig vha getElementById
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