Avatar billede elgringo Nybegynder
15. marts 2004 - 16:16 Der er 17 kommentarer og
1 løsning

Dynamisk tabeller via DIV-tags

Hej, har en lang liste af brugere i en tabel der hver i sig
har nogle infomationer tilknyttet.
Så langt så godt, men pt tegner jeg hele tabellen
hver gang at disse brugere bliver udviddet/sammentrukket for
at se/skjule infomationen for de enkelte, og det er noget der
sløver :(

Derfor ville jeg finde på en løsning hvor de hver i sig
var et div-tag i stil med nedenstående, for at kunne "adde"
nye rows..

Kan desværre ikke have info'en i samme cell'e som brugeres navn,
da der længere ude til højre er noget grafisk info, der skal hænge præcist på de aktuelle ting som brugeren selv og..
det er pænt svært, da height-procent virker som noget der er
løgn. Og slet ikke i andre browsere end IE, hva jeg har erfaret.

<html>

<body>
<table border=1>
<tr><td>A</td></tr>
<tr><td>B</td></tr>
<div id="hat">
<tr><td>B</td></tr>
</div>
<tr><td>C</td></tr>
</table>

<input type=button value="test" onclick="test()">
<script language=javascript>
function test()
{
  alert(document.getElementById("hat").innerHTML); <-- Selv denne giver en tom streng, da <div>-tag'et som alle andre ikke tilladte tags og tekst havner udenfor
  document.getElementById("hat").innerHTML="<tr><td>AAA</td></tr>"; // <-- Ja, denne virker jo så heller ikke :(
}
</script>

</body>
</html>
Avatar billede olebole Juniormester
15. marts 2004 - 17:07 #1
<ole>

Du kan ikke få CSS til at virke i IE uden at sætte den rigtige DOC-Type på dokumentet ... f.eks:
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
NB: URL'en er et _must_ for IE!

Man kan _absolut_ ikke lægge en <tr> i et div - men du kan bruge DOM til at tilføje en række. Så skal vi dog have noget mere info om, hvor rækken skal tilføjes ... er det altid i slutningen af tabellen?

/mvh
</bole>
Avatar billede elgringo Nybegynder
15. marts 2004 - 20:27 #2
Nej, er kun slutningen på tabellen hvis den sidste bruger i tabellen bliver
udviddet :)
Du ved som i et ganske almindeligt træ, som f.eks. good old stifinder.
Men for at undgå at de 200 andre brugere bliver refresh'et.

Pointen var at jeg ville komme fra

<table>
<tr><td>bruger 1</td></tr>
<tr><td>bruger 2</td></tr>
<tr><td>bruger 3</td></tr>
</table>

..til...

<table>
<tr><td>bruger 1</td></tr>
<tr><td>bruger 1 info</td></tr> <-- Kun fordi at bruger 1 var expanded
<tr><td>bruger 2</td></tr>
<tr><td>bruger 3</td></tr>
</table>

og helst uden at skulle gentegne/beregning alle forige og efterfulgte <tr>'er.
Avatar billede olebole Juniormester
15. marts 2004 - 22:40 #3
Hvor får du data om brugeren fra? Altså de data, der skal skrives ind i den nye række?
Avatar billede elgringo Nybegynder
16. marts 2004 - 06:36 #4
Har jeg allerede fået via asp'en, og indsat i diverse javascript-arrays.
Da info'en ikke kun er til visning, men skal bruges til at sammenlægge
info før det hele bliver submittet. Info'en kan bla være bookinginfo
Avatar billede roenving Novice
16. marts 2004 - 06:59 #5
Er det, du har har brug for ikke principielt det samme, som hvis man havde en menu med folde-ud-punkter, altså en lang række af links, som kan folde ud noget ud, hvis du klikker på overskriften ?-)
Avatar billede elgringo Nybegynder
16. marts 2004 - 07:16 #6
eh jo, hvor vil du hen med det? :)
Skal jo alligevel komme frem med de nye items/tr/whatever ved expand,
og pt virker lader det ikke til at være muligt at kunne opdatere enkelte
dele af det store div-tag som det hele er i.
Avatar billede elgringo Nybegynder
16. marts 2004 - 07:18 #7
Derfor var ideen med at have en "fake" under hver bruger

ala

