2015-06-17 101 views
0

假設我的任務是使用Javascript在屏幕上打印出所有CSS規則。我寫了下面的代碼:在div中輸出CSS樣式規則(在屏幕上)

var outputDiv = document.createElement("div"); 
outputDiv.id = "output"; 
document.body.appendChild(outputDiv); 

function cssOutput() { 
    var sheets = document.styleSheets; 
    if (sheets.length > 0) { 
     for (var i in sheets) { 
      var rules = sheets[i].cssRules; 
      for (var j in rules) { 
       var rule = rules[j].cssText; 
       console.log(rule); 
       document.getElementById("output").innerHTML = rule; 
      } 
     } 
    } 
} 
//console.log(document.styleSheets[0].cssRules[0].cssText); 
cssOutput(); 

但是,我只是在屏幕上「未定義」,儘管它可以記錄它們。

+0

嘗試將其添加到您的innerHTML,而不是一直替換它。 – JiFus

回答

1

的一個問題是,你與你的每次循環覆蓋輸出DIV(所以每個規則覆蓋前一個)。 考慮更改這一行:

document.getElementById("output").innerHTML = rule; 

這一行:

document.getElementById("output").innerHTML += rule; // Note "+=" not "=" 

使得每個迭代將寫入下一個規則。

1

在這一行:

for (var j in rules){ 

您使用的是換的,這將遍歷的規則對象的屬性,我不認爲這是你想要的。你應該將其更改爲:

for (var j = 0; j < rules.length; j++) 
+0

這很好,但控制檯記錄「Uncaught TypeError:無法讀取未定義的屬性」長度「。 –

+0

我原本沒有注意到這一點,但它看起來像你有同樣的問題「for(var i in sheets){」 – dgavian

2

檢查小提琴.. http://jsfiddle.net/4cqcpngy/

var outputDiv = document.createElement("div"); 
outputDiv.id="output"; 
document.body.appendChild(outputDiv); 

function cssOutput(){ 
    var sheets = document.styleSheets; 
    if (sheets.length>0){ 
     for (var i in sheets){ 
      var rules = sheets[i].cssRules; 
      for (var j = 0; j < rules.length; j++){ 
       var rule = rules[j].cssText; 
       console.log(rule); 
       document.getElementById("output").innerHTML += rule; 
}}}} 


cssOutput(); 
+1

對不起,我使用document.getElementById(「output」)編輯它。innerHTML + = rule;現在我將編輯回來,使你的回答感覺。 –

+0

謝謝,這實際上更好。 –

+0

檢查小提琴。有用。我添加了@dgavian答案。 –