我正在寻找比较两个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/

10-12 04:44