2014-01-31 19 views
6

Kann mir jemand helfen, den Inhalt eines HTML5 textArea in Datei zu speichern, vorzugsweise mit JavaScript?HTML5 textarea Inhalt in Datei speichern

<textarea id="textArea"> 
    Notes here... 
</textarea> 
<button type="button" value="save"> Save</button> 
+0

Zu einer lokalen Datei? (http://www.html5rocks.com/en/tutorials/file/filesystem/) oder auf einem Remote-Server? –

Antwort

-1
<textarea id = "textArea"> 
    Notes here... 
</textarea> 

<button onclick="savetextarea()" type="button">Save</button> 

<script> 
    function savetextarea(){ 
     var txt = document.getElementById("textArea").value; 
     document.getElementById("saveinput").value = txt; 
     document.forms["aForm"].submit(); 
    } 
</script> 

<form action="savecontent" name="aForm"> 
    <input id="saveinput" type="hidden" name="filecontent" value=""> 
</form> 
+1

Dies funktioniert nur, wenn auf der Serverseite etwas mit dem eigentlichen Speichern der Datei zu tun hat ... so beantwortet es die Frage nicht – MrAn3

8

Das sollte es tun.

JSFiddle

+0

Dies funktionierte nicht für mich, die Lösung war, die Funktion mit 'button onclick' aufzurufen cf http://StackOverflow.com/a/41965468/3154274 – Enora

+0

textToWrite ist ein innerHTML-Textfeld, nicht das Textfeld selbst. Ich werde eine Bearbeitung hinzufügen. Danke für die Lösung. –

2

testete ich engincancan's Antwort, und es war fast da, aber nicht ganz. Zunächst einmal war das Dateiformat für "ecc.plist" nirgendwo erkennbar. Damit der Code in Safari, Chrome und Firefox auf dem Desktop funktioniert, müssen Sie ein vorhandenes Anchor-Tag verwenden und keines erstellen (document.createElement ('a')). Der destroyClickedElement-Ansatz funktioniert nur in Chrome, weil er so nachsichtig und nachsichtig ist. Und damit der Download in Firefox funktioniert, müssen Sie document.body.appendChild (downloadLink.download);

Ich wollte auch meinen lokalen Speichertext in eine Datei zum Download speichern und der Code funktioniert auf dem Desktop für Safari, Chrome und Firefox auf dem Mac. Ich denke jedoch, dass es in iOS unmöglich ist, den Blob() überall mit Chrome oder Firefox zu speichern. Es funktioniert, interessanterweise in Safari. Zum Beispiel kann ich die Textdatei in meiner Wunderlist App speichern. Hier ist der Link meine Repo auf Github: The Cat Whisperer on Github gh-pages

Hier ist der JavaScript-Code:

const fileDownloadButton = document.getElementById('save'); 
function localStorageToFile() { 
    const csv = JSON.stringify(localStorage['autosave']); 
    const csvAsBlob = new Blob([csv], {type: 'text/plain'}); 
    const fileNameToSaveAs = 'local-storage.txt'; 
    const downloadLink = document.getElementById('save'); 
    downloadLink.download = fileNameToSaveAs; 
    if (window.URL !== null) { 
     // Chrome allows the link to be clicked without actually adding it to the DOM 
     downloadLink.href = window.URL.createObjectURL(csvAsBlob); 
     downloadLink.target = `_blank`; 
    } else { 
     downloadLink.href = window.URL.createObjectURL(csvAsBlob); 
     downloadLink.target = `_blank`; 
     downloadLink.style.display = 'none'; 
     // add .download so works in Firefox desktop. 
     document.body.appendChild(downloadLink.download); 
    } 
    downloadLink.click(); 
} 
// file download button event listener 
fileDownloadButton.addEventListener('click', localStorageToFile);  
1

Eine vereinfachte Version des Codes in den Antworten:

function download(){ 
    var text = document.getElementById("my-textarea").value; 
    var blob = new Blob([text], { type: "text/plain"}); 
    var anchor = document.createElement("a"); 
    anchor.download = "my-filename.txt"; 
    anchor.href = window.URL.createObjectURL(blob); 
    anchor.target ="_blank"; 
    anchor.style.display = "none"; // just to be safe! 
    document.body.appendChild(anchor); 
    anchor.click(); 
    document.body.removeChild(anchor); 
} 

und die html:

<textarea id="my-textarea"> 
    Notes here... 
</textarea> 
<button type="button" onclick="download()">Save</button> 
+0

Ich mag die Einfachheit. Neuzeilenzeichen erscheinen jedoch nicht in der heruntergeladenen Datei - der gesamte Text wird in einer Zeile zusammengefasst. – youcantryreachingme

+0

Ich habe eine Lösung für Ihren Code bei dieser Frage gefunden: https://stackoverflow.com/questions/19190331/unable-to-retain-line-breaks-when-writing-text-file-as-blob – youcantryreachingme

+0

Die Lösung wäre Fügen Sie diese Zeile vor Ihrer Blobdeklaration hinzu: text = text.replace (/ \ n/g, "\ r \ n"); – youcantryreachingme

Verwandte Themen