我有一个background-color
为green
的div
。在HTML
和JavaScript
:
<div id="rectangle" style="background-color:green;width:200px;height:100px"></div>
var div = document.getElementById("rectangle")
console.log(div.style.backgroundColor)
控制台日志green
.
我尝试在jQuery中做同样的事情。但是我得到了:
var $div = $('#rectangle').css("backgroundColor");
console.log($div)
控制台日志rgb(0, 128, 0)
有没有办法在jQuery
中返回文本green
的实际颜色。或者,有没有一种简单的方法可以将rgb(0, 128, 0)
转换为green
?
我正在尝试获取颜色,而不是设置颜色。
这里有一个小的颜色库 https://github.com/Olical/color 您可以使用它将 rgb 字符串格式的颜色转换为数组,而不是像这样命名:
console.info(color.toName(color.toArray("rgb(0, 128, 0)")))
<script src="https://unpkg.com/olical-color@1.0.1/src/color.js"></script>
当你将jQuery 的css()
函数与单个参数一起使用时,它会通过getComputedStyle()
函数调用获取当前应用的(即,在应用样式表、内联样式等之后)与传递的参数匹配的 style 属性。
因此,当您调用该函数时,您将获得最初设置的 CSS 值的浏览器内部表示形式。让我们用一个例子来说明这一点,但对 DOM/CSSOM 使用 JavaScript:
window.onload = function () {
var kermit = document.getElementById('kermit');
console.log('style: ', kermit.style.backgroundColor);
console.log('computed: ', window.getComputedStyle(kermit).backgroundColor);
};
<div id="kermit" style="background-color: green; color: #fff">It ain't easy</div>
根据您的浏览器,它应显示为第一个日志条目green
,第二个日志条目应显示为rgb(0, 128, 0)
。我说"取决于你的浏览器"是因为,正如jQuery的css文档中所解释的那样:
不同的浏览器可能会返回逻辑上但不等于文本的 CSS 颜色值,例如 #FFF、#ffffff 和 rgb(255,255,255)。
获得您想要的东西的最简单方法是...好吧,除了使用xxxmatko指出的库之外...以在通过getComputedStyle
检索的颜色值与名称之间创建映射。请注意,这不会告诉您样式表的作者或最初指定颜色名称的任何内容,还是碰巧具有相同 RGB 值的其他值。
window.onload = function () {
var colorMap = {
'rgb(0, 128, 0)': 'green'
};
var kermit = document.getElementById('kermit');
var computed = window.getComputedStyle(kermit).backgroundColor;
console.log('color name: ', colorMap[computed]);
};
<div id="kermit" style="background-color: green; color: #fff">It ain't easy</div>
为其余命名颜色(以及不同的相应颜色格式)创建该地图留给读者作为练习。