鱼C论坛

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

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

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

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

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

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;
}
最佳答案
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 (!/^#[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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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 (!/^#[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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 01:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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