Я использовал функцию getStyle Джона Ресига из Pro JavaScript Techniques, чтобы получить стиль элементов:
function getStyle(elem, name) {
// J/S Pro Techniques p136
if (elem.style[name]) {
return elem.style[name];
} else if (elem.currentStyle) {
return elem.currentStyle[name];
}
else if (document.defaultView && document.defaultView.getComputedStyle) {
name = name.replace(/([A-Z])/g, "-$1");
name = name.toLowerCase();
s = document.defaultView.getComputedStyle(elem, "");
return s && s.getPropertyValue(name);
} else {
return null;
}
}
Однако этот метод возвращает стили по умолчанию для элемента, если стиль не указан:
http://johnboxall.github.com/test/getStyle.html
альтернативный текст http://img.skitch.com/20081227-8qhxie51py21yxuq7scy32635a.png
Можно ли получить только стили элемента, указанные в таблице стилей (и вернуть null, если стиль не определен)?
Обновлять:
Зачем мне такой зверь? Я создаю небольшой компонент, который позволяет пользователям стилизовать элементы. Один из стилей, который можно применить, - это text-align - left, center, right. Использование нестилизованных элементов getStyle по умолчанию - center. Это делает невозможным определить, центрирован ли элемент, потому что пользователь хотел, чтобы он был центрирован, или центрирован, потому что это стиль по умолчанию.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Is it possible to get only the stylesheet specified styles of an element (and return null if the style is undefined)?
Это фактически то, что делает рутина, которую вы представляете. Проблема в том, что в большинстве сценариев большинство стилей нет undefined - они наследуются и / или определяются внутренней таблицей стилей отдельного браузера.
Вы можете, приложив много усилий, выполнить итерацию все правил, определяющих рассматриваемый стиль, в все таблиц стилей в текущем представлении документа, оценить их для рассматриваемого элемента, и, если ни один из них не применяется ... и если ни один из них не применяется к родительскому элементу (или этот конкретный стиль не унаследован) ... считайте его неопределенным. Это будет медленным и подверженным ошибкам невероятно. Я бы не рекомендовал пробовать.
Возможно, вам лучше сделать шаг назад и спросить, зачем вам вообще может понадобиться такая вещь?
Может быть, ваш компонент может обернуть стили, которыми он управляет? Затем, когда стиль задается с помощью компонента, компонент знает, чего хочет пользователь.
Спасибо за хорошо продуманный ответ Шог - в итоге я объединил идею Пеза с вашим предложением, попробуйте подумать об этом по-другому!