2017-08-17 8 views
2

私は何か具体的なことをしようとしており、それが可能であるかどうかはわかりません。私はそれがどのようにdo with a textareaに答えるのを見ましたが、私が求めている通りではありません。ローカルHTMLの内容をテキストファイルとして保存(変更)する方法はありますか?

私のコードは、テキストファイルを読み込み、その内容に基づいて箇条書きリストを設定します。箇条書きリストは、JQuery-UIを使用してソート(ドラッグ&ドロップ)することができ、contenteditable="true"で編集することができます。

window.onload = function() { 
 
var fileInput = document.getElementById('fileInput'); 
 
var fileDisplayArea = document.getElementById('fileDisplayArea'); 
 

 
$(function() { 
 
$("#sortable1").sortable({ 
 
    items: "li:not(.ui-state-disabled)" 
 
}); 
 
$("#sortable2").sortable({}); 
 
}); 
 

 
fileInput.addEventListener('change', function(e) { 
 
var file = fileInput.files[0]; 
 
var textType = /text.*/; 
 
if (file.type.match(textType)) { 
 
var reader = new FileReader(); 
 
reader.onload = function(e) { 
 
var file = reader.result; 
 
var ul = document.createElement('ol'); 
 
test = file.replace(/(\})/gim, "\n</li>") 
 
      .replace(/\{/gim, "") 
 
      .replace(/!Variable=(\w+)\s*\n/gim, "<li class='ui-state-default'>$1</li>\n").split(/\s*\n\s*\n/) 
 
      .map(v => v = '\n<li class="ui-state-default ui-state-disabled" style="color:blue; margin-left: 0; opacity:1;">' + v) 
 
      .join(''); 
 
console.log(ul.innerHTML); 
 
htmlcontent = "<ul contenteditable='true' id='sortable2'>" + test + "</ul>"; 
 
ul.innerHTML = htmlcontent; 
 
fileDisplayArea.innerHTML = ul.innerHTML; 
 
console.log(htmlcontent); 
 

 
$("#sortable1").sortable({ 
 
    items: "li:not(.ui-state-disabled)" 
 
}); 
 

 
$("#sortable2").sortable({ 
 
    cancel: ".ui-state-disabled" 
 
}); 
 

 
$("#sortable1 li, #sortable2 li").disableSelection(); 
 

 
if (localStorage.userEdits != null) 
 
document.getElementById("edit").innerHTML = localStorage.userEdits; 
 
} 
 

 
reader.readAsText(file); 
 
} else { 
 
fileDisplayArea.innerText = "File not supported!" 
 
} 
 
}); 
 
}
#sortable1, 
 
#sortable2 { 
 
    list-style-type: none; 
 
    margin: 0; 
 
    padding: 0; 
 
    zoom: 1; 
 
} 
 

 
#sortable1 li, 
 
#sortable2 li { 
 
    margin: 0 5px 5px 20px; 
 
    padding: 3px; 
 
    width: 90%; 
 
} 
 

 
.ui-state-disabled li { 
 
    color: green; 
 
    margin: 0 5px 5px 0px; 
 
} 
 

 
.ui-state-default li { 
 
    margin-left: 10%; 
 
}
<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <meta charset="utf-8"> 
 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
 
    <link rel="stylesheet" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css"> 
 

 
    <script src="https://code.jquery.com/jquery-1.12.4.js"></script> 
 
    <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script> 
 

 
    <body> 
 
    <input type="file" id="fileInput"> 
 
    <div id="fileDisplayArea"></div> 
 
    </body> 
 

 
</html>

コードは次のようにフォーマットされたテキストファイルをロードします:

FAVORITE SITES { 
!Variable=eBay 
!Variable=Google 
} 

AVOIDED SITES { 
!Variable=Yahoo 
!Variable=CraigsList 
} 

OTHER SITES { 
!Variable=Alexa 
!Variable=Amazon 
!Variable=Jet 
} 

MORE SITES { 
!Variable=StackOverflow 
!Variable=Expedia 
!Variable=MouseCity 
} 

を弾丸リストが結果として出力され、ここでこれを実現したコードです。ソートと編集を使用して、リストを再配置し、箇条書きを編集/追加することができます(スニペットをテストしてロードするテキストの例を保存することができます)。問題は、並べ替えと編集を行った後で、変更をテキストファイルに保存する方法があることです。私は限界があることを知っていますが、新しいファイルまたはプロンプトで保存することもできるので、保存場所を選択して古いファイルを上書きすることができます。しかし、HTML編集を保存する方法については、これと可能ですか?

私は2つの機能が必要と思われます。 1つは、ロードされたデータファイルと一致する形式で変更を出力することであり、もう1つは変更を保存することです。これが意味をなさない場合は、コメントしてください、私は明確にすることができます。これは、完全にローカルな環境で行われることに注意してください。

答えて

0

このコードは、変更されたHTMLをテキストファイルとして保存します。この関数呼び出しで

function savehtml() { 
    var htm = document.body.appendChild(
     document.createElement("htm") 
    ); 
    htm.download = "demo.txt"; 
    htm.href = "data:text/plain," + document.getElementById("fileDisplayArea").innerHTML; 
    htm.click(); 
} 

<button onClick="savehtml()">Save HTML as Text</button> 
関連する問題