javascript - 如何将本地 HTML 的内容保存(更改)为文本文件?

标签 javascript jquery html css

我正在尝试做一些具体的事情,但我不确定是否可行。我已经看到它回答了如何 do with a textarea但不是我问的那样。

我的代码加载一个文本文件并根据内容设置元素符号列表。元素符号列表既可以使用 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 编辑的任何想法?

我想需要两个函数。一种是以与加载的数据文件一致的格式输出变化,另一种是保存它们。如果这没有意义,请发表评论,我可以澄清。应该注意这是在完全本地环境中完成的。

最佳答案

此代码用于将更改后的 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>

关于javascript - 如何将本地 HTML 的内容保存(更改)为文本文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45736371/

相关文章:

javascript - 使用反向 Y 轴计算 2 点之间的度数

javascript - 是否有可能破解 ASCII 2 HEX - JavaScript Encryptor

JavaScript - 如何从函数传递/存储值以形成隐藏字段?

javascript - Visual Studio Code - 缺少大多数 JavaScript 语法突出显示

javascript - 如何强制 16 :9 ratio with getUserMedia on all devices?

Javascript 使用 name 属性选择表单元素

jquery - $(this).attr ("name") 不适用于 $.post

JQuery 社会主义插件不工作

html - 链接到 Rails 中的根路径

html - 如何制作平底的对 Angular 矩形?