Avatar billede noex Nybegynder
04. september 2002 - 13:58 Der er 9 kommentarer og
2 løsninger

Fejl i DOM kode

Indeholdet af den nederste tabel kopieres ind i den øverste tabel. Klik på clean skal slette elementerne i den øverste tabel, men der går noget galt?

<html>
  <head>
    <title>Test</title>
    <script language="javascript">

      function cleanTableView() {

        var tBodyElm         = document.getElementById('viewtbody');
        var trElements     = tBodyElm.childNodes;

        alert(trElements.length);

        for(i=0;i<trElements.length;i++) {
          alert(i);
          tBodyElm.removeChild(trElements(i));
        }
      }

      function initTableView() {

        viewTrElm     = document.getElementById('viewstartTR');
        tableElm         = document.getElementById('tabledata');
        navElm             = document.getElementById('trailerTR');
        trElm             = tableElm.firstChild;
        trElements     = trElm.childNodes;

        for(i=0;i<trElements.length;i++) {

          newTrElm = trElements(i).cloneNode(true);
          viewTrElm.parentElement.insertBefore(newTrElm, navElm);
        }
      }

    </script>
  </head>

<body onLoad="initTableView()">

  <a href="java script:cleanTableView()">Clean</a>

  <!-- COPY TO TABLE -->
  <table bgcolor="silver" id="viewtable">
    <tbody id="viewtbody">
        <tr id="atts"><td>Navn</td><td>Adresse</td></tr>
        <tr id="viewstartTR"><td></td></tr>
        <tr id="trailerTR"><td></td></tr>
    </tbody>
  </table>

  <!-- COPY FROM TABLE -->
  <table bgcolor="green" id="tabledata">
    <tr><td>Navn1</td><td>Adresse1</td></tr>
    <tr><td>Navn2</td><td>Adresse2</td></tr>
    <tr><td>Navn3</td><td>Adresse3</td></tr>
    <tr><td>Navn4</td><td>Adresse4</td></tr>
    <tr><td>Navn5</td><td>Adresse5</td></tr>
    <tr><td>Navn6</td><td>Adresse6</td></tr>
  </table>

</body>
</html>
Avatar billede Slettet bruger
04. september 2002 - 14:07 #1
Det er en lidt underlige kode, men jeg vil gætte på, at fejlen ligger i denne linje:

newTrElm = trElements(i).cloneNode(true);

... som skal ændres til:

newTrElm = trElements[i].cloneNode(true);

... og denne:

tBodyElm.removeChild(trElements(i));

... der skal ændres til:

tBodyElm.removeChild(trElements[i]);
Avatar billede noex Nybegynder
04. september 2002 - 14:12 #2
Har ændret koden de to steder, men det løser desværre ikke problemet.
Avatar billede Slettet bruger
04. september 2002 - 14:15 #3
Smid et link. Eller fortæl præcist, hvad scriptet skal gøre. Jeg har fornemmelsen af, at det kan gøres meget nemmere.
Avatar billede noex Nybegynder
04. september 2002 - 14:16 #4
Det er rent klientside. Du kan bare kopiere koden og køre det lokalt i din browser
Avatar billede Slettet bruger
04. september 2002 - 14:24 #5
Du må nu gerne fortælle, hvad scriptet skal gøre.
Avatar billede noex Nybegynder
04. september 2002 - 14:30 #6
OK da :-)

Der er to HTML tabeller på siden. Tabellen "tabledata" indeholder nogle rækker, som kopieres ind i den anden tabel "viewtable" Metoden initTableView sørger for denne kopiering ved først at clone en TR og herefter indsættes rækken i tabellen "viewTable" med insertBefore().

Dette ser ud til at virke, men prøv nu at trykke på "Clean", som kalder metoden cleanTableView(). Kun nogle af rækkerne slettes!?! Hvorfor???
Avatar billede z42cool Nybegynder
04. september 2002 - 14:52 #7
i clean metoden skal du ændre din for løkke til følgende while løkke. Når du anvender .length som terminator i din for løkke og samtidigt ændrer .length inde i for løkken går det galt!


        while (trElements.length>0)
        {
          tBodyElm.removeChild(trElements(0));
        }
Avatar billede Slettet bruger
04. september 2002 - 14:55 #8
Prøv at bruge dette script i stedet:

<script>
function initTableView() {
document.getElementById("viewtbody").innerHTML = document.getElementById("tabledata").innerHTML;
}

function cleanTableView() {
document.getElementById("tabledata").innerHTML = "";
}
</script>
Avatar billede Slettet bruger
04. september 2002 - 14:59 #9
Og dette skal sættes ind i stedet for den anden copy to table:

<!-- COPY TO TABLE -->
  <table bgcolor="silver" id="viewtable">
        <tr id="atts"><td>Navn</td><td>Adresse</td></tr>
        <tr id="viewstartTR"><td></td></tr>
        <tr id="trailerTR"><td></td></tr>
        <div id="viewtbody"></div>
  </table>
Avatar billede noex Nybegynder
04. september 2002 - 15:15 #10
Tak for svaret z42cool! Tak for indsatsen phoenixv :-)
Avatar billede Slettet bruger
04. september 2002 - 15:31 #11
Mit er da meget enklere. Og virker ligeså godt.
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