简体   繁体   English

添加 class 所针对的 onclick

[英]Add onclick targeted by class

Rather than adding onClick to each and every link as below, is there a cleaner way to target all links (.tabs a) by adding a short script above or below, and how would this be coded?除了将 onClick 添加到下面的每个链接之外,有没有一种更简洁的方法可以通过在上方或下方添加一个短脚本来定位所有链接(.tabs a),这将如何编码? Thanks in advance for all help:)提前感谢所有帮助:)

<ul class="tabs">
    <li><a href="#all" onClick="window.scrollTo(0, 0);">All</a></li>
    <li><a href="#category-1" onClick="window.scrollTo(0, 0);">Category 1</a></li>
    <li><a href="#category-2" onClick="window.scrollTo(0, 0);">Category 2</a></li>
</ul>

You can use document.querySelectorAll to obtain all of the elements matching a selector and add event listeners to all of them.您可以使用document.querySelectorAll获取与选择器匹配的所有元素,并为所有元素添加事件侦听器。

 document.querySelectorAll('ul.tabs > li > a').forEach(a => a.addEventListener("click", e=>{ window.scrollTo(0, 0); }));
 ul.tabs { margin-top: 1000px; }
 <ul class="tabs"> <li><a href="#all">All</a></li> <li><a href="#category-1">Category 1</a></li> <li><a href="#category-2">Category 2</a></li> <li><span>Clicking me has no effect</span></li> </ul>

Alternatively, you can use event delegation by only adding a single event listener to the parent <ul> and checking the event's target to determine if it was an anchor tag.或者,您可以通过仅向父<ul>添加单个事件侦听器并检查事件的目标以确定它是否是锚标记来使用事件委托。

 document.querySelector('ul.tabs').addEventListener("click", e=>{ if(e.target.matches("li > a")){ window.scrollTo(0, 0); } });
 ul.tabs { margin-top: 1000px; }
 <ul class="tabs"> <li><a href="#all">All</a></li> <li><a href="#category-1">Category 1</a></li> <li><a href="#category-2">Category 2</a></li> <li><span>Clicking me has no effect</span></li> </ul>

You can get the element with the class via querySelector and then iterate over the children您可以通过 querySelector 使用 class 获取元素,然后遍历子元素

    function onClick() {
        window.scrollTo(0, 0);
    }
    var element = document.querySelector(".tabs");
    element.childNodes.forEach(function(node) {
        node.addEventListener("click", onClick);
    });

You can do something like this:你可以这样做:

 <ul class="tabs"> <li><a href="#all">All</a></li> <li><a href="#category-1">Category 1</a></li> <li><a href="#category-2"">Category 2</a></li> </ul> <script> [...document.querySelectorAll('.tabs > li > a')].forEach(element => { element.addEventListener('click', () => { // window.scrollTo(0, 0) alert('Hello') }); }); </script>

You get all the elements with document.querySelectorAll('.tabs > li > a') and then for each elements you add an click event listener.您可以使用document.querySelectorAll('.tabs > li > a')获取所有元素,然后为每个元素添加一个click事件侦听器。

 // Class selector const elements = document.getElementsByClassName("clickMe"); // Function const fn = () => console.log('click'); // Loop for(let i = 0; i < elements.length; i++) { elements[i].addEventListener('click', fn, false); }
 <ul class="tabs"> <li><a data-myattribute="link1" href="#all" class="clickMe">All</a></li> <li><a data-myattribute="link2" href="#category-1" class="clickMe">Category 1</a></li> <li><a data-myattribute="link3" href="#category-2" class="clickMe">Category 2</a></li> </ul>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM