我正在编写一个将rgb转换为十六进制颜色代码的脚本。但是它只转换前两个字符,然后为其余字符抛出NaN错误。
这就是我所拥有的:
function convert(r, g, b) {
return toHex(r) + toHex(g) + toHex(b);
}
function toHex(c) {
c = parseInt(c);
return "0123456789abcdef".charAt((c - c % 16) / 16) + "0123456789abcdef".charAt(c % 16);
}
function getStyle(id) {
var elem = document.getElementById(id);
var style = window.getComputedStyle(elem, null).getPropertyValue('background-color');
var clear = style.replace(/[rgb\()]/g, '');
document.write(clear);
document.getElementById(id).innerHTML = '<span>#' + convert(clear) + '</span>';
}
getStyle('box1');
getStyle('box2');
getStyle('box3');
getStyle('box4');
当我输入转换(13,49,96)时,它会正确转换它,它无法正常工作。任何人都可以提供一些见解吗?
修改的
这是我正在使用的CSS:
#box1 {background-color:#0d3160;}
#box2 {background-color:#ffffff;}
#box3 {background-color:#ecebe3;}
#box4 {background-color:#242e35;}
以下是RGB值
rgb(13, 49, 96)
rgb(255, 255, 255)
rgb(236, 235, 227)
rgb(36, 46, 53)
答案 0 :(得分:2)
您正在将字符串传递给函数,您需要将其转换为数组并将每个元素传递给函数Convert:
function getStyle(id) {
var elem = document.getElementById(id);
var style = window.getComputedStyle(elem, null).getPropertyValue('background-color');
var clear = style.replace(/[rgb\()]/g, '');
document.write(clear);
document.getElementById(id).innerHTML = '<span>#' + convert.apply(this,clear.split(',')) + '</span>';
}
改变来自
convert.apply(this,clear.split(','))
将变量clear转换为数字数组,然后将它们作为参数传递给函数convert。