鱼C论坛

 找回密码
 立即注册
查看: 199|回复: 1

[已解决]怎么判断传入的是一个标签

[复制链接]
发表于 2024-1-22 20:49:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这时候如果传入的是一个标签就会报错,我希望的是如果传入的是一个标签则让hexadecimal = "#000000"
  1. function hexadecimalToRgb(hexadecimal = "#000000") {
  2.     if (hexadecimal == undefined) {
  3.         hexadecimal = "#000000"
  4.     }
  5.     let oldname = hexadecimal
  6.     if (typeof (hexadecimal) == "number") {
  7.         hexadecimal = "#" + hexadecimal
  8.     }
  9.     if (isNaN(hexadecimal)) {
  10.         if (hexadecimal.startsWith("#") != true) {
  11.             if (hexadecimal.indexOf("#") >= 0) {
  12.                 let arr1 = hexadecimal.split("")
  13.                 while (arr1.indexOf("#") >= 0) {
  14.                     arr1.splice(arr1.indexOf("#"), 1)
  15.                 }
  16.                 arr1 = arr1.join("")
  17.                 hexadecimal = "#" + arr1
  18.                 console.log(`你输入了一个错误的十六进制:${oldname}。已用${hexadecimal}代替。`)
  19.             } else {
  20.                 if (checkNumberInStr(hexadecimal)) {
  21.                     hexadecimal = "#" + hexadecimal
  22.                     console.log(`你输入了一个错误的十六进制:${oldname}。已用${hexadecimal}代替。`)
  23.                 } else {
  24.                     return false
  25.                 }
  26.             }
  27.         }
  28.     } else {
  29.         hexadecimal = "#" + hexadecimal
  30.     }
  31.     if (hexadecimal.length > 7) {
  32.         let hexs = hexadecimal.slice(0, 7)
  33.         console.log(`你貌似传输了一个错误的参数:${hexadecimal},已用${hexs}来代替。`)
  34.         hexadecimal = hexs
  35.     }
  36.     if (hexadecimal.length < 7) {
  37.         let xiaoshu = ""
  38.         for (let i = 0; i < 7 - hexadecimal.length; i++) {
  39.             xiaoshu = xiaoshu + "0"
  40.         }
  41.         let hexss = hexadecimal
  42.         hexadecimal = hexadecimal + xiaoshu
  43.         console.log(`你貌似传输了一个省略的参数:${hexss},已用${hexadecimal}来代替。`)
  44.     }
  45.     let bcolorred = parseInt(hexadecimal.substring(1, 3), 16)
  46.     let bcolorgreen = parseInt(hexadecimal.substring(3, 5), 16)
  47.     let bcolorblue = parseInt(hexadecimal.substring(5, 7), 16)
  48.     let rgb = [bcolorred, bcolorgreen, bcolorblue]
  49.     if (Object.is(rgb[0], NaN) || Object.is(rgb[1], NaN) || Object.is(rgb[2], NaN)) {
  50.         console.log(`你输入了一个错误的十六进制:${hexadecimal}。`)
  51.         return false
  52.     }
  53.     return rgb
  54. }
复制代码
  1. function checkNumberInStr(str = "") {
  2.     let bo = false
  3.     for (var i = 0; i < 10; i++) {
  4.         if (str.indexOf(i) == -1) {
  5.             bo = true;
  6.             break;
  7.         }
  8.     }
  9.     return bo;
  10. }
复制代码
最佳答案
2024-1-22 20:49:45
判断传入的是一个标签(HTML元素)可以使用typeof操作符来检查。例如:

  1. function isHTMLElement(element) {
  2.     return typeof element === 'object' && element !== null && element.nodeType === 1;
  3. }
复制代码


在你的代码中适当的位置调用这个函数,如果返回true,说明传入的是一个标签,可以将hexadecimal设为"#000000"。

另外,你可以简化你的代码,去掉一些不必要的判断和转换。以下是我优化后的代码:

  1. function hexadecimalToRgb(hexadecimal = "#000000") {
  2.     if (!isHTMLElement(hexadecimal)) {
  3.         // 如果不是标签,则赋值为"#000000"
  4.         hexadecimal = "#000000";
  5.     }
  6.    
  7.     let hex = hexadecimal.toLowerCase();
  8.     // 如果传入的十六进制颜色值不合法,则使用默认值
  9.     if (!/^#[0-9a-f]{6}$/.test(hex)) {
  10.         console.log(`你输入了一个错误的十六进制:${hexadecimal}。已用#000000代替。`);
  11.         hex = "#000000";
  12.     }

  13.     // 提取红、绿、蓝三个分量的值
  14.     let red = parseInt(hex.slice(1, 3), 16);
  15.     let green = parseInt(hex.slice(3, 5), 16);
  16.     let blue = parseInt(hex.slice(5, 7), 16);

  17.     let rgb = {red, green, blue};
  18.     return rgb;
  19. }

  20. function isHTMLElement(element) {
  21.     return typeof element === 'object' && element !== null && element.nodeType === 1;
  22. }
复制代码


这样,当传入的参数不是标签时,hexadecimal将被赋值为"#000000";当传入的十六进制颜色值不合法时,会输出错误提示信息,并使用默认值"#000000"代替。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-1-22 20:49:45 | 显示全部楼层    本楼为最佳答案   
判断传入的是一个标签(HTML元素)可以使用typeof操作符来检查。例如:

  1. function isHTMLElement(element) {
  2.     return typeof element === 'object' && element !== null && element.nodeType === 1;
  3. }
复制代码


在你的代码中适当的位置调用这个函数,如果返回true,说明传入的是一个标签,可以将hexadecimal设为"#000000"。

另外,你可以简化你的代码,去掉一些不必要的判断和转换。以下是我优化后的代码:

  1. function hexadecimalToRgb(hexadecimal = "#000000") {
  2.     if (!isHTMLElement(hexadecimal)) {
  3.         // 如果不是标签,则赋值为"#000000"
  4.         hexadecimal = "#000000";
  5.     }
  6.    
  7.     let hex = hexadecimal.toLowerCase();
  8.     // 如果传入的十六进制颜色值不合法,则使用默认值
  9.     if (!/^#[0-9a-f]{6}$/.test(hex)) {
  10.         console.log(`你输入了一个错误的十六进制:${hexadecimal}。已用#000000代替。`);
  11.         hex = "#000000";
  12.     }

  13.     // 提取红、绿、蓝三个分量的值
  14.     let red = parseInt(hex.slice(1, 3), 16);
  15.     let green = parseInt(hex.slice(3, 5), 16);
  16.     let blue = parseInt(hex.slice(5, 7), 16);

  17.     let rgb = {red, green, blue};
  18.     return rgb;
  19. }

  20. function isHTMLElement(element) {
  21.     return typeof element === 'object' && element !== null && element.nodeType === 1;
  22. }
复制代码


这样,当传入的参数不是标签时,hexadecimal将被赋值为"#000000";当传入的十六进制颜色值不合法时,会输出错误提示信息,并使用默认值"#000000"代替。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-1 20:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表