Получить стиль таблицы стилей элемента в JavaScript - PullRequest
4 голосов
/ 27 декабря 2008

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

Ответы [ 2 ]

5 голосов
/ 27 декабря 2008

Можно ли получить только указанные в таблице стилей стили элемент (и возвращает нуль, если стиль не определено)?

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

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

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

2 голосов
/ 27 декабря 2008

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

...