window.getComputedStyle (): Как отменить свойства со значениями по умолчанию? - PullRequest
13 голосов
/ 17 декабря 2010

Привет! Я разрабатываю расширение для Google Chrome и использую window.getComputedStyle () для получения определенного свойства элемента DOM.Таким образом, я получаю несколько свойств и создаю CSS.Я хочу отказаться от свойств со значениями по умолчанию.Как я могу это сделать?Как узнать значение свойства по умолчанию?

Ответы [ 2 ]

8 голосов
/ 19 декабря 2010

Просмотр источника хрома привел меня к: node.ownerDocument.defaultView.getMatchedCSSRules (node, '');

Я использовал его для создания этой функции, которая будет возвращать только стили, определенные свойством стиляили соответствующее правило CSS.Все, что появляется в getComputedStyle, но не здесь, будет по умолчанию, но я думаю, что это возвращает то, что вы действительно ищете: стили без значений по умолчанию.

// WebKit only
function getStyle(node) {
  var styles = {};
  var rules = node.ownerDocument.defaultView.getMatchedCSSRules(node, '');

  var i = rules.length;
  while (i--) {
    merge(styles, rules[i].style)
  }
  merge(styles, node.style);

  return styles;

  function merge(obj, style) {
    var i = style.length;
    while(i--) {
      var name = style[i];
      obj[name] = style.getPropertyCSSValue(name);
    }
  }
}
3 голосов
/ 18 декабря 2010

Это может быть очень, очень сложно, так как нет единого способа определить, откуда взялись правила CSS элемента.computedStyle смешивает их все вместе, чтобы показать конечный результат.По умолчанию трудно определить значения по умолчанию.

У меня есть альтернативная идея - если она применима в вашей ситуации:

  • Программно отключите все таблицы стилей, задействованные на странице, на секунду.Отключите все встроенные <style> элементы из DOM.

  • Если, когда все таблицы стилей отключены, computedStyle элемента не изменяется, вы имеете дело со значением по умолчанию.

Вы даже можете узнать, какие таблицы стилей содержат правила, применяемые к элементу, отключив таблицы стилей по одному и отслеживая изменения computedStyle.

Это, очевидно, довольно сложно и медленно,но это единственный безопасный способ, о котором я могу думать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...