XY Проблема здесь ... Вы не хотите получить элемент, но значение, установленное в таблицах стилей.
Даже если это возможно (да, но очень запутанно), у этого подхода есть большой недостаток: Поскольку правила CSS существуют, это не значит, что они будут применены .
Например, в вашем случае правило .class2
действительно существует и активно, однако, поскольку ни один элемент не соответствует этому правилу, оно не будет иметь никакого эффекта.
Точно так же, даже если элемент соответствует этому правилу, он вполне может быть переопределен другим правилом:
console.log(
getComputedStyle(
document.querySelector('.class2')
).getPropertyValue('top')
); // "10px"
#foo { top: 10px };
.class2 { top: 50px; }
<div class="class2" id="foo"></div>
Итак, да, вы можете получить установленное значение CSSRule:
const matching_rules = [...document.styleSheets].reduce((matched, sheet) => {
[...sheet.cssRules].forEach( r => {
if(r.selectorText && r.selectorText.includes('.class2'))
matched.push(r.style.top);
});
return matched;
}, []);
console.log(matching_rules);
.class2 { top: 50px; }
Но, опять же, это действительно бесполезно, и в большинстве случаев вам просто нужно вызвать getComputedStyle
, как только ваш элемент был присоединен к DOM (его бесполезно вызывать раньше, так как правило CSS не применяется) на элементах, которые не отображаются.
const elem = document.createElement('div');
elem.classList.add('class2');
console.log('matches:', elem.matches('.class2')); // true
const comp = getComputedStyle(elem);
console.log('computed top:', JSON.stringify(comp.getPropertyValue('top'))); // "" (the default)
.class2 {
top: 50px;
}