如何获取十六进制颜色值而不是RGB值?
使用以下 jQuery 将获取元素背景颜色的 RGB 值:
$('#selector').css('backgroundColor');
有没有办法获取十六进制值而不是 RGB?
Using the following jQuery will get the RGB value of an element's background color:
$('#selector').css('backgroundColor');
Is there a way to get the hex value rather than the RGB?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(25)
TL;DR
使用这个干净的单行函数,同时支持
rgb
和rgba
:2021 更新的答案
自从我最初回答这个问题以来已经过去了很长时间。然后,很酷的 ECMAScript 5 和 2015+ 功能在浏览器上大量可用,例如 箭头函数、Array.map,字符串.padStart 和模板字符串。几年以来,编写跨浏览器的单行
rgb2hex
是可能的:它的工作原理是使用正则表达式获取
rgb
字符串中的每个数字,slice(1)
仅获取数字(match
的第一个结果) code> 是完整的字符串本身),map
迭代每个数字,每次迭代使用parseInt
转换为Number
,然后返回到十六进制String
(通过以 16 为基数的转换),如果需要,可通过padStart
添加零。最后,将每个转换/调整的数字连接
到一个以'#'
开头的唯一String
。当然,我们可以毫不费力地将其扩展为单行 rgba2hex:
就是这样。但如果您想深入了解旧式 JavaScript 世界,请继续阅读。
2010 年原始答案
这是我根据 @Matt 建议编写的更清晰的解决方案:
某些浏览器已经返回十六进制颜色(从 Internet Explorer 8 及更低版本开始)。如果您需要处理这些情况,只需在函数内附加一个条件,就像 @gfrobenius 建议的那样:
如果您使用 jQuery 并且想要更完整的方法,您可以使用 CSS Hooks 自 jQuery 1.4.3 起可用,正如我在回答此问题时所示:我可以强制 jQuery.css("backgroundColor") 返回十六进制格式吗?
TL;DR
Use this clean one-line function with both
rgb
andrgba
support:2021 updated answer
Much time has passed since I originally answered this question. Then cool ECMAScript 5 and 2015+ features became largely available on browsers, like arrow functions, Array.map, String.padStart and template strings. Since some years, it's possible to write cross-browser one-liner
rgb2hex
:It works by using a regular expression to get each digit inside the
rgb
string,slice(1)
to get only the digits (the first result ofmatch
is the full string itself),map
to iterate through each digit, each iteration converting toNumber
withparseInt
, then back to an hexadecimalString
(through a base-16 conversion), adding zero if needed viapadStart
. Finally,join
each converted/adjusted digit to a uniqueString
starting with'#'
.Of course, we could extend it without much effort as an one-liner
rgba2hex
:And that's it. But if you want to dive deep in the old school JavaScript world, keep reading.
Original 2010 answer
Here is the cleaner solution I wrote based on @Matt suggestion:
Some browsers already returns colors as hexadecimal (as of Internet Explorer 8 and below). If you need to deal with those cases, just append a condition inside the function, like @gfrobenius suggested:
If you're using jQuery and want a more complete approach, you can use CSS Hooks available since jQuery 1.4.3, as I showed when answering this question: Can I force jQuery.css("backgroundColor") returns on hexadecimal format?
(来源)
(Source)
大多数浏览器在使用时似乎都返回RGB值:
只有IE(目前仅测试了6个)返回Hex值。
为了避免 IE 中出现错误消息,您可以将该函数包装在 if 语句中:
Most browsers seem to return the RGB value when using:
Only I.E (only 6 tested so far) returns the Hex value.
To avoid error messages in I.E, you could wrap the function in an if statement:
更新了 @ErickPetru 以实现 rgba 兼容性:
我更新了正则表达式以匹配 alpha 值(如果已定义),但不使用它。
Updated @ErickPetru for rgba compatibility:
I updated the regex to match the alpha value if defined, but not use it.
这是一个不使用 jQuery 的 ES6 oneliner:
Here's an ES6 one liner that doesn't use jQuery:
这是一个还检查透明的版本,我需要这个,因为我的目标是将结果插入到样式属性中,其中十六进制颜色的透明版本实际上是单词“透明”。
Here is a version that also checks for transparent, I needed this since my object was to insert the result into a style attribute, where the transparent version of a hex color is actually the word "transparent"..
短的
Short
以十六进制形式返回元素背景颜色的函数。
用法示例:
jsfiddle
Function that returns background color of an element in hex.
usage example:
jsfiddle
可读&&无 Reg-exp(无 Reg-exp)
我创建了一个使用可读基本函数且无 reg-exp 的函数。
该函数接受十六进制、rgb 或 rgba CSS 格式的颜色并返回十六进制表示形式。
编辑:解析 rgba() 格式时出现错误,已修复...
Readable && Reg-exp free (no Reg-exp)
I've created a function that uses readable basic functions and no reg-exps.
The function accepts color in hex, rgb or rgba CSS format and returns hex representation.
EDIT: there was a bug with parsing out rgba() format, fixed...
相同的答案像@Jim F答案但ES6语法,所以,更少的指令:
Same answer like @Jim F answer but ES6 syntax , so, less instructions :
从引导颜色选择器获取的颜色类
如何使用
color class taken from bootstrap color picker
how to use
只是添加到上面@Justin的答案..
它应该是
由于上面的parse int函数截断前导零,因此产生5或4个字母的错误颜色代码可能是...即对于rgb(216, 160, 10)它产生#d8a0a,而它应该是#d8a00a。
谢谢
Just to add to @Justin's answer above..
it should be
As the above parse int functions truncates leading zeroes, thus produces incorrect color codes of 5 or 4 letters may be... i.e. for rgb(216, 160, 10) it produces #d8a0a while it should be #d8a00a.
Thanks
这个看起来好一点:
更简洁的一句话:
强制 jQuery 总是返回十六进制:
This one looks a bit nicer:
a more succinct one-liner:
forcing jQuery to always return hex:
由于问题是使用 JQuery,因此这里有一个基于 Daniel Elliott 代码的 JQuery 插件:
使用它如下:
Since the question was using JQuery, here’s a JQuery plugin based on Daniel Elliott’s code:
Use it like:
这是我发现的解决方案,不会在 IE 中引发脚本错误:
http://haacked.com/archive/2009/12 /29/convert-rgb-to-hex.aspx
Here's a solution I found that does not throw scripting errors in IE:
http://haacked.com/archive/2009/12/29/convert-rgb-to-hex.aspx
Steven Pribilinskiy 的答案去掉了前导零,例如#ff0000 变为#ff00。
解决方案是附加前导 0 和最后 2 位数字的子字符串。
Steven Pribilinskiy's answer drops leading zeroes, for example #ff0000 becomes #ff00.
A solution is to append a leading 0 and substring off the last 2 digits.
改进的函数“hex”
Improved function "hex"
这是我的解决方案,也 touppercase使用参数并检查提供的字符串中其他可能的空格和大写。
jsfiddle
jsperf
进一步的改进可能是
trim()
rgb
字符串Here is my solution, also does touppercase by the use of an argument and checks for other possible white-spaces and capitalisation in the supplied string.
On jsfiddle
Speed comparison on jsperf
A further improvement could be to
trim()
thergb
string我漂亮的非标准解决方案
HTML
jQuery
Result
My beautiful non-standard solution
HTML
jQuery
Result
将 RGB 转换为十六进制
我正在使用 Jasmine 量角器,并且收到如下错误
- 预期 [ 'rgba(255, 255, 255, 1)' ] 包含 '#fff'。
下面的功能对我来说效果很好。
}
Convert RGB to Hex
I am using Jasmine protractor and I was getting errors like
- Expected [ 'rgba(255, 255, 255, 1)' ] to contain '#fff'.
Below function worked fine for me.
}
对于所有函数式编程爱好者,这里有一个有点函数式的方法:)
然后像这样使用它:
To all the Functional Programming lovers, here is a somewhat functional approach :)
then use it like:
我的紧凑版
my compact version
完整案例(rgb、rgba、透明...等)解决方案(coffeeScript)
full cases (rgb, rgba, transparent...etc) solution (coffeeScript)
colord 包可能是最好的选择,它虽小但功能强大。
The colord package might be the best choice which is tiny but powerful.
您好,这是我使用 Javascript 获取元素颜色后的解决方案
Hi here's my solution after getting the element's color with Javascript