[dhtml+js] tabel leegmaken

Pagina: 1
Acties:

  • AxiMaxi
  • Registratie: December 2000
  • Laatst online: 27-05 15:33
Vanwege het lik-op-stuk beleid alhier (waar ik niks op tegen heb, maar soms gaat het iets te makkelijk :/), ff een 2e poging van mijn topic.

Enfin... :P

Ik ben bezig om een XML-database door te laten zoeken, d.m.v. een <FORM> dat ingevuld wordt en uitgevoerd wordt in JavaScript. Dit om even aan tegeven wat het kader is waarin de boel geplaatst wordt en om even aan te geven dat ik iets meer weet dan alleen document.write("Hello World!"). :*)

Met een JavaScript loop (let op Cheatah ;) ) komen 1-voor-1 de resultaten in een <TABLE> d.m.v. insertRow().

Allemaal leuk en aardig, maar als ik de <TABLE> nog een keer wil gebruiken of de zoek-opdracht wil verfijnen, moet er dus wat gebeuren c.q. de boel moet opgeruimd worden.

In de <TABLE> heb ik een <TBODY id="dataBody"> aangemaakt, waar de regels aan toegevoegd worden. Maar de truuk dataBody.innerHTML="" werkt niet :(
(resulteert in 'onbekende run-time fout')

Nu kan ik wel weer een loop maken (jawel, dat kan ik! >:)) die 1-voor-1 de regels gaat wissen (al moet ik dan ff uitzoeken hoe ik uitlees hoeveel regels er zijn zodat er geen error optreedt), maar dat vind ik zo'n suffe oplossing.

Is er niet een methode om in 1x al die toegevoegde regels in <TBODY> weg te gooien? Zeg maar een functie clearDatabody().

Ik vond al iets van HTMLElement.remove() ergens in een script, maar ik kan er geen verdere info over vinden. I.i.g. niet over de toepassing ervan. En met puzzelen kwam ik er ook niet uit (de ene fout na de andere). :'(

Iemand een idee waar ik het zoeken moet, of is die regeltje wissen de enige manier? :?

P.S. Cheatah, no hard feelings :>

[Hier had mijn handtekening kunnen staan]


Verwijderd

Heb je een stukje source als voorbeeld, want ik snap niet helemaal wat je aan het proberen bent :)

Mijn eerste ingeving was nl; flikker de hele meuk in een span en doe dan innerHTML = '' maar wie weet wil je wat anders doen.

  • AxiMaxi
  • Registratie: December 2000
  • Laatst online: 27-05 15:33
Verwijderd schreef op 28 augustus 2002 @ 10:02:
Mijn eerste ingeving was nl; flikker de hele meuk in een span en doe dan innerHTML = '' maar wie weet wil je wat anders doen.
Dat had ik, zie hier de 'oude' code:
code:
1
2
3
4
5
6
7
8
9
10
11
 function displayFound() {
   var showResult=""

    for (var x=0; x < foundHits; x++) {

     var a=foundItems[x]
     showResult=showResult+"<b>"+dbItem[a]+":</b> "+dbTitel[a]+"<br/>"
    }

   resultSpan.innerHTML=showResult
  }

foundItems[] is een array met daarin opgeslagen de record-nummers van de gevonden items (m.a.w. de plaats in de oorspronkelijke database waar de items zich bevinden die aan het zoekcriterium voldoen).
foundHits is het aantal gevonden items dat voldoet.
dbItem[] en dbTitel[] zijn de elementen uit de database.

Oorspronkelijk zat er nog een regeltje tussen voor de afhandeling als er niks gevonden was. Heb ik voor de leesbaarheid even weggelaten. B)

In <SPAN id="resultSpan"> maak ik hierboven dus regels aan met de gevonden resultaten. Het nadeel daarvan is dat het enorm lastig wordt (danwel omslachtig) om met de afzonderlijke resultaten weer verder te knutselen.
Ik wil ze bijv. aanklikbaar maken voor verdere afhandeling.

Okay, dat kan ook allemaal nog wel. Maar wordt die string showResult dan niet veel te lang (overflow, out of memory, afkapping), als ik daar weer allemaal onClick of <A HREF ...> shit tussen ga zetten? :?

Ik heb hier nu niet de exacte code bij me die ik had gemaakt met die insertRow methode, maar ik zal een poging wagen 'm ff na te maken:
code:
1
2
3
4
5
6
7
8
9
10
11
  function addTable() {

   for (var x=0; x < foundHits; x++) {

    var a=foundItems[x]
    newRow=dataBody.insertRow(-1) ; // -1 wil zeggen aan einde van tabel.

     newRow.insertCell(0)=dbItem[a]
     newRow.insertCell(1)=dbTitel[a]
   }
  }

Mjah, dat was 'm geloof ik wel. 8)

