如何在表格行(tr)上覆盖div(或任何元素)?

我想叠加一个div(或任何可以工作的元素)在一个只有一列的表格行(tr标签)上。

我已经尝试了一些方法,似乎没有工作。 我已经在下面发布了我的当前代码。

我确实得到一个覆盖,但不是直接在行上。 我试着将覆盖顶部设置为$ divBottom.css('top'),但总是“自动”。

那么,我在正确的轨道上,还是有更好的方法呢? 你可以看到,使用jQuery是很好的。

如果我在正确的轨道上,如何正确放置div? 是偏移量在包含元素,表中的偏移量,我需要做一些math? 任何其他陷阱我会遇到这个?

$(document).ready(function() { $('#lnkDoIt').click(function() { var $divBottom = $('#rowBottom'); var $divOverlay = $('#divOverlay'); var bottomTop = $divBottom.attr('offsetTop'); var bottomLeft = $divBottom.attr('offsetLeft'); var bottomWidth = $divBottom.css('width'); var bottomHeight = $divBottom.css('height'); $divOverlay.css('top', bottomTop); $divOverlay.css('left', bottomLeft); $divOverlay.css('width', bottomWidth); $divOverlay.css('height', bottomHeight); $('#info').text('Top: ' + bottomTop + ' Left: ' + bottomLeft); }); }); 
 #rowBottom { outline:red solid 2px } #divBottom { margin:1em; font-size:xx-large; position:relative; } #divOverlay { background-color:Silver; text-align:center; position:absolute; z-index:10000; opacity:0.5; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <html> <head> <title>Overlay Tests</title> </head> <body> <p align="center"><a id="lnkDoIt" href="#">Do it!</a></p> <table width="100%" border="0" cellpadding="10" cellspacing="3" style="position:relative"> <tr> <td><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p></td> </tr> <tr id="rowBottom"> <td><div id="divBottom"><p align="center">This is the bottom text</p></div></td> </tr> <tr> <td><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p></td> </tr> </table> <div id="divOverlay" style=""><p>This is the overlay div.</p><p id="info"></p></div> </body> </html> 

你需要使覆盖div有一个绝对的位置。 还可以使用position()jQuery方法来查看行的顶部和左侧位置 – 这里是缺less的部分:

 var rowPos = $ divBottom.position();
 bottomTop = rowPos.top;
 bottomLeft = rowPos.left;

 //
 $ divOverlay.css({
    位置:“绝对”,
     top:bottomTop,
    左:bottomLeft,
    宽度:bottomWidth,
    高度:bottomHeight
 });

使:

 div style="position:absolute" td style="position:relative;display:block" 

你不需要jquery。

此外,请确保外部元素(在这种情况下表)溢出属性没有设置为隐藏。 在隐藏设置溢出时,不会显示覆盖图!

直接获取对象的高度和宽度。 对我来说最困难的部分是绝对定位的顶部和左侧坐标。

这是我唯一可靠的脚本:

 function posY(ctl) { var pos = ctl.offsetHeight; while(ctl != null){ pos += ctl.offsetTop; ctl = ctl.offsetParent; } return pos; } function posX(ctl) { var pos = 0; while(ctl != null){ pos += ctl.offsetLeft; ctl = ctl.offsetParent; } return pos; } 

这应该做的:

 var bottomTop = $divBottom.offset().top; var bottomLeft = $divBottom.offset().left;