Javascript ';getPropertyPriority';不';使用'获取样式时不起作用;getComputedStyle';

Javascript ';getPropertyPriority';不';使用'获取样式时不起作用;getComputedStyle';,javascript,css,Javascript,Css,我想要一个dom样式来增加优先级 “CSSStyleDeclaration”具有“getPropertyPriority”方法,其返回值存在问题。在下面的例子中,当我得到'background'时,它返回空,我想得到'important' 使用“样式表”获得的值是正常的,但我不想使用循环来查找相应的选择器,我希望给我一个简单的解决方案 这是文件 //日志为“”,我想获取“重要” log(window.getComputedStyle(document.getElementById('box')

我想要一个dom样式来增加优先级

“CSSStyleDeclaration”具有“getPropertyPriority”方法,其返回值存在问题。在下面的例子中,当我得到'background'时,它返回空,我想得到'important'

使用“样式表”获得的值是正常的,但我不想使用循环来查找相应的选择器,我希望给我一个简单的解决方案

这是文件

//日志为“”,我想获取“重要”
log(window.getComputedStyle(document.getElementById('box')).getPropertyPriority('background'));
//日志是“重要的”
console.log(document.styleSheets[0].cssRules[0].style.getPropertyPriority('background');
//日志是“重要的”
log(document.getElementById('box').style.getPropertyPriority('width'))
#框{
高度:100px;
背景:黑色!重要;
}

文档访问样式。getElementById('box')。style
文档。样式表[0]。cssRules[0]。style
将直接按原样提供样式,而按照名称执行
getComputedStyle
时,将始终提供呈现样式,即
!重要信息
已删除,因此
getPropertyPriority
将始终提供
'
。我不认为有选择,但通过循环检查所有的样式

您可以像以前一样检入样式表和样式属性:

var arr=['background','width','height'];
arr.forEach(prop=>{
//log(window.getComputedStyle(document.getElementById('box')).getPropertyPriority(prop));
var isImportant=(document.styleSheets[0].cssRules[0].style.getPropertyPriority(prop)+document.getElementById('box').style.getPropertyPriority(prop)).length>0;
log({prop,isImportant});
});
#框{
高度:100px;
背景:黑色!重要;
}

getComputedStyleStyle返回的CSSSStyleDeclaration对象与从样式表或元素的
style
属性中获得的对象稍有不同

首先,此对象是只读的,不能对其使用
setProperty

const comp=getComputedStyle(测试);
comp.setProperty('backgroundColor','green')

你能解释一下“我想要一个dom样式来增加优先级”是什么意思吗?使用
窗口。getComputedStyle
返回基于[link]()的“一个包含元素CSS声明块的CSSSStyleDeclaration对象”。这是设计的结果。计算值不是作者编写的值,不需要任何重要性,因为它始终是唯一的值。例如,如果执行
width:calc(3%+23px)
计算值将不会是
calc(3%+23px)
。肯定已经有人被愚弄了…这真的让我头疼,谢谢你的回答。然后我想得到某种风格的dom是'!重要的是,还有其他方法吗?正如我所说,检索当前应用的原始规则通常是不可能的。唯一的方法是浏览所有规则,然后检查它们是否与您的元素匹配,然后按重要性排序,然后选择更高的规则(所有
#foo bar
的规则都高于
。baz>bar
,还有一些js无法捕捉的东西,如
:visted~bar
)。。。就我个人而言,我会重新考虑这样做的必要性。