Документ говорит, что «jQuery может одинаково интерпретировать CSS и DOM-форматирование свойств нескольких слов», но на самом деле он делает это через грубые и готовые хаки, которые не всегда ведут себя предсказуемо.
В частности, если вы поставили DOM-стиль camelCaseName
, он сначала попытается получить доступ к объявлению стиля inline как style.camelCaseName
. Затем, если это не удается (обычно, поскольку стиль не был установлен в строке), он возвращается к попытке getComputedStyle
с camelCaseName
, преобразованным в hyphen-separated-name
(*). Вычисленный стиль - это не то же самое, что объявленный стиль: браузер может разрешать различные относительные объявления в вычисленном стиле, например, преобразовывать длины в пиксельные единицы.
Однако реверс не поддерживается! Если вы предоставили CSS-стиль hyphen-separated-name
, он перескакивает прямо на код вычисленного стиля (*), не пытаясь преобразовать его в camelCaseName
и посмотреть на встроенный стиль.
Я не думаю, что я хотел бы полагаться на это поведение ... это пахнет немного багги для меня. Если вы можете сохранить декларацию стиля inline от элемента, который хотите измерить, вы должны быть уверены, что всегда будете получать вычисленный стиль независимо от того, какой тип имени вы используете. Но опять же, jQuery не дает вам это как документированное обещание. Такова природа попытки скрыть сложную модель за кажущимся простым интерфейсом «Do What I Mean».
(*): за исключением IE, где нет getComputedStyle
функции, поэтому он возвращается к странным и хрупкой смеси currentStyle
, runtimeStyle
и документ изменения, чтобы попытаться получить вычисляемый стиль вне.
Какие браузеры демонстрируют это поведение? –
сейчас я тестировал его только с Firefox. Но поскольку JSizes (http://www.bramstein.com/projects/jsizes/), похоже, использует те же функции, что и я, я довольно оптимистичен, по крайней мере, «тире-нотация» работает и в других браузерах , Кстати, спасибо за ваш ответ! – speendo