jQuery .css(“left”)在Chrome中返回“auto”而不是实际值
我有div元素,左边和顶部定义, 没有绝对位置 ,我想使用jQuery读取左边和顶部值。
使用$("#MyId").css("left")
在IE浏览器(IE8 $("#MyId").css("left")
给出了预期的结果,但在Chrome中它返回“auto”,尽管这些值是以元素样式显式写入的。
以下是测试用例: http : //jsfiddle.net/qCDkb/2/
请注意IE和Chrome之间的区别。
此外,这在jQuery 1.4.2中运行良好,在jQuery 1.4.3及更高版本中“失败”。
任何见解都是受欢迎的。 🙂
正如评论中所讨论的那样,将left
设置为auto
position: static
声音在某种程度上是正确的,看到left
在上下文中没有意义。
至于Chrome和IE返回不同值的原因: .css()
提供了浏览器计算样式函数的统一网关,但它并没有统一浏览器实际计算样式的方式。 浏览器以不同方式决定这种边缘情况并不罕见。
至于为什么jQuery 1.4.2和1.4.3以不同的方式做到这一点,我不确定,但1.4.3的发行说明中有这个:
几乎整个CSS模块都被重写,完全专注于可扩展性。 您现在可以编写自定义CSS插件,扩展.css()和.animate()提供的function。
尝试$("your selector").position().top;
这是jQuery的奇怪行为。 但是您可以使用本机javascript方法来获取css值:
$("#Panel1")[0].style.left
该表达式将返回相应的css属性。
加
position: absolute;
要么
position: relative;
到您使用的元素
我知道这是一个老post,但我遇到了同样的问题,并认为我会建议几个解决方案。 这个问题似乎不是Chrome特有的,因为我也可以在Firefox中重现。
我能够解决这两种方式中的一种。 将CSS样式放在与HTML相同的文件中,而不是使用单独的CSS文件。 或者,调用window.onload中的函数。 看起来这些值在所有内容都已加载之前无法用于浏览器,如果样式位于外部样式表中。
希望这有用。