重构此代码的最佳方法是什么?

时间:2019-07-15 21:07:08

标签: javascript refactoring

什么是编写以下代码的更有效方法:

<button onclick="changeRed()">red</button>
<button onclick="changeGray()">gray</button>
<button onclick="changeBlack()">black</button>    

myLoader = document.getElementsByClassName('preloader');
    function changeGray() {
        for (i = 0; i < myLoader.length; i++) {         
            myLoader[i].setAttribute("id", "gray");
        } 
    }

    function changeBlack() {
        for (i = 0; i < myLoader.length; i++) {
            myLoader[i].setAttribute("id", "black");
        }
    }

    function changeRed() {
        for (i = 0; i < myLoader.length; i++) {
            myLoader[i].setAttribute("id", "red");
        }
    }

我正在使用for循环作为在单个页面上使用多个ID的解决方法(这是针对特定的模型-不会在生产中使用)

我正在寻找一种无需使用多个change ___()函数即可编写此代码的方法。

2 个答案:

答案 0 :(得分:2)

您可以将颜色用作该函数的参数:

    function changeColor(color) {
        for (i = 0; i < myLoader.length; i++) {
            myLoader[i].setAttribute("id", color);
        }
    }

答案 1 :(得分:1)

重构,以便在函数上接受颜色值,并仅保留一个函数来设置该值

<button onclick="setColor('red')">red</button>
<button onclick="setColor('gray')">gray</button>
<button onclick="setColor('black')">black</button>    


myLoader = document.getElementsByClassName('preloader');
    function setColor(color) {
        for (i = 0; i < myLoader.length; i++) {         
            myLoader[i].setAttribute("id", color);
            myLoader[i].setAttribute("style", 'color:'+color);
        } 
    }