Hvis der ikke direkte står nogen bredde - altså hverken i cellen eller stylesheetet - så kan du få fat i den sådan her: <table> <tr> <td onclick="alert(this.offsetWidth);">ffdf</td> </tr> </table>
Det du kan gøre er at give billedet og cellen en ID og derefter gøre sådan her: <script type="text/javascript"> function getWidth() { if (document.getElementById('bld').offsetWidth > document.getElementById('celle').width) { document.getElementById('bld').width = document.getElementById('celle').width; } } </script>
du skal jo nok gøre på et tidspunkt hvor du ved billederne og tabellen er loadet færdig, så jeg vil foreslå at du gør sådan her: <body onload="get_width('pic', 'pic_table');"> <table> <tr> <td id="pic_table" width="150"> <img id="pic" src="bld.png"> </td> </table> </body>
Funktionen er jo direkte til for at aflæse cellens størrelse.
tænker du på noget i den her stil: <script type="text/javascript"> function resizePics(tbl) { var imgArr = document.getElementById(tbl).getElementsByTagName("IMG"); for (i=0;i<imgArr.length;i++) { if (imgArr[i].width > imgArr[i].parentNode.width) { imgArr[i].width = imgArr[i].parentNode.width; } } } </script>
funktionen kræver dog at billedet er direkte inde i en celle med en bestemt bredde - ikke noget med at sætte den ind i et link-element eller andet. Så skal den laves lidt om (i grunden skal du bare tilføje et par .parentNode efter det oprindelige .parentNode i funktionen).
altså tanken var at du _skal_ sætte en bredde på cellen (med width=et eller andet). Hvis cellen ikke har en bestemt bredde vil billedet som standard bruge mere plads end den måske skulle have lov til - og scriptet kan jo ikke selv finde ud af hvor bred den skal være.
men jeg kan godt se problemmet, så her er en lidt nyere udgave: <script type="text/javascript"> function resizePics(tbl) { if (document.getElementById(tbl)) { var imgArr = document.getElementById(tbl).getElementsByTagName("IMG"); for (i=0;i<imgArr.length;i++) { if (imgArr[i].width > imgArr[i].parentNode.width && imgArr[i].parentNode.width > 0) { imgArr[i].width = imgArr[i].parentNode.width; } } } } </script>
Hvis du gerne også vil bruge CSS til at bestemme bredden må du lige sige til...
nej, hva' skidt jeg gør det alligevel: <script type="text/javascript"> function resizePics(tbl) { if (elm = document.getElementById(tbl)) { var imgArr = elm.getElementsByTagName("IMG"); for (i=0;i<imgArr.length;i++) { bredde = (imgArr[i].parentNode.style.width) ? parseInt(imgArr[i].parentNode.style.width) : imgArr[i].parentNode.width; if (imgArr[i].width > bredde && bredde > 0) { imgArr[i].width = bredde; } } } } </script> Nu kan du også bruge stylesheets (bare hver opmærksom på at scriptet forventer at du har angivet det i pixels.
det cellen jeg mente du skulle sætte bredden på - ikke tabellen. Sådan har jeg forstået dit spørgsmål i hvert fald. Din HTML skulle meget gerne se sådan ud i stedet: <table id="pic_table" width="400"> <tr> <td width="400"> <img src="bld1.png"> <!-- Dette billede må højest blive 400 pixels bred, da cellen også er det --> </td> </tr> </table>
Ja, jeg tænkte du måske kunne finde på at sætte bredden med en style - altså style="width:400px;".
dvs. så du kan gøre noget i den her stil: <table id="pic_table" width="400"> <tr> <td> <img id="pic[3]" src="bld.png"> </td> </tr> </table>
Jo, så skal du bare tilføje et par parentNode: (har også lige slettet muligheden for at bruge CSS) <script type="text/javascript"> function resizePics(tbl) { if (elm = document.getElementById(tbl)) { var imgArr = elm.getElementsByTagName("IMG"); for (i=0;i<imgArr.length;i++) { bredde = imgArr[i].parentNode.parentNode.parentNode.parentNode.width; if (imgArr[i].width > bredde && bredde > 0) { imgArr[i].width = bredde; } } } } </script>
ad, det var da dumt gjort. Du kan jo ligeså godt gøre sådan her: <script type="text/javascript"> function resizePics(tbl) { if (elm = document.getElementById(tbl)) { bredde = document.getElementById(tbl).width; var imgArr = elm.getElementsByTagName("IMG"); for (i=0;i<imgArr.length;i++) {
hvis vi går ud fra at billedet kun skal resizes når det fylder mere end tabellens egentlige bredde, så kan man til nøds godt gøre sådan her: <script type="text/javascript"> function resizePics(tbl) { if (elm = document.getElementById(tbl)) { temp_bredde = elm.width; bredde = (temp_bredde.toString().indexOf('%') != -1) ? Math.round(elm.parentNode.offsetWidth/100*parseInt(temp_bredde)) : temp_bredde; var imgArr = elm.getElementsByTagName("IMG"); for (i=0;i<imgArr.length;i++) {
nææ, tænkte man ligeså godt kunne ordne det hele i en mundfuld. Men det kunne da godt lade sig gøre på den måde ;-)
Synes godt om
Ny brugerNybegynder
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.