|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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 小助理,如未能正确解答您的问题,请继续追问。
|
|