首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript选择器第一个兄弟级后按钮

Javascript选择器第一个兄弟级后按钮
EN

Stack Overflow用户
提问于 2021-09-02 16:23:20
回答 1查看 112关注 0票数 0

我的页面包含超过300个独特的条形码在一个表中,类似于下表。我给了每个条形码它自己的下载按钮,但是我如何使按钮下载第一个兄弟姐妹条形码直接在其本身之后?

代码语言:javascript
复制
<tr>
  <td>
    (product name)
  </td>
  <td>
    (other data)
  </td>
  <td>
    (even more data)
  </td>
  <td>
    <button type="button" class="downloadBarcode"></button> <!-- Download button -->
    <svg class="barcode" etc...></svg> <!-- SVG generated by JsBarcode -->
  </td>
</tr>
<tr>
  (another product with data and a barcode)
</tr>

这是我目前使用的脚本,但它显然只适用于长列表中的第一个条形码元素:

代码语言:javascript
复制
  document.querySelector(".downloadBarcode").onclick = () => {
    svgToPng(document.querySelector('.barcode').outerHTML, (imgData) => {
      const download = document.createElement('a');
      download.href = imgData;
      download.download = 'barcode.png';
      download.click();
    });
  }

  const svgToPng = (svg, callback) => {
    const url = URL.createObjectURL(new Blob([svg], {
      type: 'image/svg+xml'
    }));
    svgUrlToPng(url, (imgData) => {
      callback(imgData);
      URL.revokeObjectURL(url);
    });
  }

  const svgUrlToPng = (svgUrl, callback) => {
    const svgImage = document.createElement('img');
    svgImage.style.position = 'absolute';
    svgImage.style.top = '-9999px';
    document.body.appendChild(svgImage);
    svgImage.onload = function() {
      const canvas = document.createElement('canvas');
      canvas.width = svgImage.clientWidth;
      canvas.height = svgImage.clientHeight;
      const canvasCtx = canvas.getContext('2d');
      canvasCtx.drawImage(svgImage, 0, 0);
      const imgData = canvas.toDataURL('image/png');
      callback(imgData);
      document.body.removeChild(svgImage);
    };
    svgImage.src = svgUrl;
  }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-02 16:29:09

使用event.currentTarget获取单击的元素。然后,您可以使用nextElementSibling来获取它之后的元素。

代码语言:javascript
复制
document.querySelector(".downloadBarcode").onclick = (event) => {
  svgToPng(event.currentTarget.nextElementSibling.outerHTML, (imgData) => {
    const download = document.createElement('a');
    download.href = imgData;
    download.download = 'barcode.png';
    download.click();
  });
}

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69033936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档