javascript - 如何在纯 JavaScript 中向元素添加和删除事件类

标签 javascript html css

我正在尝试制作一个导航菜单 我做了所有的 HTMLCSS 当来到 javascript 时我在中间被击中了我我能够向该元素添加一个类,但我无法删除该类剩余的元素。请帮我解决这个问题。
这是我的代码

<!DOCTYPE html>
    <html>
    <head>
        <title>Navigation class Toggling</title>

        <style type="text/css">
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        header {
            width: 100%;
            height: auto;
            max-width: 600px;
            margin: 0 auto;
        }
        nav {
            width: 100%;
            height: 40px;
            background-color: cornflowerblue;
        }
        ul {
            list-style-type: none;
        }
        li {
            display: inline-block;
        }
        a {
            text-decoration: none;
            padding: 8px 15px;
            display: block;
            text-transform: capitalize;
            background-color: darkgray;
            color: #fff;
        }
        a.active {
            background-color: cornflowerblue;
        }
        </style>
    </head>
    <body>
    <header>
        <nav>
            <ul onclick="myFunction(event)">
                <li><a href="#">home</a></li>
                <li><a href="#">about</a></li>
                <li><a href="#">service</a></li>
                <li><a href="#">profile</a></li>
                <li><a href="#">portfolio</a></li>
                <li><a href="#">contact</a></li>
            </ul>
        </nav>
    </header>
    <script type="text/javascript">
        function myFunction(e) {
            e.target.className = "active";
        }
    </script>
    </body>
    </html>

这是我的 Codepen

最佳答案

使用document.querySelectorAll 找到当前具有active 类的元素,然后您可以删除该类。

function myFunction(e) {
  var elems = document.querySelectorAll(".active");
  [].forEach.call(elems, function(el) {
    el.classList.remove("active");
  });
  e.target.className = "active";
}

JSFIDDLE

除了 document.querySelectorAll,您还可以使用 document.querySelector

 function myFunction(e) {
  var elems = document.querySelector(".active");
  if(elems !==null){
   elems.classList.remove("active");
  }
 e.target.className = "active";
}

JSFIDDLE 2

编辑

您可以使用 document.queryselector 选择具有 active 类的元素,而不是遍历整个集合。还向 ul 提供 id,以便您可以定位特定元素

function myFunction(e) {
  if (document.querySelector('#navList a.active') !== null) {
    document.querySelector('#navList a.active').classList.remove('active');
  }
  e.target.className = "active";
}
<style type="text/css">* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

header {
  width: 100%;
  height: auto;
  max-width: 600px;
  margin: 0 auto;
}

nav {
  width: 100%;
  height: 40px;
  background-color: cornflowerblue;
}

ul {
  list-style-type: none;
}

li {
  display: inline-block;
}

a {
  text-decoration: none;
  padding: 8px 15px;
  display: block;
  text-transform: capitalize;
  background-color: darkgray;
  color: #fff;
}

a.active {
  background-color: cornflowerblue;
}
<title>Navigation class Toggling</title>

<header>
  <nav>
    <ul onclick="myFunction(event)" id='navList'>
      <li><a href="#">home</a></li>
      <li><a href="#">about</a></li>
      <li><a href="#">service</a></li>
      <li><a href="#">profile</a></li>
      <li><a href="#">portfolio</a></li>
      <li><a href="#">contact</a></li>
    </ul>
  </nav>
</header>

关于javascript - 如何在纯 JavaScript 中向元素添加和删除事件类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38990163/

相关文章:

javascript - 如何检测元素在跨域父级的 iframe 中是否可见

javascript - 有人可以帮助我使用带有动态元素的 CSS/jQuery 固定 header 吗?

全局 jquery 滚动条,而不是每个 div

css - '::'选择器在CSS中是什么意思

html - 在 CSS 中制作一个居中的文本类

html - 包装器 div 的正确高度的绝对/相对位置?

javascript - AngularJS 变量不会立即反射(reflect)在 View 上,而是更新在 Controller 上

javascript - 调整 div 的高度 - 基于分辨率和元素数

javascript - 从 HTML 按钮调用函数

Python 简化 HTML 表格