当单击锚元素时,我想要获取它的href。 我正在使用以下JavaScript代码:
document.addEventListener('click', function (event)
{
event = event || window.event;
var el = event.target || event.srcElement;
if (el instanceof HTMLAnchorElement)
{
console.log(el.getAttribute('href'));
}
}, true);
这对于像这样的嵌入式锚点完美地起作用:
<div><p><a href='link'></a></p><div>
但是当我同时使用锚点和图片时,它不起作用:
<div><a href='link'><img></a></div>
event.target
返回图片而不是链接。可以通过下面的 if
语句来修改 JavaScript 代码以解决这个问题:
document.addEventListener('click', function (event)
{
event = event || window.event;
var el = event.target || event.srcElement;
if (el instanceof HTMLImageElement)
{
// Using parentNode to get the image element parent - the anchor element.
console.log(el.parentNode.getAttribute('href'));
}
else if (el instanceof HTMLAnchorElement)
{
console.log(el.getAttribute('href'));
}
}, true);
但这似乎并不太优雅,我想知道是否有更好的方法。
!重要说明! 注意:请记住,我无法访问ID、类或任何其他传统标识符。 我只知道将单击锚定并需要获取其href。 我甚至不知道它在哪里,如果存在或稍后会创建。
编辑:请不要使用jQuery或其他JavaScript库。
.currentTarget
或者简单地使用this
,它将会指向安装处理程序的元素而不是被点击的元素。 - Bergi.currentTarget
和this
都是document
元素,因为事件监听器在其上使用。 - Aurelije Aure