简体   繁体   中英

JS - Change href and trigger image download when link is clicked

I'm trying to download an image using the download attribute on an <a> tag. Its href value is updated when it is clicked.

 function Download_Image(element) { var mydiv = $("#imageDiv"); var Image = mydiv[0].children; mydiv.download = Image[0].src; } 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div id="imageDiv"> <img width="200" height="140" src="https://2.bp.blogspot.com/-pjQRansD-ig/XAUEH2oe8tI/AAAAAAAAHwE/BgZOyaGnQLYhH2Zjxx86BRvyOs8o9yGjgCLcBGAs/s200/16e3d864-8fb8-4f43-b91e-cc97a75c602f.jpg" /> </div> <a href="#" onclick="Download_Image(this)" download>Click here to download image</a> 

However, when I click the link, it downloads the whole HTML page instead of the image.

You need to change the href attribute of the <a> element, not the download attribute of the <div> .

Anyway, the download attribute is not supported in all browsers and might not work in some others if the Content-Disposition: attachment header is not set.

For example, if we use an image from Instagram with the following code, it will only work if you append ?dl=1 at the end of the URL:

 const links = document.getElementById('links'); const image = document.getElementById('image'); links.onclick = (e) => { const link = e.target; if (link.tagName !== 'A') { return; } link.href = `${ image.src }${ link.innerText.includes('WITHOUT') ? '' : '?dl=1' }`; } 
 body { height: 100vh; margin: 0; font-family: monospace; display: flex; align-items: center; } #image { margin: 8px; height: calc(100vh - 16px); } #links { display: flex; flex-direction: column; } #links > a { display: block; padding: 8px; line-height: 14px; margin: 4px 0; color: black; text-decoration: none; border: 3px solid black; border-radius: 2px; } #links > a:hover { background: yellow; } 
 <img id="image" src="https://scontent-mad1-1.cdninstagram.com/vp/e96d73e7938825335c235baedb51e91a/5CAAC2D4/t51.2885-15/e35/46060357_1380937935382732_6380498939567322752_n.jpg" /> <div id="links"> <a href="#" download>👎 WITHOUT HEADER</a> <a href="#" download>👍 WITH HEADER</a> </div> 

You could take a look at a library called download.js .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM