基于数据选择器属性的Javascript触发事件

哈雷什

我有一个带有以下项目的导航栏

<li>
  <a href="#" data-parent="1" data-selector="nav a" class="">Blog</a>
</li>
<li>
  <a href="#" data-parent="1" data-selector="nav a" class="">Home</a>
</li>

当我将鼠标悬停在项目上时,相应链接的类将hover类似于如果我将鼠标悬停在Blog列表上

<li>
  <a href="#" data-parent="1" data-selector="nav a" class="hover">Blog</a>
</li>
<li>
  <a href="#" data-parent="1" data-selector="nav a" class="">Home</a>
</li>

当我单击它时,班级将从hover变为open

我要听点击的情况下,要知道<a>data-selector="nav a"被点击。无论是Blog还是Home,我都想调用一个函数。如果<a>data-selector="nav a"点击和类是open我想要做一些其他的任务。

jo_va

使用document.querySelectorAll('li a')获取所有链接,然后使用forEach,通过添加正确的事件侦听器到您的链接link.addEventListener(event, handler)

您可以使用mouseentermouseleave事件hover通过classList链接属性添加和删​​除

您可以使用该click事件来处理点击,然后link.getAttribute('data-selector')可以查询data-selector属性并对其进行处理:

const links = document.querySelectorAll('li a');

links.forEach(link => {
  link.addEventListener('mouseenter', event => {
    if (!link.classList.contains('open')) {
      link.classList.add('hover');
    }
  });
  link.addEventListener('mouseleave', event => {
    link.classList.remove('hover');
  });
  link.addEventListener('click', event => {
    link.classList.remove('hover');
    link.classList.toggle('open');
    const dataSelector = link.getAttribute('data-selector');
    if (dataSelector === 'nav a') {
      console.log('this is a [nav a] link');
    } else {
      console.log('this is NOT a [nav a] link');
    }
  });
});
.hover {
  color: blue;
}
.open {
  color: green;
}
<li>
  <a href="#" data-parent="1" data-selector="nav a">Blog</a>
</li>
<li>
  <a href="#" data-parent="1" data-selector="not nav a">Home</a>
</li>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章