马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
这时候如果传入的是一个标签就会报错,我希望的是如果传入的是一个标签则让hexadecimal = "#000000"function hexadecimalToRgb(hexadecimal = "#000000") {
if (hexadecimal == undefined) {
hexadecimal = "#000000"
}
let oldname = hexadecimal
if (typeof (hexadecimal) == "number") {
hexadecimal = "#" + hexadecimal
}
if (isNaN(hexadecimal)) {
if (hexadecimal.startsWith("#") != true) {
if (hexadecimal.indexOf("#") >= 0) {
let arr1 = hexadecimal.split("")
while (arr1.indexOf("#") >= 0) {
arr1.splice(arr1.indexOf("#"), 1)
}
arr1 = arr1.join("")
hexadecimal = "#" + arr1
console.log(`你输入了一个错误的十六进制:${oldname}。已用${hexadecimal}代替。`)
} else {
if (checkNumberInStr(hexadecimal)) {
hexadecimal = "#" + hexadecimal
console.log(`你输入了一个错误的十六进制:${oldname}。已用${hexadecimal}代替。`)
} else {
return false
}
}
}
} else {
hexadecimal = "#" + hexadecimal
}
if (hexadecimal.length > 7) {
let hexs = hexadecimal.slice(0, 7)
console.log(`你貌似传输了一个错误的参数:${hexadecimal},已用${hexs}来代替。`)
hexadecimal = hexs
}
if (hexadecimal.length < 7) {
let xiaoshu = ""
for (let i = 0; i < 7 - hexadecimal.length; i++) {
xiaoshu = xiaoshu + "0"
}
let hexss = hexadecimal
hexadecimal = hexadecimal + xiaoshu
console.log(`你貌似传输了一个省略的参数:${hexss},已用${hexadecimal}来代替。`)
}
let bcolorred = parseInt(hexadecimal.substring(1, 3), 16)
let bcolorgreen = parseInt(hexadecimal.substring(3, 5), 16)
let bcolorblue = parseInt(hexadecimal.substring(5, 7), 16)
let rgb = [bcolorred, bcolorgreen, bcolorblue]
if (Object.is(rgb[0], NaN) || Object.is(rgb[1], NaN) || Object.is(rgb[2], NaN)) {
console.log(`你输入了一个错误的十六进制:${hexadecimal}。`)
return false
}
return rgb
}
function checkNumberInStr(str = "") {
let bo = false
for (var i = 0; i < 10; i++) {
if (str.indexOf(i) == -1) {
bo = true;
break;
}
}
return bo;
}
判断传入的是一个标签(HTML元素)可以使用typeof操作符来检查。例如:
function isHTMLElement(element) {
return typeof element === 'object' && element !== null && element.nodeType === 1;
}
在你的代码中适当的位置调用这个函数,如果返回true,说明传入的是一个标签,可以将hexadecimal设为"#000000"。
另外,你可以简化你的代码,去掉一些不必要的判断和转换。以下是我优化后的代码:
function hexadecimalToRgb(hexadecimal = "#000000") {
if (!isHTMLElement(hexadecimal)) {
// 如果不是标签,则赋值为"#000000"
hexadecimal = "#000000";
}
let hex = hexadecimal.toLowerCase();
// 如果传入的十六进制颜色值不合法,则使用默认值
if (!/^#[0-9a-f]{6}$/.test(hex)) {
console.log(`你输入了一个错误的十六进制:${hexadecimal}。已用#000000代替。`);
hex = "#000000";
}
// 提取红、绿、蓝三个分量的值
let red = parseInt(hex.slice(1, 3), 16);
let green = parseInt(hex.slice(3, 5), 16);
let blue = parseInt(hex.slice(5, 7), 16);
let rgb = {red, green, blue};
return rgb;
}
function isHTMLElement(element) {
return typeof element === 'object' && element !== null && element.nodeType === 1;
}
这样,当传入的参数不是标签时,hexadecimal将被赋值为"#000000";当传入的十六进制颜色值不合法时,会输出错误提示信息,并使用默认值"#000000"代替。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
|