javascript - 是否可以重构普通 JS DOM 操作

标签 javascript refactoring destructuring

我想知道是否可以以干净、漂亮的方式重构以下代码,以避免每个 is 语句的重复:

if (statement) {
    menu.style.display = "inline-block";
    emoji.style.display = "inline-block";
    del.style.display = "block";
    upload.style.display = "block";
} else if (statement) {
    menu.style.display = "none";
    emoji.style.display = "inline-block";
    del.style.display = "none";
    upload.style.display = "none";
} else {
    menu.style.display = "none";
    emoji.style.display = "none";
    del.style.display = "none";
    upload.style.display = "none";
}

我知道我可以进行对象解构,但我也想减少行数,因为我在代码中多次重复了这种和平的代码。

最佳答案

一种选择是创建一个元素数组,并将其所有样式设置为none,然后在条件内设置不会的样式是:

[menu, emoji, del, upload].forEach(elm => elm.style.display = "none");
if (statement) {
  menu.style.display = "inline-block";
  emoji.style.display = "inline-block";
} else if (statement) {
  emoji.style.display = "inline-block";
}

如果您经常想要更改多个元素的样式,请考虑使用函数:

const setAllDisplays = (display, ...elms) => elms.forEach(elm => elm.style.display = display);
setAllDisplays('none', menu, emoji, del, upload);
if (statement) {
  setAllDisplays("inline-block", menu, emoji);
} else if (statement) {
  emoji.style.display = "inline-block";
}

关于javascript - 是否可以重构普通 JS DOM 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59625090/

相关文章:

javascript - Facebook 喜欢 facebook 状态的按钮

c++ - 源文件中类定义的功能 vs.内联函数

c# - 逐步应用更好的设计

javascript - 即使在提交更改时,CKEditor 在保存之前退出时也会发出警报

javascript - 如何使用 React 映射对象数组的对象数组

mysql - 该表是否需要索引?

c# - 处理可变数量的输出参数,减少 C# 中的代码重复

lisp - 在解构绑定(bind)中声明未使用变量的任何好方法?

javascript - ES6 解构预处理

javascript - 样式复选框和ajax