Привет Я разрабатываю расширение для Google Chrome и использую window.getComputedStyle() для получения определенного свойства элемента DOM. Таким образом, я получаю несколько свойств и создаю CSS. Я хочу отменить свойства со значениями по умолчанию. Как я могу это сделать? Как узнать значение по умолчанию для свойства?
Window.getComputedStyle(): Как удалить свойства со значениями по умолчанию?
Ответ 1
Взгляд через источник хрома привел меня к: node.ownerDocument.defaultView.getMatchedCSSRules(node, '');
Я использовал его для создания этой функции, которая вернет только стили, определенные свойством style или совпадающим правилом 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);
}
}
}
Ответ 2
Это может быть очень, очень сложно, поскольку нет единого способа определить, откуда взялись правила CSS элемента. computedStyle
смешивает их все вместе, чтобы показать конечный результат. Значения по умолчанию по определению трудно выбрать из этого.
У меня есть альтернативная идея - если она применима в вашей ситуации:
-
Программно отключить каждую таблицу стилей, участвующую в этой странице, в течение секунды. Отключите все встроенные элементы
<style>
из DOM. -
Если, когда все таблицы стилей были отключены, элемент
computedStyle
не изменился, вы имеете дело со значением по умолчанию.
Вы даже можете узнать, какие таблицы стилей содержат правила, применяемые к элементу, отключая таблицы стилей один за другим и отслеживая, изменился ли вычисляемыйStyle.
Это, очевидно, довольно сложно и медленно, но это единственный безопасный способ, о котором я могу думать.