Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 某些可单击元素的未定义href_Javascript - Fatal编程技术网

Javascript 某些可单击元素的未定义href

Javascript 某些可单击元素的未定义href,javascript,Javascript,我正在尝试用鼠标左键单击获取可单击元素的链接url,下一个方法不适用于所有元素: function callback(e) { if (e.button != 0 ) { return; } alert(e.target.href); } document.addEventListener('click', callback, true); 例如,对于Youtube网站上的某些元素-标题或缩略图,所有这些元素都可以单击,并会生成一些视频/播放列表: hr

我正在尝试用鼠标左键单击获取可单击元素的链接url,下一个方法不适用于所有元素:

function callback(e) {
    if (e.button != 0 ) {
        return;
    }
    alert(e.target.href);
}
document.addEventListener('click', callback, true);
例如,对于Youtube网站上的某些元素-标题或缩略图,所有这些元素都可以单击,并会生成一些视频/播放列表:

href未定义

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

更新

Youtube网站上的一些A标签将其他元素包裹在其中的问题:


我尝试了调试模式检查,选择了一些这样的元素进行检查,如果链接标签被动态添加到页面中,它将是一个很好的解决方案。默认情况下,事件气泡。这意味着您可以有一个嵌套在100个其他元素中的元素。单击该嵌套元素将导致一个click事件,该事件将向上传播到所有祖先元素,直到它被取消或到达窗口

现在,文档中几乎所有内容都可以单击。仅仅因为某些东西是可点击的,并不意味着它会像元素那样导航到URL

例如:

document.querySelectordiv.addEventListener单击,函数{ 谢谢你点击我!; };
我是div,没有href。但是,无论如何点击我默认情况下,事件会冒泡。这意味着您可以有一个嵌套在100个其他元素中的元素。单击该嵌套元素将导致一个click事件,该事件将向上传播到所有祖先元素,直到它被取消或到达窗口

现在,文档中几乎所有内容都可以单击。仅仅因为某些东西是可点击的,并不意味着它会像元素那样导航到URL

例如:

document.querySelectordiv.addEventListener单击,函数{ 谢谢你点击我!; };
我是div,没有href。但是,无论如何点击我可能是你点击的东西实际上没有href属性,并以其他方式打开链接可能是你点击的东西实际上没有href属性,并以其他方式打开链接是的,我知道我必须检查标记我的代码中有它,只是我的问题没有包括在这里,似乎Youtube网站上的一些A标签将其他元素包装在其中的问题:更新了我的答案,它选择了点击事件中的一个带有Youtube元素的示例,而不是一个,似乎我必须用javascript获取父级的Spancode@user924更快并不总是更好。QuerySelector一点问题也没有。它是DOM API的主力,循环是用少量代码完成大量工作的有效方法。@user924您没有使用我编写的代码。看见您使用的是e.target,我使用的是e.currentTarget。@user924是的,但我的解决方案性能更高,因为它不尝试甚至不需要开始查看父元素。这基本上违背了事件冒泡的目的和行为。让bubbling在这里完成工作。是的,我知道我必须检查代码中的标记,只是没有包含在我的问题中,似乎Youtube网站上的一些a标记将其他元素包裹在其中的问题:更新了我的答案,它选择了点击事件中的跨度一个带有Youtube元素的示例,而不是一个,似乎我必须用javascript获得一个跨父级code@user924更快并不总是更好。QuerySelector一点问题也没有。它是DOM API的主力,循环是用少量代码完成大量工作的有效方法。@user924您没有使用我编写的代码。看见您使用的是e.target,我使用的是e.currentTarget。@user924是的,但我的解决方案性能更高,因为它不尝试甚至不需要开始查看父元素。这基本上违背了事件冒泡的目的和行为。让泡泡来做这项工作吧。