<table>
<tr><td>bruger 1</td></tr>
<div id="info1"></div>
<tr><td>bruger 2</td></tr>
<div id="info2"></div>
<tr><td>bruger 3</td></tr>
<div id="info3"></div>
</table>

og ændre f.eks ændre info2's innerHTML til "<tr><td>info bla bla bla</td></tr>",
men er jo desværre ikke muligt :(
Avatar billede elgringo Nybegynder
16. marts 2004 - 07:22 #8
Syntes blot at..

var s="<table><tr><td>bruger 1</td></tr>";
s+="<tr><td>bruger 2</td></tr><tr><td>info bla bla bla</td></tr>";
s+="<tr><td>bruger 3</td></tr></table>";
div.innerHTML=s;

.... er for dumt, tager for lang tid hos flere klienter hvis der er f.eks 100
brugere, for er ikke det eneste i mit tilfælde. Har det helt store grafik
booking ud for hver bruger, og i info'en kan man f.eks se hvem der har booket den
aktuelle person og hvornår, illustreret med gfx
Avatar billede elgringo Nybegynder
16. marts 2004 - 07:24 #9
Har tænkt lidt på at vise info'en for en aktuel bruger en andet sted
på siden, men holder heller ikke. Folk vil gerne kunne se en eller
flere expanded brugere på en gang.
Avatar billede roenving Novice
16. marts 2004 - 07:28 #10
Grunden til at jeg omtaler det som en menu er, at det jo principielt er det samme som at have en menu: Man starter med at have det foldet sammen, men der er mulighed for at folde ud, så alt loades fra starten, så det kun er et spørgsmål om at vise eller ikke vise:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Simpel menu</title>
<meta name="Generator" content="Stone's WebWriter 4">
<meta name="keywords" content="søgeord adskilt af komma">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
.menupunkt{font-family:tahoma,verdana,arial,sans-serif;cursor:pointer;color:#9d52be;background:#fff;font-weight:800;font-style:italics;font-size:10px;width:250px;}
.menu{display:none;padding-left:5px;}
.menu a{text-decoration:none;}
.menu a:link{color:black;}
.menu a:visited{color:black;}
.menu a:hover{color:red}
.menu a:active{color:red}

</style>
<script language="javascript" type="text/javascript">
function showMenu(d){
  var id = d.id.substring(5);
  divs = document.getElementsByTagName('DIV');
  for(i=0;divs.length>i;i++){
    if(divs[i].id.indexOf('menu')==0&&divs[i].id!='menu'+id){
      divs[i].style.display='none';
      document.getElementById('o'+divs[i].id+'pic').src = "../billede.jpg";
    }
  }
  st = document.getElementById('menu'+id).style;
  st.display = (st.display!='block')?'block':'none';
  document.getElementById(d.id+'pic').src = (st.display=='block')?"../eksperten_logo_new.gif":"../billede.jpg";
}
</script>
</head>
<body>
<div id="omenu1" class="menupunkt" onclick="showMenu(this);">
<img id="omenu1pic" src="../billede.jpg" height="10" width="10">
Punkt 1
  <div id="menu1" class="menu" onclick="event.cancelBubble=true">
    <a href="#" onclick="return false;">Underpunkt 1</a><br>
    <a href="#" onclick="return false;">Underpunkt 2</a><br>
    <a href="#" onclick="return false;">Underpunkt 3</a><br>
    <a href="#" onclick="return false;">Underpunkt 4</a>
  </div>
</div>
<div id="omenu2" class="menupunkt" onclick="showMenu(this);">
<img id="omenu2pic" src="../billede.jpg" height="10" width="10">
Punkt 2
  <div id="menu2" class="menu" onclick="event.cancelBubble=true">
    <a href="#" onclick="return false;">Underpunkt 1</a><br>
    <a href="#" onclick="return false;">Underpunkt 2</a><br>
    <a href="#" onclick="return false;">Underpunkt 3</a><br>
    <a href="#" onclick="return false;">Underpunkt 4</a>
  </div>
</div>
<div id="omenu3" class="menupunkt" onclick="showMenu(this);">
<img id="omenu3pic" src="../billede.jpg" height="10" width="10">
Punkt 3
  <div id="menu3" class="menu" onclick="event.cancelBubble=true">
    <a href="#" onclick="return false;">Underpunkt 1</a><br>
    <a href="#" onclick="return false;">Underpunkt 2</a><br>
    <a href="#" onclick="return false;">Underpunkt 3</a><br>
    <a href="#" onclick="return false;">Underpunkt 4</a>
  </div>
</div>
<div id="omenu4" class="menupunkt" onclick="showMenu(this);">
<img id="omenu4pic" src="../billede.jpg" height="10" width="10">
Punkt 4
  <div id="menu4" class="menu" onclick="event.cancelBubble=true">
    <a href="#" onclick="return false;">Underpunkt 1</a><br>
    <a href="#" onclick="return false;">Underpunkt 2</a><br>
    <a href="#" onclick="return false;">Underpunkt 3</a><br>
    <a href="#" onclick="return false;">Underpunkt 4</a>
  </div>
</div>
<div id="omenu5" class="menupunkt" onclick="showMenu(this);">
<img id="omenu5pic" src="../billede.jpg" height="10" width="10">
Punkt 5
  <div id="menu5" class="menu" onclick="event.cancelBubble=true">
    <a href="#" onclick="return false;">Underpunkt 1</a><br>
    <a href="#" onclick="return false;">Underpunkt 2</a><br>
    <a href="#" onclick="return false;">Underpunkt 3</a><br>
    <a href="#" onclick="return false;">Underpunkt 4</a>
  </div>
</div>
</body>
</html>
Avatar billede elgringo Nybegynder
16. marts 2004 - 08:25 #11
ok, men desværre vil jeg præsentere data'en i en tabel.
Da jeg pt har brugerens navn først som sagt,
og derefter et vist antal td's efterfulgt som matcher
det antal af dage man vil have vist bookingerne for.

dvs har pt
            | 16/3 | 17/3 | 18/3 |
----------------------------------
  • ole egern | *****|** *  | ** **|
-----------------------------------
  anders and| *****|      | ** **|
-----------------------------------
  fætter guf|      |** *  | ** **|
-----------------------------------
  • batman    | **  |      |      |
-----------------------------------

osv osv, derfor har jeg lidt et problem da tingene gerne skulle stå under
hinanden, havde tænkt på at lave et div-tag på hver "bruger-linie" så hele
ole egern og hans relateret booking-brugere (anders and og fætter guf) kunne
opdateres alene, så batman bare kunne stå uforandret....

Men!!! Så kan jeg lige pludselig ikke styrer hvornår den første dato-td starter
"16/3", da det pludselig vil være hver sin tabel

Altså tænkte på, men dur heller ikke... eller også er det bare mig :)

            | 16/3 | 17/3 | 18/3 |
-----------------------------------
<div id="user1></div> <-- altså en stor colspan
-----------------------------------
<div id="user2></div>
-----------------------------------


user1.innerHTML=...
  • ole egern | *****|** *  | ** **|
-----------------------------------
  anders and| *****|      | ** **|
-----------------------------------
  fætter guf|      |** *  | ** **|


user2.innerHTML=...
  • batman    | **  |      |      |
Avatar billede elgringo Nybegynder
16. marts 2004 - 08:26 #12
hmm, ser da ikke alt for smart ud.
Men sådan er det jo når eksperten.dk vælger anden font, end den man skriver med :(
Avatar billede olebole Juniormester
16. marts 2004 - 17:24 #13
Jamen, så kik i roenvings kode og gør det samme med <tr>'s. Fidusen er blot at give en <tr> style.display = "none" eller style.display = "block"
/mvh
Avatar billede elgringo Nybegynder
16. marts 2004 - 23:26 #14
Ahh nice, så slet ikke at det var muligt at sætte visibility-style på tr's...
first price! :)
Avatar billede elgringo Nybegynder
16. marts 2004 - 23:27 #15
roenving, svar lige.
Avatar billede roenving Novice
16. marts 2004 - 23:31 #16
Velbekomme '-)
Avatar billede elgringo Nybegynder
17. marts 2004 - 09:12 #17
Selvom jeg burde nok give nogle af pointene til olebole,
da eksemplet ikke indeholder helt det jeg kunne bruge
før jeg fik at vide at tr's havde en style.display :)
Avatar billede roenving Novice
02. april 2004 - 21:12 #18
-- jeg takker da for points ;~}
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