Получить стиль таблицы стилей элемента в JavaScript

Я использовал функцию 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. Это делает невозможным определить, центрирован ли элемент, потому что пользователь хотел, чтобы он был центрирован, или центрирован, потому что это стиль по умолчанию.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
4
0
10 420
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Is it possible to get only the stylesheet specified styles of an element (and return null if the style is undefined)?

Это фактически то, что делает рутина, которую вы представляете. Проблема в том, что в большинстве сценариев большинство стилей нет undefined - они наследуются и / или определяются внутренней таблицей стилей отдельного браузера.

Вы можете, приложив много усилий, выполнить итерацию все правил, определяющих рассматриваемый стиль, в все таблиц стилей в текущем представлении документа, оценить их для рассматриваемого элемента, и, если ни один из них не применяется ... и если ни один из них не применяется к родительскому элементу (или этот конкретный стиль не унаследован) ... считайте его неопределенным. Это будет медленным и подверженным ошибкам невероятно. Я бы не рекомендовал пробовать.

Возможно, вам лучше сделать шаг назад и спросить, зачем вам вообще может понадобиться такая вещь?

Спасибо за хорошо продуманный ответ Шог - в итоге я объединил идею Пеза с вашим предложением, попробуйте подумать об этом по-другому!

jb. 28.12.2008 00:00

Может быть, ваш компонент может обернуть стили, которыми он управляет? Затем, когда стиль задается с помощью компонента, компонент знает, чего хочет пользователь.

Другие вопросы по теме