使用 JavaScript 将属性和值添加到元素

问题描述 投票:0回答:1

我正在为我的网站创建一个深色/浅色主题切换。我在我的网站上使用 Bootstrap 导航栏。我正在使用 JavaScript 事件侦听器来更改主题。我需要将 Bootstrap 导航栏更改为深色主题版本。

我遇到的问题是,当单击“深色主题”按钮时,我希望能够将 data-bs-theme="dark" 添加到我的元素中。我尝试使用 setAttribute (element.setAttribute("class", "democlass");) 但这不起作用,因为它无法将 'data-bs-theme' 识别为属性。我还有其他方法可以做到这一点吗?

我尝试过:

function changeTheme() { let nav = document.querySelector("nav"); nav.setAttribute("data-bs-theme", "dark"); }
但它没有将 data-bs-theme="dark" 添加到导航元素。

非常感谢您的帮助!

javascript html twitter-bootstrap
1个回答
0
投票

docs中,您需要将该属性应用于导航栏的父级,以便引导程序识别主题。

const darkModeToggle = document.getElementById('darkModeToggle');
const body = document.body;
const navParent = document.querySelector(".navbar-parent")
var flag = false;
darkModeToggle.addEventListener('change', () => {

  if (flag = !flag) {
    navParent.setAttribute('data-bs-theme', "dark");
  } else {

    navParent.removeAttribute('data-bs-theme');
  }

});
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">

<body>

  <div class="navbar-parent">
    <nav class="navbar navbar-expand-lg bg-body-tertiary bg-primary">
      <div class="container-fluid">
        <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarTogglerDemo01" aria-controls="navbarTogglerDemo01" aria-expanded="false" aria-label="Toggle navigation">
      <span class="navbar-toggler-icon"></span>
    </button>
        <div class="collapse navbar-collapse" id="navbarTogglerDemo01">
          <a class="navbar-brand" href="#">Hidden brand</a>
          <ul class="navbar-nav me-auto mb-2 mb-lg-0">
            <li class="nav-item">
              <a class="nav-link active" aria-current="page" href="#">Home</a>
            </li>
            <li class="nav-item">
              <a class="nav-link" href="#">Link</a>
            </li>
            <li class="nav-item">
              <a class="nav-link disabled" aria-disabled="true">Disabled</a>
            </li>
          </ul>
          <form class="d-flex" role="search">
            <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
            <button class="btn btn-outline-success" type="submit">Search</button>
          </form>
        </div>
      </div>
    </nav>
  </div>
  <div class="container mt-5">
    <div class="form-check form-switch">
      <input class="form-check-input" type="checkbox" id="darkModeToggle">
      <label class="form-check-label" for="darkModeToggle">Dark Mode</label>
    </div>

    <h1 class="mt-3">Hello, Bootstrap!</h1>
  </div>

  <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>

</body>

© www.soinside.com 2019 - 2024. All rights reserved.