Een functie maken om deleteRow() te doen, is een eitje.
Maar nogmaals, ik zoek dus een kortere/snellere/elegantere methode.

[Hier had mijn handtekening kunnen staan]


  • André
  • Registratie: Maart 2002
  • Laatst online: 01-09 14:07

André

Analytics dude

Kun je niet een stukje code maken ala dit:

HTML:
1
2
3
4
5
6
7
<table>
  <div id="TableContent">
    <tr>
      <td>Test</td>
    </tr>
  </div>
</table>

JavaScript:
1
2
3
4
function Clean()
{
  TableContent.innerHTML = "";
}

Dan hoef je alleen de <tbody> te veranderen in <div>.

Maar het kan ook simpel: ververs de pagina na een nieuwe zoekquery. 8)7

[ Voor 0% gewijzigd door André op 28-08-2002 12:50 . Reden: extra info ]


Verwijderd

Je kunt zowiezo de records inderdaad als een array beschouwen, en ook zo pushen in je array. Een array is gewoon idioot snel in javascript. Vervolgens kun je deze array met bijv. document.write in een layer schrijven, en zolang je array gevuld blijft kun je deze informatie aanroepen want je hebt een ArrayItem[number].

Verwijderd

Yogho schreef op 28 augustus 2002 @ 12:46:
Kun je niet een stukje code maken ala dit:

HTML:
1
2
3
4
5
6
7
<table>
  <div id="TableContent">
    <tr>
      <td>Test</td>
    </tr>
  </div>
</table>

JavaScript:
1
2
3
4
function Clean()
{
  TableContent.innerHTML = "";
}

Dan hoef je alleen de <tbody> te veranderen in <div>.

Maar het kan ook simpel: ververs de pagina na een nieuwe zoekquery. 8)7
Zeg ik er wel bij dat de constructie van een div tussen table/tr niet geweldig wordt begrepen door Mozilla.

  • AxiMaxi
  • Registratie: December 2000
  • Laatst online: 27-05 15:33
Yogho schreef op 28 augustus 2002 @ 12:46:
Kun je niet een stukje code maken ala dit:

(...)
function Clean()
{
TableContent.innerHTML = "";
}
[/code]
Zie mijn eerste post in deze thread:
In de <TABLE> heb ik een <TBODY id="dataBody"> aangemaakt, waar de regels aan toegevoegd worden. Maar de truuk dataBody.innerHTML="" werkt niet
(resulteert in 'onbekende run-time fout')
En ja, pagina-refresh is inderdaad een oplossing...
Maar als ik nou 40 resultaten heb die ik in 4x10 regels opeenvolgend in dezelfde tabel wil laten zien, dan moet ik dus bij een page-flip de pagina opnieuw inladen. Ben ik dan niet m'n variabelen/array's kwijt?

Een werk-versie van de pagina kan je even bekijken.

[Hier had mijn handtekening kunnen staan]


  • AxiMaxi
  • Registratie: December 2000
  • Laatst online: 27-05 15:33
Verwijderd schreef op 28 augustus 2002 @ 12:49:
Vervolgens kun je deze array met bijv. document.write in een layer schrijven, en zolang je array gevuld blijft kun je deze informatie aanroepen want je hebt een ArrayItem[number].
Daar ga ik even over nadenken...
Als is het technisch gezien niet wat ik bedoelde ;)

[Hier had mijn handtekening kunnen staan]


Verwijderd

misschien heb je hier wat aan:
code:
1
2
3
4
5
6
7
8
9
function repl()
{
newtbody = document.createElement("tbody")
newtbody.id ="databody"

tableBody = document.getElementsByTagName("table").item(0)
oldtbody = document.getElementById("databody")
tableBody.replaceChild(newtbody,oldtbody)
}

  • André
  • Registratie: Maart 2002
  • Laatst online: 01-09 14:07

André

Analytics dude

AxiMaxi schreef op 28 augustus 2002 @ 13:05:
Zie mijn eerste post in deze thread:
Daar heb je het over <tbody> .innerHTML die een run time fout geeft, en ik zeg <div> .innerHTML :?

  • AxiMaxi
  • Registratie: December 2000
  • Laatst online: 27-05 15:33
Yogho schreef op 28 augustus 2002 @ 14:55:
Daar heb je het over <tbody> .innerHTML die een run time fout geeft, en ik zeg <div> .innerHTML :?
8)7 Tuurlijk... ik las het verkeerd |:(
Sorry :)

[Hier had mijn handtekening kunnen staan]


  • AxiMaxi
  • Registratie: December 2000
  • Laatst online: 27-05 15:33
Verwijderd schreef op 28 augustus 2002 @ 14:45:
misschien heb je hier wat aan:
code:
1
2
function repl()
 ...etc...
Looks good! :P
Ik ga dit 's proberen, dan laat ik wel weten of/hoe het gelukt is.

[Hier had mijn handtekening kunnen staan]

Pagina: 1