想问一下问什么首次点击按钮2不能成功变化div2的颜色

1、第一次点击按钮2时不能成功调用函数try2(),点击两次可以调用,其他的时候都正常

2、代码如下:


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
    #div1{
        position: relative;
        width: 100px;
        height: 100px;
        background: black;
        border: 1px solid blueviolet;
    }
    #div2{
        position: relative;
        width: 100px;
        height: 100px;
        background:transparent;
        border: 1px solid blueviolet;
    }
    </style>
    <script>
        function try1(){
            var div1=document.getElementById('div1');
            var div2=document.getElementById('div2');
            if(div1.style.background=='transparent'){
                div1.style.background='black';
                div2.style.background='transparent';
            }else{
                div1.style.background='transparent';
                div2.style.background='black';
            }
        }
        function try2(){
            var div1=document.getElementById('div1');
            var div2=document.getElementById('div2');
            if(div2.style.background=='transparent'){
                div2.style.background='black';
                div1.style.background='transparent';
            }else{
                div2.style.background='transparent';
                div1.style.background='black';
            }
        }
    </script>
</head>
<body>
    <button onclick="try1()">1</button><div id="div1"></div>
    <button onclick="try2()">2</button><div id="div2"></div>
</body>
</html>


div2.style.background获取不到级联样式表中的样式,只能获取到dom style属性中的。js改成下面的,获取级联样式中的背景色,但是注意transparent返回的是rgba格式的

img

如果不想改js代码,需要给dom直接添加style属性设置background

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        #div1 {
            position: relative;
            width: 100px;
            height: 100px;
            background: black;
            border: 1px solid blueviolet;
        }

        #div2 {
            position: relative;
            width: 100px;
            height: 100px;
            background: transparent;
            border: 1px solid blueviolet;
        }
    </style>
    <script>
        function try1() {
            var div1 = document.getElementById('div1');
            var div2 = document.getElementById('div2');
            if (getCss(div1, 'background-color') == 'rgba(0, 0, 0, 0)') {
                div1.style.background = 'black';
                div2.style.background = 'transparent';
            } else {
                div1.style.background = 'transparent';
                div2.style.background = 'black';
            }
        }
        function try2() {
            var div1 = document.getElementById('div1');
            var div2 = document.getElementById('div2');
            if (getCss(div2, 'background-color') == 'rgba(0, 0, 0, 0)') {
                div2.style.background = 'black';
                div1.style.background = 'transparent';
            } else {
                div2.style.background = 'transparent';
                div1.style.background = 'black';
            }
        }
        function getCss(el, cssAttr) {
            var value = '';
            if ( el.currentStyle) {
                value = el.currentStyle[cssAttr];
            } else if (typeof window.getComputedStyle != 'undefine') {
                value = window.getComputedStyle(el, null)[cssAttr];
            }
            return value;
        }
    </script>
</head>
<body>
    <button onclick="try1()">1</button><div id="div1"></div>
    <button onclick="try2()">2</button><div id="div2"></div>
</body>
</html>



img

你怎么知道没执行,print了吗
我猜div2的初始background既不是transparent也不是black,所以第一次会先走进else里去

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632