다음 jQuery를 사용하면 요소 배경색의 RGB 값을 얻을 수 있습니다.
$('#selector').css('backgroundColor');
RGB 대신 16 진수 값을 얻는 방법이 있습니까?
답변
var hexDigits = new Array
("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f");
//Function to convert rgb color to hex format
function rgb2hex(rgb) {
rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
return "#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]);
}
function hex(x) {
return isNaN(x) ? "00" : hexDigits[(x - x % 16) / 16] + hexDigits[x % 16];
}
( 소스 )
답변
@Matt 제안을 기반으로 작성한 클리너 솔루션은 다음과 같습니다.
function rgb2hex(rgb) {
rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
function hex(x) {
return ("0" + parseInt(x).toString(16)).slice(-2);
}
return "#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]);
}
일부 브라우저는 이미 Internet Explorer 8 이하에서 16 진수로 색상을 반환합니다. 이러한 경우를 처리 해야하는 경우 @gfrobenius가 제안한 것처럼 함수 내부에 조건을 추가하십시오.
function rgb2hex(rgb) {
if (/^#[0-9A-F]{6}$/i.test(rgb)) return rgb;
rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
function hex(x) {
return ("0" + parseInt(x).toString(16)).slice(-2);
}
return "#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]);
}
jQuery를 사용하고 더 완벽한 접근 방식을 원한다면 이 질문에 대답했을 때 보여준 jQuery 1.4.3부터 사용 가능한 CSS 후크를 사용할 수 있습니다. jQuery.css ( “backgroundColor”)를 16 진수 형식으로 반환 할 수 있습니까?
답변
대부분의 브라우저는 다음을 사용할 때 RGB 값을 반환하는 것 같습니다.
$('#selector').css('backgroundColor');
IE (지금까지 6 개만 테스트 됨) 만 16 진수 값을 반환합니다.
IE에서 오류 메시지를 피하기 위해 함수를 if 문으로 묶을 수 있습니다.
function rgb2hex(rgb) {
if ( rgb.search("rgb") == -1 ) {
return rgb;
} else {
rgb = rgb.match(/^rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+))?\)$/);
function hex(x) {
return ("0" + parseInt(x).toString(16)).slice(-2);
}
return "#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]);
}
}
답변
rgba 호환성을 위해 @ErickPetru가 업데이트되었습니다.
function rgb2hex(rgb) {
rgb = rgb.match(/^rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+))?\)$/);
function hex(x) {
return ("0" + parseInt(x).toString(16)).slice(-2);
}
return "#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]);
}
정의 된 경우 알파 값과 일치하도록 정규식을 업데이트했지만 사용하지 않았습니다.
답변
jQuery를 사용하지 않는 ES6 one liner는 다음과 같습니다.
var rgb = document.querySelector('#selector').style['background-color'];
return '#' + rgb.substr(4, rgb.indexOf(')') - 4).split(',').map((color) => parseInt(color).toString(16)).join('');
답변
여기 투명도를 확인하는 버전이 있습니다. 객체가 16 진수 색상의 투명 버전이 실제로 “투명”이라는 스타일 속성에 결과를 삽입했기 때문에 필요했습니다.
function rgb2hex(rgb) {
if ( rgb.search("rgb") == -1 ) {
return rgb;
}
else if ( rgb == 'rgba(0, 0, 0, 0)' ) {
return 'transparent';
}
else {
rgb = rgb.match(/^rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+))?\)$/);
function hex(x) {
return ("0" + parseInt(x).toString(16)).slice(-2);
}
return "#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]);
}
}
답변
요소의 배경색을 16 진수로 반환하는 함수입니다.
function getBgColorHex(elem){
var color = elem.css('background-color')
var hex;
if(color.indexOf('#')>-1){
//for IE
hex = color;
} else {
var rgb = color.match(/\d+/g);
hex = '#'+ ('0' + parseInt(rgb[0], 10).toString(16)).slice(-2) + ('0' + parseInt(rgb[1], 10).toString(16)).slice(-2) + ('0' + parseInt(rgb[2], 10).toString(16)).slice(-2);
}
return hex;
}
사용 예 :
$('#div1').click(function(){
alert(getBgColorHex($(this));
}