javascript - 如何使用 onmouseover 和 onmouseout 对多个元素应用事件处理
问题描述
使用 ES6 箭头函数,我试图在共享相同类名的多个锚链接中的任何一个上应用悬停状态。但是以下仅当我将鼠标悬停在第一个元素上时才有效,而其余部分则无效。我从这个逻辑中遗漏了什么?
的HTML:
<nav id="demo-links">
<a href="/" class="mlink">Link A</a>
<a href="/" class="mlink">Link B</a>
<a href="/" class="mlink">Link C</a>
<a href="/" class="mlink">Link D</a>
</nav>
JavaScript:
let mItem = document.querySelector(".mlink");
mItem.onmouseover = () => mItem.setAttribute("target", "_blank");
mItem.onmouseout = () => mItem.removeAttribute("target");
解决方案
该事件适用于第一个元素,因为
Document 方法
querySelector()
返回文档中与指定选择器或选择器组匹配的第一个元素。如果没有找到匹配项,则返回 null。
改为使用querySelectorAll()
。
Element 方法
querySelectorAll()
返回一个静态(非实时)NodeList,表示与指定选择器组匹配的文档元素列表。
您可以使用forEach()
循环所有的li
来单独设置事件:
let mItem = document.querySelectorAll(".mlink");
mItem.forEach(function(el){
el.onmouseover = () => el.setAttribute("target", "_blank");
el.onmouseout = () => el.removeAttribute("target");
});
<nav id="demo-links">
<a href="/" class="mlink">Link A</a>
<a href="/" class="mlink">Link B</a>
<a href="/" class="mlink">Link C</a>
<a href="/" class="mlink">Link D</a>
</nav>
推荐阅读
- python - Numpy.array(500x50),我如何跨行连接,使其变为(500x1)
- java - 在 2d 数组中循环,在 java 中已经有 2 个循环
- r - 如何在 sparklyr 管道中添加自定义函数
- python - 逃脱的字符。OperationalError:语法错误
- r - R:如何在函数中使用数据框变量作为参数?
- java - Lambda 表达式对象映射问题
- uwp - UWP Currency Formatter 强制使用符号 $ 而不是 USD
- azure - 我是否必须在 powershell runbook (azure) 中导入模块?
- sql - 如何在 Oracle 中显示“缺失”小时数
- c++ - 链表中的 c++ 析构函数