可有人告诉我如何得到top
和left
位置的div
或者span
当没有指定的元素吗?
即:
stuff stuff
在上面,如果我这样做:
document.getElementById('11a').style.top
55px
返回值.但是,如果我尝试span
'12a',那么什么都不会返回.
我在页面上有一堆div
/ span
我无法指定top
/ left
属性,但我需要div
直接在该元素下显示.
您可以getBoundingClientRect()
在对元素的引用上调用该方法.然后,你可以检查top
,left
,right
和/或bottom
属性...
var offsets = document.getElementById('11a').getBoundingClientRect(); var top = offsets.top; var left = offsets.left;
如果使用jQuery,你可以使用更简洁的代码......
var offsets = $('#11a').offset(); var top = offsets.top; var left = offsets.left;
此函数将告诉您元素相对于页面的x,y位置.基本上你必须循环遍历所有元素的父元素并将它们的偏移量加在一起.
function getPos(el) { // yay readability for (var lx=0, ly=0; el != null; lx += el.offsetLeft, ly += el.offsetTop, el = el.offsetParent); return {x: lx,y: ly}; }
但是,如果您只想要元素相对于其容器的x,y位置,那么您只需要:
var x = el.offsetLeft, y = el.offsetTop;
要将元素直接放在此元素下方,您还需要知道它的高度.它存储在offsetHeight/offsetWidth属性中.
var yPositionOfNewElement = el.offsetTop + el.offsetHeight + someMargin;
虽然@ nickf的答案有效.如果您不关心旧版浏览器,则可以使用此纯Javascript版本.适用于IE9 +等
var rect = el.getBoundingClientRect(); var position = { top: rect.top + window.pageYOffset, left: rect.left + window.pageXOffset };
正如Alex所说,您可以使用jQuery offset()来获取相对于文档流的位置.使用position()作为相对于父级的x,y坐标.
编辑:切换document.ready
为window.load
因为load
等待所有元素,所以你得到他们的大小,而不是简单地准备DOM.根据我的经验,load
可以减少错误的Javascript定位元素.
$(window).load(function(){ // Log the position with jQuery var position = $('#myDivInQuestion').position(); console.log('X: ' + position.left + ", Y: " + position.top ); });
对于只需要顶部或左侧位置的人来说,对@ Nickf的可读代码稍作修改即可.
function getTopPos(el) { for (var topPos = 0; el != null; topPos += el.offsetTop, el = el.offsetParent); return topPos; }
和
function getLeftPos(el) { for (var leftPos = 0; el != null; leftPos += el.offsetLeft, el = el.offsetParent); return leftPos; }