【问题标题】:Get ID of preceding image on click event点击事件获取前一张图片的ID
【发布时间】:2022-02-12 02:32:06
【问题描述】:

我有这个 HTML 代码

<div> <img src="download1.jpeg" image-id="9a8ae555af5f"></div>
<div><h1><a href ="#">test</a></h1></div>

当用户点击“测试”链接时,我想浏览树并获取链接前图像的“image-id”属性

我试过了,但是 imageID 返回 undefined

function trackClick(event)
{
  let imageId = this.$('a').prev('img').attr('image-id');

console.log("imageId", imageId);
}

document.addEventListener('click', trackClick, true);

关于如何使用 js 或 css 选择器完成这项工作的任何想法?

谢谢

【问题讨论】:

  • 尝试使用 class 而不是 id :
    在 html 中尝试 class 并使用-> attr(#9a8ae555af5f) in js
  • image-id 是你做的吗?有一个有效的自定义属性 API:data-* 它有简洁的方法语法:&lt;input data-id='X'&gt; 获取值 document.querySelector('input').dataset.id 并设置它 document.querySelector('input').dataset.id = "Y"

标签: javascript jquery css-selectors


【解决方案1】:

这是带有 prev() 和 parent() 函数的 jquery 解决方案:

$('#test').on('click', function() {
    alert($(this).parent().parent().prev('div').find('img').attr('image-id'))
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div> 
  <img src="download1.jpeg" image-id="9a8ae555af5f">
</div>
<div>
  <h1>
    <a href ="#" id = 'test'>test</a>
  </h1>
</div>

【讨论】:

    【解决方案2】:

    使用 Vanilla JS,一步一步:

    function trackClick(event)
    {
      let targetElement = event.target || event.srcElement;
         
      let closestDiv = targetElement.closest('div');
    
      let previousDiv = closestDiv.previousElementSibling;
      
      let insideImage = previousDiv.getElementsByTagName('img');
      // or
      // let insideImage = previousDiv.children;
    
      console.log(insideImage[0].getAttribute('src'));           
    }
    
    document.addEventListener('click', trackClick, true);
    

    【讨论】:

    • 感谢@lluisma,仅当图像位于链接前面的 div 中时,代码才能正常工作。在我的情况下,图像和链接之间可能有几个 div。 code
      附加 div
      code 有没有办法获取前面的图片而不是通过div搜索?谢谢
    • 你可以循环之前的 div,直到你发现一个包含图像: // Empty HTMLCollection let insideImage = document.getElementsByTagName("fake");而(insideImage.length==0){让previousDiv=closestDiv.previousElementSibling; insideImage = previousDiv.getElementsByTagName('img');最近的Div = previousDiv; }
    • 感谢@Iluisma,insideImage = document.getElementsByTagName("fake");替换 let insideImage = previousDiv.getElementsByTagName('img'); ?我添加了额外的代码,但仍然无法浏览以前的 div,在某些情况下,代码将返回页面上的第一个图像。你可以在这里找到jsfiddle.net/zcnemoa1我的代码和我试图导航的html结构示例
    • “假”选择器是我创建和清空 HTMLCollection 的方式(当然有更好/更正式的方式)。在您的示例中,您忘记关闭最后一个 div 标签。使用我的代码,锚 不能在 div 内的 div 内。我在这里重写了你的例子:jsfiddle.net/lluisma/hpkeyjsv .
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-25
    • 1970-01-01
    • 2017-08-28
    • 1970-01-01
    • 2016-08-13
    相关资源
    最近更新 更多