Avatar billede dotcom1 Nybegynder
20. januar 2010 - 12:07 Der er 8 kommentarer og
1 løsning

innerHTML replace: escaping citationstegn?

Hej.

Jeg har noget kode, som jeg kun kan rette client-side:

<table border="1" cellpadding="0">
  <tr>
    <td>Text</td>
  </tr>
</table>

Jeg vil gerne ændre border="1" til border="0", så jeg har prøvet at bruge dette script:

<script type="text/javascript">
<!--//
function replace_stuff() {
document.body.innerHTML = document.body.innerHTML.replace(/border=\"1\"/g,'border=\"0\"');
}
//-->

</script>

- men det virker kun i Firefox, ikke i Internet Explorer. Jeg har før brugt scriptet til at erstatte enkelte ord, og der har det fint virket i IE. Så jeg antager at det måske skyldes at citationstegnene ikke escapes rigtigt, eller?

Kan nogen hjælpe?
Avatar billede intenz Novice
20. januar 2010 - 17:07 #1
Det er også en lidt funky kode du der :P

Hvis du kan hente dit table element ud, bør du bruge css. Det burde overskrive den border=1 der er sat.

Noget i stil med (ikke testet):

function updateBorder() {
tableElements = document.getElementsByTagName('table');
for (var i=0; i<tableElemnets.length; i++) {
  tableElemnets[i].style.border = "0px";
}
}

Det vil så opdatere alle table elementer på siden, jeg ved ikke om det er et problem.
Avatar billede intenz Novice
20. januar 2010 - 17:09 #2
Hov, lidt tastefejl.

Dette:
for (var i=0; i<tableElemnets.length; i++) {
  tableElemnets[i].style.border = "0px";
}

skal selvfølgelig være:
for (var i=0; i<tableElements.length; i++) {
  tableElements[i].style.border = "0px";
}

:)
Avatar billede dotcom1 Nybegynder
21. januar 2010 - 13:19 #3
Hej.

Tak for svaret.

Min table har en class, hvor jeg har angivet border:0; og det er vel det samme som dit script gør? I så fald vil man stadig kunne se en skygge rundt om tabellen, da den stadig har border="1" i sin kode.

Derfor vil jeg bare gerne fjerne denne border="1" men har kun mulighed for at gøre det clientside.
Avatar billede intenz Novice
21. januar 2010 - 15:09 #4
Ja, det kan jeg godt se når jeg lige tester det.
Hvis du prøver at køre:
alert(document.body.innerHTML);

kan du se, at IE ikke fortolker dine "'er. Og derfor virker den ikke i IE. Dette virker dog i IE, men ikke i firefox:
document.body.innerHTML = document.body.innerHTML.replace(/border=1/g,'border=0');

Så du skal finde ud af hvilken browser de kører, og så køre din replace efter det.
Avatar billede dotcom1 Nybegynder
21. januar 2010 - 15:18 #5
Hej igen.

Okay, tak for det. Jeg synes dog ikke at det er den mest optimale løsnng - og det er ikke din skyld. :) Jeg tænker bare at det da må kunne lade sig gøre på en lidt smartere måde...
Jeg vil lige lade spørgsmålet stå åbent lidt endnu...måske er der en derude med en bedre løsning.
Avatar billede intenz Novice
21. januar 2010 - 15:32 #6
Her er den smarte løsning :)

function updateBorder() {
    tableElements = document.getElementsByTagName('table');
    for (var i=0; i<tableElements.length; i++) {
      tableElements[i].setAttribute("border", "0");
    }
}
Avatar billede dotcom1 Nybegynder
22. januar 2010 - 10:39 #7
Hej.

Tak for den smarte løsning. Det ser interessant ud. Jeg skal lige forstå scriptet - lavet det så border="0" på alle tables på siden? Eller skal man angive sim class der hvor der står ('table'), eller?

Mvh.
Avatar billede intenz Novice
22. januar 2010 - 11:51 #8
Ja, den kører alle table elementer igennem. Hvis du kun vil gøre det for en med bestemt class. Kan du hente hente en getElementsByClass funktion og skifte denne linje ud, med class:
document.getElementsByTagName('table');

Du kan finde getElementByClass på google:
http://www.google.dk/search?sourceid=navclient&hl=da&ie=UTF-8&rlz=1T4GGLL_daDK308DK308&q=getelementsbyclass
Avatar billede dotcom1 Nybegynder
25. januar 2010 - 11:00 #9
Hey, og tak for din hjælp.
Jeg fandt dette script som løser opgaven som den skal.
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