我有一个div,它在服务器中生成的内容是动态的。我需要在表格的顶部放置底行,然后使用CSS完成。但是,当内容增加它的高度时,第四行覆盖第一行。 HTML看起来像这样:
<div class="main">
<table id="news">
<tr id="tr1">
<td id="td1">
<fieldset id="fieldset1">Content</fieldset>
</td>
</tr>
<tr id="tr2">
<td id="td2">
<fieldset id="fieldset2">Content</fieldset>
</td>
</tr>
<tr id="tr3">
<td id="td3">
<fieldset id="fieldset3">Content</fieldset>
</td>
</tr>
</table>
</div>
CSS:
.main { padding-top: 150px; } /* Making room for 3rd row */
#tr3 { margin-top: -500px; } /* Move it above the other rows */
我需要的是找到#tr3的高度并将此值传递给.main的填充和#tr3的margin-top的方法。我试图将我通过搜索找到的解决方案中的一些东西放在一起,但我的知识并没有扩展,我提出的是:
var tr3Height = document.getElementById('#tr3').clientHeight;
var mainPadding = document.getElementById('.main');
function SetAttribute (ObjectID, Value) {
document.getElementById('.main').style.paddingTop = tr3Height + "px";
document.getElementById('#tr3').style.marginTop = -(500 + tr3Height) + "px";
}
我很确定这是应该怎么做的,但我不知道如何完成它。也许有人可以通过让我朝着正确的方向提供帮助。谢谢。
编辑:我忘了提及:我无法改变.main div中的HTML,因为是服务器生成的。
答案 0 :(得分:1)
当前问题:
getElementById('#tr3')
无效。getElementById('.main')
也无效。 marginTop
的元素上设置table-cell
。解决方案(按上述方式排序):
getElementById('tr3')
。main
替换班级main
并使用getElementById('main')
。indow.onload = function()
.. 这将解决您的加载和填充问题(请注意我已将标记更改为具有唯一ID - 请检查下面的jsFiddle),尽管正如您在评论中看到的那样,您的保证金更改在注册时会有没效果:
window.onload = function(){
var tableRow3Height = document.getElementById('tableRow3').clientHeight;
console.log(tableRow3Height); // returns 42
document.getElementById('main').style.paddingTop = tableRow3Height + "px";
var tableRow3 = document.getElementById('tableRow3');
tableRow3.style.marginTop = -500 + tableRow3Height + "px";
console.log(tableRow3.style.marginTop) // returns -458px, although it won't do anything.
};