2013-12-18 4 views
8

Возможно ли получить свойство стиля по имени класса (например, по ширине класса), определенному в файле CSS, без необходимости извлекать его из фактического элемента в DOM?Javascript/Prototype: получить значения css, не ссылаясь на элементы DOM?

+0

Очень интересный вопрос .. Ожидание ответа – Mehmet

ответ

1

Это действительно возможно, но намного сложнее.
У вас есть доступ к таблицам стилей с изображением document.styleSheets.

В каждой таблице стилей вы должны получить доступ к cssRules собственности, которая содержит все правила CSS в этой таблице стилей, поэтому, чтобы получить первое правило в первой таблице стилей в DOM вы можете сделать

document.styleSheets[0].cssRules[0]; 

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

var rules = document.styleSheets[0].cssRules, 
    theRule = null; 

for (var i=0; i<rules.length; i++) { 
    if (rules[i].selectorText.toLowerCase() == '#myelement') { 
     var width = rules[i].style.width; 
     break; 
    } 
} 
+0

Я предполагаю, что нет способа выбрать CSS по имени из списка, кроме итерации и сопоставления имени в href, правильно? – user76568

+0

@Dror - На самом деле, 'rules [i] .selectorText' получает текст селектора, например' # elementID' или '.class: hover' и т. Д. Следует отметить, что доступ к таблицам стилей, подобных этому, как правило, является плохим идея, и трудно получить право. – adeneo

+0

Я имел в виду имя файла css, это то, что вы имели в виду также? – user76568

Смежные вопросы