getComputedStyle объект содержит методы? - PullRequest
1 голос
/ 15 октября 2011

Я настроил здесь демонстрацию: http://jsbin.com/evifeb/

Это больше размышляет, чем правильный вопрос, но ..

Почему браузеры вставляют правила стиля непосредственно ввычисляемые стили объекта вдоль побочных методов и зарезервированных слов?Это просто затрудняет синтаксический анализ. Например, вы можете заметить, что в моей демонстрации я отфильтровываю все, кроме строк и чисел ... это отсеивает функции, которые находятся в той же области видимости.Хотя это не на 100% точно, потому что значение свойства length является числом. Почему бы не иметь функцию-прототип, такую ​​как "getAllStyles", которая возвращает объект стилей без всякой ерунды?

ОК, так что я знаю о «getPropertyValue», но это полезно, только если вы хотите задать правило стиля. Итак, я думаю, что я пытаюсь сказать, это: A) Есть ли правильный метод возврататакой объект, который кросс-браузер безопасен?и B) Если нет, есть ли какие-либо другие свойства (кроме спецификации CSS), кроме длины, которые необходимо исключить?

Большое спасибо за помощь.Я готов вырвать зубы.

1 Ответ

6 голосов
/ 15 октября 2011

Похоже, что вашим for петлям нужна здоровая доза Object.hasOwnProperty.

Использование фильтра hasOwnProperty() приведет к , по большому счету, решить проблему, но это исправляет симптомы, а не причину.Причина в том, что ваш код использует цикл for...in для перебора массива. Не делайте этого.

Используйте for...in для перебора объектов и for для перебора массивов.


И последнее: getComputedStyle() возвращает (только для чтения) экземпляр CSSStyleDeclaration.Используйте предоставляемый API и все просто:

for (var i=0; i<computedStyles.length; i++)
{        
    cssProperty = computedStyles[i];
    cssValue = computedStyles.getPropertyValue(cssProperty);
    // snip...
}

Демо: http://jsbin.com/owenij/2

...