【问题标题】:Javascript document event on certain css class某些 CSS 类上的 Javascript 文档事件
【发布时间】:2018-01-27 08:12:04
【问题描述】:

我习惯用 jQuery 编写按类进行选择,但是下面的代码我不能完全正确。这存在于每个页面上,应该只拦截带有“下载链接”类的链接。以下适用于所有链接。但我只想将它作为下载链接 css 的目标。

 document.onclick = function (e) {
                e = e ||  window.event;
                var element = e.target || e.srcElement;

                if (element.tagName == 'A') {
                    window.open(element.href, "_blank", "location=yes,toolbar=yes,toolbarposition=top");
                    return false; 
                }

            };

我无法确定 if 语句的选择器以将 element.tagName 更改为 element.class 或类似名称。

这是我尝试的最后一件事

 document.getElementById("download-link").addEventListener("click", function(e) {
        window.open(e.href, "_blank", "location=yes,toolbar=yes,toolbarposition=top");
return false;
        e.preventDefault();
    });

【问题讨论】:

  • getElementById 没有得到 class download-link 的元素。它获取具有 id 的元素。如果要获取某个类的元素,需要使用document.getElementsByClassName
  • if (element.tagName == 'A' && element.classList.contains('download-link')) { source

标签: javascript html


【解决方案1】:

你提到

应该只拦截带有“下载链接”类的链接

虽然使用.getElementById()。您可以将.querySelectorAll() 与选择器".download-link"NodeList.prototype.forEach() 一起使用来执行任务,请参阅forEach method of Node.childNodes?。例如,为每个 ".download-link" 元素附加一个事件监听器

document.querySelectorAll(".download-link")
.forEach(function(element) {
  element.addEventListener("click", function(event) {
  // do stuff
  })
})

如果NodeList.prototype.forEach() 没有在浏览器中定义,你可以使用for 循环来达到同样的效果

for (var i = 0, nodes = document.querySelectorAll(".download-link");
      nodes && i < nodes.length; i++) {
        nodes[i].addEventListener("click", function(event) {
        // do stuff
        })
}

【讨论】:

  • 请编辑您的答案,以更清楚地说明 OP 做错了什么,以及如何解决。
  • @JamesDouglas 原始答案确实提到了不正确的地方,并提供了如何纠正问题的代码。尽管如此,还是更新了帖子以进一步明确
  • 谢谢 - 但是它似乎没有为我选择此代码
  • @TMB87 “似乎没有选择”是什么意思?您在哪个浏览器上尝试代码?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-02
  • 2013-08-07
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多