【发布时间】:2021-02-22 09:17:16
【问题描述】:
我有以下 JavaScript ,其中我得到一个 HTML 元素(网格)和 HTML 元素子项(网格内的照片)。
let Galeria = document.getElementById("CaixaGaleria");
let GaleriaPhoto = document.getElementById("CaixaGaleria").children;
这是 HTML:
<div id ="CaixaGaleria" class="gallery">
<div data-tecnica="lapis" data-estilo="retrato" data-tamanho="pequeno"><img src="Imagens/Filme/14.jpg"></div>
<div data-tecnica="lapis" data-estilo="retrato" data-tamanho="medio"><img src="Imagens/Filme/16.jpg"></div>
<div data-tecnica="lapis" data-estilo="retrato" data-tamanho="grande"><img src="Imagens/Filme/17.jpg"></div>
<div data-tecnica="aguarela" data-estilo="paisagem" data-tamanho="pequeno"><img src="Imagens/Filme/20.jpg"></div>
<div data-tecnica="aguarela" data-estilo="paisagem" data-tamanho="medio"><img src="Imagens/Filme/22.jpg"></div>
<div data-tecnica="aguarela" data-estilo="paisagem" data-tamanho="grande"><img src="Imagens/Filme/27.jpg"></div>
<div data-tecnica="oleo" data-estilo="ilustração" data-tamanho="pequeno"><img src="Imagens/Filme/37.jpg"></div>
<div data-tecnica="oleo" data-estilo="ilustração" data-tamanho="medio"><img src="Imagens/Filme/42.jpg"></div>
<div data-tecnica="oleo" data-estilo="ilustração" data-tamanho="grande"><img src="Imagens/Filme/53.jpg"></div>
</div>
我的目标是为孩子们添加一个 EventListener ,这样当我点击它们时,图像就会显示在它的原始大小和比例上,如下所示:
GaleriaPhoto.addEventListener("click" , function(){
*this function should display image's original size on a new window or popup*
}
);
但是,我无法将 EventListener 添加到此元素,也无法添加 ForEach() 或 push()。
我总是会收到一些错误,例如“TypeError: GaleriaPhoto.addEventListener is not a function”。
我可以做到,对于第一个变量但不是第二个变量,所以我认为问题与它是一个 HTML 集合有关?
【问题讨论】:
-
这是因为它正在迭代所有子节点,包括文本节点等,不会有
addEventListener的功能。只需检查节点类型是否正确或预先检查函数是否存在。 -
你能提供一个minimal reproducible example包括html吗?还可以考虑将 EventListener 添加到 CaixaGaleria 并利用 Event.target 来点击子元素
-
您好,感谢您的帮助。这是否意味着我必须删除 div 内的文本?
-
忽略我之前的评论,我和
.childNodes混淆了,而不是.children。在这种情况下,您只需遍历每个节点即可应用事件监听器
标签: html getelementbyid htmlcollection