使 <img> 在 <div> 标签内可点击

Posted

技术标签:

【中文标题】使 <img> 在 <div> 标签内可点击【英文标题】:Making <img> clickable inside a <div> tag 【发布时间】:2018-03-06 14:08:40 【问题描述】:

我目前在使用 IE11 及以下版本时遇到了一些问题。

我有一个类似这样的标签:

<div class="cursor_pointer" data-href="/de/S/palettieren_umreifen/paletten/Paletten.html">
    <img title="Paletten"  src="/medias/sys_master/had/h00/8854080749598/8802146943006_SB50-D_1696_psd.png" />
</div>

这是我的 javascript

sethrefs = function () 

if (document.querySelectorAll) 

    var datahrefs = document.querySelectorAll('[data-href]'),
            dhcount = datahrefs.length;

    while (dhcount-- > 0) 

        var ele = datahrefs[dhcount],
                link = function (event) 

                    var target = event.target,
                            leftclicked = ('buttons' in event && event.buttons === 1) ? true : 
                                                        ('which' in event && event.which === 1) ? true : 
                                                        (event.button === 1) ? true : false;

                    if (!event.target.href) window.location.href = this.getAttribute('data-href');

                ;

        if(ele.addEventListener) ele.addEventListener('click', link, false);
        else ele.attachEvent('onclick', link);

    

  
;

sethrefs();

我想要的是,如果您单击图像,您就可以访问该站点。在其他所有浏览器上它都可以正常工作,但在 IE 11 及更低版本中则不行。是因为他无法处理 data-href 调用吗?

我只是尝试给它一些 z-index,但没有任何效果。

【问题讨论】:

代码在哪里?? 不要担心快速downvotes,只需尝试发布代码:) :) 看起来像什么?开玩笑,但如果有代码也不错。 从未听说过将data-href 自动解释为可点击元素。我认为你的 .cursor_pointer 元素有 javascript 代码,它会发挥作用。 为什么不使用a 而不是div 并使用CSS 将其转换为块? 【参考方案1】:

您的data-href 属性是一个自定义数据-* 属性。如果它在其他浏览器(我自己不认识)上按您希望的那样工作,那就太好了,但是数据属性被用来应用一些数据并触发 JS 事件您的 HTML 元素。 有关兼容性,请参阅 CanIUse 您可以使用经典的&lt;a href="your/link.html"&gt;&lt;/a&gt; 或使用JS dataset API

var dataLinks = document.querySelectorAll('.cursor_pointer');
dataLinks.forEach(function (link) 
    link.onclick = function() 
        window.location.href = link.dataset.href;
    
);

编辑:(在我回答的 cmets 中进行对话之后) 将 data-href 放在您想要的任何元素上。选择具有data-href 属性的元素并将函数应用于它们。您将需要填充 NodeList.prototype.forEachdocument.querySelectorAll 返回一个 NodeList,而 IE/Edge 实际上不支持 forEach)。

<!-- both div and img have the data-href attribute -->
<div class="cursor_pointer" data-href="/de/S/palettieren_umreifen/paletten/Paletten.html">
    <img data-href="/de/S/palettieren_umreifen/paletten/Paletten.html" title="Paletten"  src="/medias/sys_master/had/h00/8854080749598/8802146943006_SB50-D_1696_psd.png" />
</div>

然后是JS:

// NodeList.forEach isn't supported by MS browsers
if (!NodeList.prototype.forEach) 
    Object.defineProperty(NodeList.prototype, "forEach", 
        value: Array.prototype.forEach,
        enumerable: true,
        configurable: true,
        writable: true
    );


var dataLinks = document.querySelectorAll('[data-href]');
dataLinks.forEach(function (link) 
    link.onclick = function() 
        window.location.href = link.dataset.href;
    
);

【讨论】:

我让它完全像那样运行。但是如果我在图像旁边稍微点击一下,我只能进入另一个页面。不知何故,img 在没有任何 z-index 属性的 div 之上。我刚刚通过给我的 div 一些 z-index 对其进行了测试,因此它定义在 img 之上,但那也不起作用 我明白了.. 那是因为图像元素没有继承链接功能。我猜你最好使用&lt;a&gt; 可以用javascript继承吗? 您可以通过手动将cursor_pointer 类添加到子元素来应用此功能,或者通过在forEach 中选择它们(如var childElements = link.querySelectorAll('*');),然后在单击另一个嵌套时应用相同的功能forEach。我不确定它是否适用于 3 个嵌套元素。如果没有,您将需要创建一个递归函数。我会尝试,但我实际上是在打电话。 它与您的代码配合得很好 :) 干杯 @AymDev :)【参考方案2】:

我的建议是将img 包装在a 元素中。

<div>
    <a href="link.html"><img src="yolo.jpg"></a>
</div>

【讨论】:

这也是我的第一个想法,但是其中运行了一个脚本来生成 data-href。关键是它可以在除 IE 11 及更低版本之外的所有其他浏览器上运行。在 Microsoft Edge 中它也可以正常工作。如果我在图片旁边单击一点,链接就可以正常工作了

以上是关于使 <img> 在 <div> 标签内可点击的主要内容,如果未能解决你的问题,请参考以下文章

cssdiv中包含img,img比较小,不设置img的width,height的情况下,怎样使div中的img达到和他一样大并且包含着

如何在 div 中使图像响应

html css 怎么使img和a标签在一个行内元素中间对齐

使 div 与其中的图像大小相同

使 img 响应并填充到 div

如何使 div 响应的背景图像?