Javascript jquery position()在safari和chrome中无法正常工作

Javascript jquery position()在safari和chrome中无法正常工作,javascript,jquery,google-chrome,safari,position,Javascript,Jquery,Google Chrome,Safari,Position,我以前见过一两次提出这个问题,但从来没有一个答案适用于我的问题(据我所知)。 我有一个在单击链接时显示的工具提示。我根据链接的位置设置工具提示的位置,如下所示: $('#tooltip').css('left', $(this).position().left); 这在FF、IE等中非常有效,但在Chrome和Safari中,工具提示总是比我想要的更靠左60像素左右。我真的不喜欢编写特定于浏览器的代码,所以有没有任何理由有人知道会发生这种情况? 提前谢谢 更新: 我可以通过从链接中删除边距:0

我以前见过一两次提出这个问题,但从来没有一个答案适用于我的问题(据我所知)。 我有一个在单击链接时显示的工具提示。我根据链接的位置设置工具提示的位置,如下所示:

$('#tooltip').css('left', $(this).position().left);
这在FF、IE等中非常有效,但在Chrome和Safari中,工具提示总是比我想要的更靠左60像素左右。我真的不喜欢编写特定于浏览器的代码,所以有没有任何理由有人知道会发生这种情况? 提前谢谢

更新: 我可以通过从链接中删除边距:0自动样式来解决此问题。Soooo…这解决了它,但我仍然不知道为什么这在safari和chrome中是个问题

position()与包含DOM元素的位置相关,与屏幕上的位置相对。这种差异可能是由于Webkit浏览器中呈现元素层次结构的方式不同造成的,而不是由jQuery中的错误造成的


您必须检查元素层次结构以找出导致问题的DOM元素,或者,如果您想相对于窗口边界内元素的位置定位工具提示,请改用。

根据stackoverflow ettiquette的说法,可以回答您自己的问题,所以


我可以通过从链接中删除边距:0自动样式来解决此问题。Soooo…这解决了它,但我仍然不知道为什么这在safari和chrome中是个问题。但是,至少它是固定的。

而不是像您的示例中那样使用
position()

var link = $('#mymenu a');
var tooltip = $('#mymenu #tooltip');

link.click(function(){
  tooltip.css('left', $(this).position().left);
});
您可以将元素的
offset()
减去其父元素的
offset()
(不一定是最近的父元素):


它返回与
position()
相同的值,但在FF和Chrome中都能正常工作。

刚刚遇到同样的问题,并且删除
边距:0自动不是选项(也不是解决方案:)。这满足了我的需要,因为webkit将我们要查找的值报告为左边距(只要边距大于0,否则它将报告
位置()。左
!):


@Byron,这可能是问题的解决方案,但它没有解释为什么会发生:)使用偏移量实际上会导致其他问题,因为我需要相对于父元素发生的位置。请参阅上面我的补充内容,了解我是如何修复此问题的。
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);
});
iPosLeft = oEl.position().left + parseInt(oEl.css('marginLeft'));