Avatar billede nielsbrinch Nybegynder
25. oktober 2004 - 09:57 Der er 17 kommentarer og
1 løsning

Aflæs højde på tabel

Jeg har en tabel indeni en div. Tabellen har en ukendt højde. Min div skal i højden tilpasse sig tabellens højde, dog max 400 pixels.

Jeg har ledt efter en javascript-funktion til at aflæse højden på tabellen, men det lader ikke til den findes. Måske nogen har en anden idé.

Her lidt html til at demonstere:

<div style="width:550px; height:400px;">
  <table>
    <tr><td>Antallet af rækker, kolonner og rækkernes højde er ukendt for denne tabel.</td></tr>
  </table>
</div>
Avatar billede fennec Nybegynder
25. oktober 2004 - 10:09 #1
Du kan vist bruge offsetHeight til at aflæse højden af tabellen:

<table id="testTab">
<tr>
    <td>dsfvsd</td>
    <td>sdv</td>
</tr>
<tr>
    <td>sdfsd</td>
</tr>
</table>
<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
<!--
alert(document.getElementById("testTab").offsetHeight)
//-->
</SCRIPT>
Avatar billede nielsbrinch Nybegynder
25. oktober 2004 - 11:08 #2
Den returnerer 0 i mit tilfælde. Højden er ikke 0. Det er lige nu en tabel med to rækker. Html'en er velformateret.
Avatar billede fennec Nybegynder
25. oktober 2004 - 11:22 #3
t kan være det er en IE funktion only, det ved jeg faktisk ikke. Prøv med clientHeight i stedet. Har lige prøvet hos mig, og begge returnere 48.

alert(document.getElementById("testTab").clientHeight)
Avatar billede nielsbrinch Nybegynder
25. oktober 2004 - 11:29 #4
Jeg bruger IE 6
Avatar billede nielsbrinch Nybegynder
25. oktober 2004 - 11:31 #5
clientHeight er også 0 ... gad vide om der er noget andet galt ...

Jeg får ellers fint nok fat i min tabel.
Avatar billede fennec Nybegynder
25. oktober 2004 - 11:35 #6
Har du prøvet på en testside, med koden fra mit eks?? Det kunne være der var noget i din kode som forhindre aflæsningen.
Avatar billede nielsbrinch Nybegynder
25. oktober 2004 - 12:45 #7
Jeg har klippet tabellen og javascript'en ud og lagt ind i en offline html-fil. Windows XP SP2 advarer mig om at der er aktivt indhold på siden. Hvis jeg godkender det, får jeg den rigtige højde at vide.

Måske er det det samme der går galt online, bortset fra XP lige glemmer at gøre mig opmærksom på at der blev blokeret indhold.
Avatar billede fennec Nybegynder
25. oktober 2004 - 12:53 #8
Det kunne lyde sådan... Men hvordan man kommer uden om det problem ved jeg ikke.
Har du prøvet i en anden browser (Firefox) for at se, hvad der sker der???
Avatar billede nielsbrinch Nybegynder
25. oktober 2004 - 13:32 #9
Nøh, men det SKAL virke i ie ...
Avatar billede fennec Nybegynder
25. oktober 2004 - 13:48 #10
Det var nu også bare for at finde ud af, om det er SP2, der er problemet. Så er problemet blevet mere specifikt, hvilket gør det nemmere at finde en løsning.
Avatar billede nielsbrinch Nybegynder
25. oktober 2004 - 15:37 #11
SP2 mener åbenbart, at al javascript-kode der kører lokalt på maskinen, er noget farligt snask. Så det er ikke det der er problemet.

Jeg fandt ud af at løse problemet, tror jeg!

Det er en meget stor tabel der er tale om, så tabellen er simpelt hen ikke renderet før javascript'en, selvom javascript'en står under. Det lyder måske underligt ... men nedenstående virker:

<script type="text/javascript">
    setTimeout('AlertOffsetHeight()', 2000);
   
    function AlertOffsetHeight()
    {
        alert("offsetHeight: "+document.getElementById('Total').offsetHeight);
    }
</script>
Avatar billede nielsbrinch Nybegynder
25. oktober 2004 - 15:38 #12
Det giver også det rigtige resultat hvis jeg sætter timeout til 1 ... mystisk.
Avatar billede nielsbrinch Nybegynder
25. oktober 2004 - 15:42 #13
...og den endelige kode:

setTimeout('SetHeight()', 1);

function SetHeight()
{
    var height = document.getElementById('Total').offsetHeight;
    if (height < 200)
    {
        document.getElementById('scrollDiv').style.height = height;
    }
}

At den så regner både 10 og 20 pixels forkert, er en anden snak.
Avatar billede nielsbrinch Nybegynder
25. oktober 2004 - 15:47 #14
Den regner rigtig nok. Regnefejlen er i mit hovede :)

Skal du ha' points, så er det nu. Tak for hjælpen!
Avatar billede fennec Nybegynder
25. oktober 2004 - 15:55 #15
Kan du ikke køre funktionen onLoad i stedet for at lave en timeout??
<body onLoad="AlertOffsetHeight();">

.o) <-- One Eyed Jack
Avatar billede nielsbrinch Nybegynder
25. oktober 2004 - 15:58 #16
Jo, det virker også (jeg har lige testet), men det er desværre ikke noget jeg kan gøre lige i min situation.
Avatar billede roenving Novice
25. oktober 2004 - 16:56 #17
Husk altid at sætte enheder på længder i css, da standarden faktisk foreskriver, at css-fortolkeren skal overse størrelser uden enheder (selv om en enkelt ret dominernde browser skider på det !-)

        document.getElementById('scrollDiv').style.height = height + 'px';
Avatar billede nielsbrinch Nybegynder
25. oktober 2004 - 17:06 #18
Jeg er heldigvis i et slave/dominator-forhold til Internet Explorer i min stilling :-) men tak for tippet, det havde jeg glemt.
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