我想获取所有CSS声明的所有背景和颜色属性值。
例如:
body {
background: #fff;
}
.aaa {
background: #dedede;
color: #000
}
.text {
color: #333;
padding: 10px
}
我想获得这样的输出,并且这些属性的值需要存储在数组中。
body {
background: #fff;
}
.aaa {
background: #dedede;
color: #000
}
.text {
color: #333;
}
我试图使用jQuery来做到这一点。我可以获得一个特定类的背景属性值,例如.aaa
或.text
。如何获取所有类的值?
$('#btn-invert').on('click', function() {
var color = $("body").css("background");
// var test = invertColor("#00a3fe");
console.log(color);
});
答案 0 :(得分:6)
要阅读样式,请使用document.styleSheets
,其中包含所有信息(摘要中的let cssArr=...
)。当您将其读入数组时,便可以从该数组(摘录中的let genCssStr
)生成字符串。以这种方式读取的颜色的格式例如rgb(255, 255, 255)
,因此我们需要将它们转换为十六进制(通过rgbToHex
src here)
const rgbToHex = (rgbStr) => rgbStr && '#'+rgbStr.slice(4,-1).split(',').map(x => (+x).toString(16).padStart(2, '0')).join('');
const styles = document.styleSheets;
let cssArr =[...styles[0].cssRules].map(x=> ({
class: x.selectorText,
color: rgbToHex(x.style.color),
background: rgbToHex(x.style.background),
}));
let genCssStr=''; cssArr.forEach(x=> genCssStr+=`
${x.class} {
${(x.background ? 'background: '+x.background : '')}
${(x.color ? 'color: '+x.color : '')}
}
`.replace(/^ \n/gm,'')); // remove empty lines
console.log("array:", JSON.stringify(cssArr));
console.log("text:\n", genCssStr);
body {
background: #fff;
}
.aaa {
background: #dedede;
color: #000
}
.text {
color: #333;
padding: 10px
}
答案 1 :(得分:1)
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>jQuery Tests</title>
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script>
$(function(){
var myArray = [];
$("*").each(function() {
var oneArray = [];
var tag = $(this).prop("tagName");
var classname = $(this).attr("class") ? $(this).attr("class") : "N/A";
var background = $(this).css("background-color");
var color = $(this).css("color");
oneArray["tag"] = tag;
oneArray["classname"] = classname;
oneArray["background"] = background;
oneArray["color"] = color;
myArray.push(oneArray);
});
console.log(myArray);
});
</script>
<style>
body {
background: #fff;
}
.myClass {
background: #dedede;
color: #000
}
.myClass2 {
color: #333;
background: #fff;
}
</style>
</head>
<body>
<a class="myClass" href="#">link</a>
<div class="myClass2"></div>
</body>
</html>