老实说,我想不出更好的标题,我是编写自己的 javascript 的新手。
基本上,我有以下脚本,它将一个hex
值转换为一个rgb
值:
$(".submit").click(function() {
function hex2rgb(hex) {
if (hex.length < 3) {
$(".result").text("Error");
}
if (hex[0] == "#") {
hex = hex.substr(1);
}
if (hex.length == 3) {
var temp = hex;
hex = '';
temp = /^([a-f0-9])([a-f0-9])([a-f0-9])$/i.exec(temp).slice(1);
for (var i = 0; i < 3; i++) hex += temp[i] + temp[i];
}
var triplets = /^([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})$/i.exec(hex).slice(1);
return {
red: parseInt(triplets[0], 16),
green: parseInt(triplets[1], 16),
blue: parseInt(triplets[2], 16)
}
}
var hex = $(".hex").val();
var rgb = hex2rgb("#" + hex);
$(".result").text("rgba(" + rgb.red + "," + rgb.green + "," + rgb.blue + ",1)");
});
工作示例:http: //jsfiddle.net/charlescarver/JkeKV/5/
当文本框中输入的位数小于 3(不完整的hex
代码)时,它将文本更改.result
为错误。代码本身工作正常,但控制台抛出一个错误说......
TypeError: 'null' 不是对象(评估 '/^([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2}) $/i.exec(hex).slice')
我假设如果代码少于 3 位,它只会显示错误,而不是尝试继续if (hex.length == 3) {}
运行,它似乎正在这样做。这是正确的吗?
另外,使用if (hex.length == 3) {}
或转换为if (hex.length >= 3) {
的函数会更好吗?我只是在想这个,因为位数必须是?hex
rgb
3 >= x <= 6