JQuery.css( "left" ) возвращает "auto" вместо фактического значения в Chrome

У меня есть элемент div с указанным слева и сверху, без абсолютной позиции, и я хочу прочитать левое и верхнее значения с помощью jQuery.

Использование $("#MyId").css("left") дало ожидаемый результат в браузере IE (IE8), но в Chrome вместо него было возвращено "auto", хотя значения явно написаны в стиле элемента.

Вот пример: http://jsfiddle.net/qCDkb/2/

Обратите внимание на разницу между IE и Chrome.

Кроме того, это хорошо работает в jQuery 1.4.2 и "failing" в jQuery 1.4.3 и выше.

Любые идеи приветствуются.: -)

Ответ 1

Как обсуждалось в комментариях, установка left в auto для position: static звучит как-то правильно, поскольку left не имеет смысла в контексте.

Что касается того, почему Chrome и IE возвращают разные значения: .css() предоставляет унифицированный шлюз для функций вычисляемого стиля браузеров, но он не унифицирует способ фактического вычисления браузерами стиля. Это не редкость для браузеров по-разному решать такие случаи кросс.

Что касается того, почему jQuery 1.4.2 и 1.4.3 делают это по-другому, я не знаю точно, но там это в 1.4.3 примечания к выпуску:

Почти весь модуль CSS был переписан, полностью фокусируясь на расширяемости. Теперь вы можете создавать пользовательские плагины CSS, расширяющие функциональность, предоставляемую .css() и .animate().

Ответ 2

Попробуйте $("your selector").position().top;

Ответ 3

Это странное поведение для jQuery. Но вы можете использовать собственные методы javascript для получения значений css:

$("#Panel1")[0].style.left

Это выражение вернет соответствующее свойство css.

Ответ 4

добавить

position: absolute;

или

position: relative;

к элементу, который вы используете слева на

Ответ 5

Я знаю, что это старый пост, но я столкнулся с этой проблемой и подумал, что предлагаю пару решений. Похоже, эта проблема не специфична для Chrome, так как я смог воспроизвести и в Firefox.

Я смог решить этот один из двух способов. Либо укажите стили CSS в том же файле, что и ваш HTML, вместо использования отдельного файла CSS. ИЛИ, вызовите функцию внутри window.onload. Похоже, что значения не доступны для браузера, пока все не загрузится, если стили находятся во внешней таблице стилей.

Надеюсь, что это будет полезно.

Ответ 6

Это вне меня, как ты можешь иметь более уродливых детей, чем ты, когда ты уродлив для начала. Разве это не правда, мой враг Исрахелли? обычно дети всегда красивее... не твоя ситуация