我之前看过这个问题一两次,但从来没有一个适用于我的问题的答案(据我所知)。 我有一个工具提示,点击链接时出现。我根据链接的位置设置工具提示的位置,类似于:
$('#tooltip').css('left', $(this).position().left);
这在FF,IE等方面效果很好,但在Chrome和Safari中,工具提示总是大约60像素左右比我想要的更左边。我真的不喜欢编写浏览器特定代码,所以有没有人知道这会发生什么? 提前谢谢。
更新: 我能够通过从链接中删除margin:0自动样式来解决此问题。 Soooo ......修复它,但我仍然不知道为什么这是safari和chrome中的问题。
答案 0 :(得分:6)
position()涉及相对于包含DOM元素的位置,而不是屏幕上的位置。差异可能是由于Webkit浏览器中元素层次结构的呈现方式不同而不是jQuery中的错误。
您必须检查元素层次结构以找出导致问题的DOM元素,或者,如果要将工具提示相对于窗口边界内元素的位置进行定位,请改用offset()。
答案 1 :(得分:3)
而不是在示例中使用position()
:
var link = $('#mymenu a');
var tooltip = $('#mymenu #tooltip');
link.click(function(){
tooltip.css('left', $(this).position().left);
});
你可以使用元素的offset()
减去它的父母offset()
(不一定是最亲近的父母):
var parent = $('#mymenu');
var link = $('#mymenu a');
var tooltip = $('#mymenu #tooltip');
link.click(function(){
parent.css('position', 'relative');
tooltip.css('left', $(this).offset().left - parent.offset().left);
});
它返回与position()
相同的值,但在FF和Chrome中都能正常工作。
答案 2 :(得分:2)
根据stackoverflow ettiquette,你可以回答你自己的问题,所以...... 我能够通过从链接中删除margin:0自动样式来解决此问题。 Soooo ......修复它,但我仍然不知道为什么这是safari和chrome中的问题。但是,至少它仍然是固定的。
答案 3 :(得分:0)
刚出现同样的问题,删除margin: 0 auto;
不是一个选项(也不是解决方案:)。这适用于我的需求,因为webkit报告我们正在寻找的值为左边距(只要边距> 0,否则 报告position().left
!):
iPosLeft = oEl.position().left + parseInt(oEl.css('marginLeft'));