Så du vil kende et elements størrelse før det er renderet?
Jeg ved ikke om det altid virker, men jeg har udvidet eksemplet med en knap nummer 2 som opretter en knap nummer 3, og som udvider sig fra størrelse 1px:
<html>
<head>
<script language="javascript" type="text/javascript">
function expand(id, h, w) {
var e=document.getElementById(id);
if (parseInt(e.style.height)<h) e.style.height = (parseInt(e.style.height)+1)+'px';
if (parseInt(e.style.width)<w) e.style.width = (parseInt(e.style.width)+1)+'px';
if ((parseInt(e.style.height)<h) || (parseInt(e.style.width)<w)) setTimeout('expand("'+id+'",'+h+','+w+')', 1);
}
function newButton(id) {
var e=document.getElementById(id);
var i = 0;
while (document.getElementById('newButton_' + ++i ) );
var newButton = document.createElement('button');
newButton.id = 'newButton_' + i;
newButton.appendChild( document.createTextNode('I am new and my id is ' + newButton.id) );
e.appendChild(document.createElement('br'));
e.appendChild(newButton);
var w = newButton.offsetWidth;
var h = newButton.offsetHeight;
newButton.style.height='1px';
newButton.style.width='1px';
setTimeout('expand("' + newButton.id + '",'+h+','+w+')', 1);
}
window.onload = function(){
document.getElementById('mainDiv').style.height = '200px';
document.getElementById('mainDiv').style.width = '350px';
}
</script>
</head>
<body>
<div id="mainDiv" style="border: 5px dotted lightgray; padding: 10px;">
<button onclick="expand('mainDiv', 400, 550); return false;">Click to Expand Area</button><br>
<button onclick="newButton('mainDiv'); return false;">Make New Button</button>
</div>
</body>
</html>
Det er linierne
var w = newButton.offsetWidth;
var h = newButton.offsetHeight;
der giver størrelsen, allerede inden rederingen er sket.