【问题标题】:How to avoid code duplication in this Javascript code snippet如何避免此 Javascript 代码片段中的代码重复
【发布时间】:2020-04-04 13:29:43
【问题描述】:

当用户分别单击 3 个 ID 为“添加”、“删除”和“切换”的按钮时,我尝试添加、删除和切换类样式到 3 <li> s。但是除了 classList 方法名称和按钮 ID 之外,这些代码会重复。

有没有我可以写一个函数来避免重复?

这是我的代码。

document.querySelector('#add').addEventListener('click',()=>{
    document.querySelectorAll('#todos li').forEach((li)=>{
        li.classList.add('listStyles');
    })
});
document.querySelector('#delete').addEventListener('click',()=>{
    document.querySelectorAll('#todos li').forEach((li)=>{
        li.classList.remove('listStyles');
    })
});
document.querySelector('#toggle').addEventListener('click',()=>{
    document.querySelectorAll('#todos li').forEach((li)=>{
        li.classList.toggle('listStyles');
    })
});

【问题讨论】:

    标签: javascript function dom-manipulation code-duplication


    【解决方案1】:

    你可以这样做:

    function modifyClass(action) {
        document.querySelectorAll('#todos li').forEach((li)=>{
            li.classList[action]('listStyles');
        })
    }
    
    document.querySelector('#add').addEventListener('click', ()=>{ modifyClass("add") });
    document.querySelector('#delete').addEventListener('click', ()=>{ modifyClass("remove") });
    document.querySelector('#toggle').addEventListener('click', ()=>{ modifyClass("toggle") });
    

    如果您将元素 #delete 更改为 #remove,您可以这样做:

    for (const action of ["add", "remove", "toggle"])
        document.getElementById(action).addEventListener("click", ()=>{
            document.querySelectorAll('#todos li').forEach((li)=>{
                li.classList[action]('listStyles');
            });
        });
    

    【讨论】:

    • 您可以使用数组来去除更多的冗余。 +1
    • 好主意,但需要将#delete 更改为#remove
    • 我已经尝试了 for of 循环方法。但最后一个动作(在本例中为“切换”)已应用于每个按钮
    • 你是对的。我忘了把letconst 放在action 之前,所以action 最终在全局范围内。我编辑了我的问题。
    • 哦,我明白了。我在循环中添加了一个函数,它现在可以工作了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-29
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    相关资源
    最近更新 更多