3

I want to download a file which is created from DOM element. So a user clicks a button on web page and it invokes a javascript method which may grab the contents of DOM element and prompt user for download.

I am able to grab contents of the DOM element inside a Javascript Var. But not sure how to proceed further.

For grabbing the DOM element i am using:

var elem = document.getElementById("userDownload"); 
1
  • 1
    please provide what you have tried Commented Aug 1, 2014 at 19:08

3 Answers 3

12

I am not sure if I understand correctly what is the content that you are trying to download. If you have the content (which sounds like the HTML of an element?) stored in a variable, you can try:

("#downloadbutton").click(function() { //var content = content of file; var dl = document.createElement('a'); dl.setAttribute('href', 'data:text/csv;charset=utf-8,' + encodeURIComponent(content)); dl.setAttribute('download', 'filename.txt'); dl.click(); }); 
Sign up to request clarification or add additional context in comments.

2 Comments

Your snippet was helpful as a part of my complete solution. Thank you. Thing i was missing was inline event handlers were not working for me. I had to add a listner for them. Thank you.
No problem, glad to be of help.
5

I appreciated finding this question, but at least on Firefox running with linux, you need to append the dl element to the document to get the click functionality to work. I haven't tested extensively on other browsers how necessary this is, but it is necessary on some at least, so I recommend the following modification:

var content = document.getElementById("elem").innerHTML; var dl = document.createElement('a'); dl.setAttribute('href', 'data:text/csv;charset=utf-8,' + encodeURIComponent(content)); dl.setAttribute('download', 'filename.txt'); // Set hidden so the element doesn't disrupt your page dl.setAttribute('visibility', 'hidden'); dl.setAttribute('display', 'none'); // Append to page document.body.appendChild(dl); // Now you can trigger the click dl.click(); 

Comments

2

Figured it out: I had to do `

function myAlert(){ var content = document.getElementById("elem").innerHTML; var dl = document.createElement('a'); dl.setAttribute('href', 'data:text/csv;charset=utf-8,' + encodeURIComponent(content)); dl.setAttribute('download', 'filename.txt'); dl.click(); } document.addEventListener('DOMContentLoaded', function () { document.getElementById('alertButton').addEventListener('click', myAlert); }); 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.