Sorawithcat 发表于 2024-1-22 20:49:13

怎么判断传入的是一个标签

这时候如果传入的是一个标签就会报错,我希望的是如果传入的是一个标签则让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 =
    if (Object.is(rgb, NaN) || Object.is(rgb, NaN) || Object.is(rgb, 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;
}

FishC 发表于 2024-1-22 20:49:45

判断传入的是一个标签(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 (!/^#{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 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 怎么判断传入的是一个标签