我正在寻找比较两个Elements的方法,以找到其计算样式中的所有差异。为了做到这一点,我要遍历A的所有样式,并通过执行以下操作将它们与B进行比较:
var stylesA = window.getComputedStyle(a),
stylesB = window.getComputedStyle(b),
length = stylesA.length,
i, style;
for(i = 0; i < length; i++) {
style = stylesA[i];
if(stylesA[style] != stylesB[style]) {
// Respond appropriately
}
}
我这样做的断言是,A的长度将始终是B的长度,但是我纯粹是通过观察为基础。尽管浏览器的长度不同(考虑新属性,供应商前缀版本等),但这些值似乎总是相同的:
var elms = document.querySelectorAll("*"),
length = elms.length, i;
for(i = 0; i < length; i++) {
console.log(window.getComputedStyle(elms[i]).length);
}
应用于随机MDN页面时,为所有元素生成以下内容:
Chrome 35 253
Firefox 30 211
IE11 317
现在,显然这不是所有浏览器的详尽列表,这使我回到我的问题,对于某些元素,这些值是否会有所不同?在
getComputedStyle()
上的DOM Level 2文档和MDN article上都找不到任何内容。特别是,我会假设仅适用于某些Elements的诸如
list-style-type
和 content
之类的样式仅在适用时才在列表中。但是无论如何,两者似乎都存在。某处是否有文件可以证实我的主张?
最佳答案
您的断言确实是正确的:就getComputedStyle
而言,没有特定于元素的CSS样式。但是,如果您包含SVG或MathML中的元素(例如,使用<svg>
标签嵌入),则可能会变得更加复杂。
关于javascript - 对于给定的浏览器,通过getComputedStyle返回的CSSStyleDeclaration是否总是具有相同的长度?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24507131/