我想让JS dark mode toggleclick事件,但它的工作

let body = document.querySelector(`body`);
let input = document.querySelector(`.input`);
let addBtn = document.querySelector(`.add`);
let form = document.querySelector(`.form`);
let container = document.querySelector(`.tasks`);

form.addEventListener(`submit`, (e) => {
  e.preventDefault();
  const task = input.value;
  if (!task) {
    window.alert(`please fill the input!`);
  } else {
    const taskEl = document.createElement(`div`);
    taskEl.classList.add(`task`);

    const taskContentEl = document.createElement(`div`);
    taskContentEl.appendChild(document.createTextNode(task));
    taskEl.appendChild(taskContentEl);
    container.appendChild(taskEl);

    input.value = ``;
  }
});

function darkMode() {
  let darkBtn = document.querySelector(`.btn`);

  darkBtn.onclick = () => {
    form.classList.toggle(`formDark`);
    input.classList.toggle(`inputDark`);
    body.classList.toggle(`bodyDark`);
    //here is the code that's not works 
    taskEl.classList.toggle(`inputDark`);
  };
}
darkMode();
<button type="button" class="btn">Dark mode</button>
<form class="form">
<input>
</form>
<div class="tasks"></div>

推荐答案

请参阅以下答案:Dark Mode: toggle using JavaScript关于如何使用LocalStorage实现Dark mode切换的示例.


present or future elements上切换暗模式样式?

Simple. Don't use a specific JS list of all your elements to toggle classes from.
Just toggle a "dark" class on the body element. Then, use CSS to style everything else:

document.body.classList.toggle("dark");
.dark .input {}
.dark .add {}
.dark .someFutureElement {}

代码翻拍示例:

// DOM utility functions:

const el = (sel, par) => (par || document).querySelector(sel);
const els = (sel, par) => (par || document).querySelectorAll(sel);
const elNew = (tag, prop) => Object.assign(document.createElement(tag), prop);


// App: Tasks

const elInput = el(`#taskInput`);
const elAdd = el(`#taskAdd`);
const elForm = el(`#taskForm`);
const elTasks = el(`#tasks`);

const createTask = (task) => {
  tasks.push(task);
  const elTask = elNew(`li`, {textContent: task, className: "task"});
  elTasks.append(elTask);
};

elForm.addEventListener(`submit`, (evt) => {
  evt.preventDefault();
  const task = elInput.value.trim(); // Trim from whitespaces!
  if (!task) return alert(`Please, fill the input!`);
  createTask(task);
  elInput.value = ``;
});

// Init: Populate existing tasks
const tasks = ["Drink coffee", "Develop some app"];
tasks.forEach(createTask);


// App: Dark mode

const elBody = el(`body`);
const elToggleDark = el(`#toggleDark`);
elToggleDark.addEventListener("click", () => {
  elBody.classList.toggle("dark", elToggleDark.checked);
});
.dark {
  background: #333;
  color: #fff;
}

.dark #taskInput {
  background: rgba(255,255,255,0.2);
  color: #fff;
}

.dark ol {
  border: 1px solid rgba(255,255,255,0.2);
}
<label><input type="checkbox" id="toggleDark"> Toggle Dark Mode</label>

<form id="taskForm">
  <input id="taskInput" type="text" placeholder="Task...">
  <button id="taskAdd">Add</button>
</form>

<ol id="tasks"></ol>

Javascript相关问答推荐

窗口.getComputedStyle()在MutationObserver中不起作用

过滤对象数组并动态将属性放入新数组

Msgraph用户邀请自定义邮箱模板

切换时排序对象数组,切换不起作用

在286之后恢复轮询

使用Java脚本导入gltf场景并创建边界框

我可以使用空手道用户界面来获取网页的当前滚动位置吗?

当id匹配时对属性值求和并使用JavaScript返回结果

将Node.js包发布到GitHub包-错误ENEEDAUTH

获取';无法解决导入和导入";slick-carousel/slick/slick-theme.css";';错误

将对象推送到数组会导致复制

更新Redux存储中的对象数组

将嵌套数组的元素乘以其深度,输出一个和

判断函数参数的类型

无法使用Redux异步函数读取未定义的useEffect钩子的属性';map';

KeyboardEvent:检测到键具有打印的表示形式

如何按区域进行过滤并将其从结果数组中删除?

为什么我的Reaction组件不能使用createBrowserRouter呈现?

从C#的Angular 来看,Java回调基础知识

有没有一种方法可以在不定义任何属性的情况下使用CSS转换?