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'));