CSSRuleList遍历,错误不可迭代

时间:2018-02-03 21:40:43

标签: javascript dom

for(var ss of document.styleSheets){  
  for(var cssrule of ss.cssRules){continue;}}

document.styleSheets属于StyleSheetList类型,它有一个[Symbol.iterator],因此它是可迭代的。它由许多CSSStyleSheet对象填充,这些对象具有指向CSSRuleList的cssRules属性,该CSSRuleList具有[Symbol.iterator],因此它也应该是可迭代的。

理论上代码应该可以工作,但它会抛出错误(“ss.cssRules不可迭代”),这种行为是否打算?

2 个答案:

答案 0 :(得分:1)

发生错误是因为cssRules可能是nullundefined因此无法迭代,因此在内部for of之前添加空检查。

for(var ss of document.styleSheets){
  if(ss.cssRules){
    for(var cssrule of ss.cssRules){
      continue;
    }
  }
}

答案 1 :(得分:0)

由于this bug而在打字稿中出现(不幸的是尚未修复),我被迫使用以下解决方案

for(let ssIdx=0; ssIdx < document.styleSheets.length; ssIdx++) {  
  let ss = document.styleSheets[ssIdx];

  for(let cssrule of [...ss.cssRules] ) {
    continue;
  }
}