javascript - 某些可点击元素的未定义 href

标签 javascript

我试图通过单击鼠标左键获取链接(可点击元素的 URL),下一个方法不适用于所有元素:

function callback(e) {
    if (e.button != 0 ) {
        return;
    }
    alert(e.target.href);
}
document.addEventListener('click', callback, true);

例如,对于 Youtube 网站上的某些元素 - 标题或缩略图(所有这些元素都是可点击的,并且它们会导致一些视频/播放列表):

enter image description here

enter image description here

href 为 undefined

但它是可点击的,并且 Google Chrome 浏览器会显示该元素所指向的链接的预览:

enter image description here

更新

Youtube 网站上的某些 A 标签将其他元素包裹在其中的问题:<a href="..."><span>...<span/><div.......></a>

我尝试了 Debug模式(检查),选择了其中一些元素进行检查,它选择了 <span> <a>里面.

其他解决方案:https://jsfiddle.net/z2huqjjh/2/ (如果链接(A 标签)动态添加到页面,这将是一个很好的解决方案)

最佳答案

默认情况下,事件会冒泡。这意味着您可以有一个元素嵌套在 100 个其他元素中。单击该嵌套元素将导致 click事件,并且该事件将通过所有祖先元素向上传播,直到它被取消或到达 window

现在,几乎 document 中的所有内容是可点击的。仅仅因为某些内容可点击并不意味着它会导航到某个 URL,例如 <a>元素确实如此。

例如:

document.querySelector("div").addEventListener("click", function(){
  alert("Thanks for clicking me!");
});
<div>I'm a &lt;div&gt; and I don't have an 'href'. But, click me anyway</div>

因为只有少数元素实际上具有 href属性,您可以更改代码以仅查看这些:

function callback(e) {
  if (e.button != 0 ) {
    return;
  } 
  alert(e.currentTarget.href);
}

// Get all the anchors and place into an array
var anchorArray = Array.from(document.querySelectorAll("a"));

// Loop through the anchors
anchorArray.forEach(function(anchor){
  // Assign a click event handler to each. When the click event
  // bubbles to the element, the callback will be called
  anchor.addEventListener('click', callback);
});
<div>I'm a div - click me anyway</div>
<a href="#"><span>I'm a span inside of an anchor, click me too!</span></a>

关于javascript - 某些可点击元素的未定义 href,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47211506/

相关文章:

javascript - 根据某些条件在我的 HTML 页面中创建一个对话框

javascript - nuxtjs 以编程方式修改 head 标签

javascript - 带有3张图片的css动画

javascript - 将 c# 数据表转换为 JSON 数组以传递给 Google Charts

javascript - 做出新选择时重新隐藏动态 div 内容

javascript - 将简单的 html 表格集成到 javascript 中

javascript - 在 firefox 操作系统中使用 mediarecorder api 和 html5 音频标签无法进行音频捕获和播放

javascript - 使用 jQuery 从一个函数传递到另一个函数的变量在 .post 之后变得未定义

javascript - 使用 index.js 进行导出时如何绕过 airbnb eslint import/prefer-default-export 规则

javascript - Vuex 不更新使用 mapState 映射的计算变量