请教个 js 鼠标弹起事件问题

这个 google 图片搜索页面,监听的鼠标弹起事件,在图片块上所获取的元素是 IMG。我尝试用 event.target.closest(‘a’) 来获取图片指向的超链接 (不是图片源地址),但一直无法获取。

问了几个 GPT,都是遍历父 A 标签,但仍旧是无法获取。

而看右键菜单,这个图片是有超链接的。

请问如何正确地获取链接?

https://www.google.com/search?num=50&newwindow=1&safe=off&hl=zh-CN&q=Claude&tbm=isch&source=lnms&prmd=insvmbtz&sa=X&biw=1920&bih=984&dpr=1

先打印event.target看看拿到目标了没有吧

写好了

function eventHandler(event){console.log(event?.target?.parentElement?.parentElement?.href);}
for(let img of document.getElementsByTagName("img")){img.addEventListener("mouseup",eventHandler);}

谢谢二位。
@ a523084467, 测试你的代码没有效果。
打印 “empty string”

查看控制台,向上找3级父元素,才找到一个A标签,不过它的href值为空。
我写了无限向上找.closest(‘a’)的遍历,如果href为空,即使是A标签,也向上找A标签,结果还是无法获取超链接。

谁知道浏览器的菜单是如何同时获取图片信息和链接信息的啊。。。。
啊对了,需要说明的是, .closest(‘a’); 在99%的网页是正常获取超链接的,只在这个google图片页上失效了

测试过了,没问题

不好意思,你是测试它的图片单元吗?这个图片的父元素是个DIV,parentElement.href 不可能获取到超链接的啊

上面的代码没有绑定div的事件,改改就行

不是,我前面说了我用 AI 写的代码,向上无限父级找 href 没找到,你让我改改,到底怎么改啊,我是纯 js 小白啊

要不你把你测试有效的那个版本的 js 分享下呗~~


用 closest() 可以获取到啊
——
楼主在提出问题时,最好也附上自己的代码,方便坛友给你诊断。

首先你的event加在了哪个元素上?还是全局?你代码都不贴,怎么给你看。

谢谢。选择在 “Claude | Slack App Director” 图片:

我查看了很多图片项,只有少数几个是有href,其他都像截图所示,没有href。

刷新一次,又有href了,不理解

=========
fanchenio

我说了能够获取到鼠标下的图片元素,所以不论是怎么注册事件,事件是没问题的。
而且我也一开始就列出了当前两个方法,.closest(‘a’) 和遍历父A,你也用两行就搞出了脚本,怎么现在才说我不贴代码。。。

function eventHandler(event){console.log(event?.target?.closest(‘a’)?.href);}
for(let img of document.getElementsByTagName("img")){img.addEventListener("mouseup",eventHandler);}

那可能是网络问题;我这查看了好多个图片所在的a都有href

前边那位的代码在控制台执行是有效的,在这一点上那段代码是正确的。

整体问题的解决是各种「片段」正确的总和,并不能因为问题没解决就否定「片段」的正确 →_→

↑↑ 日常假设自己是哲学家系列。。

这才是问题所在,否则以GPT4 gemini的能力不会无法解决这种小问题。
而且超链接确实是存在的(所以不是网络问题),因为右键菜单有链接,只是找不到这个链接在哪

什么时候会有一个吃饱 firefox 源代码的 AI 啊,问它就知道菜单是如何得到链接的