为了账号安全,请及时绑定邮箱和手机立即绑定

编辑,保存,自修改HTML文档; 格式生成的HTML,JavaScript

编辑,保存,自修改HTML文档; 格式生成的HTML,JavaScript

慕村9548890 2019-08-14 16:02:23
编辑,保存,自修改HTML文档; 格式生成的HTML,JavaScript错误:字符串转义,格式化html,js由初始编辑生成,保存html,js例如,a)如果在本地浏览器中打开“saveFile.html”;b)输入“abc” textarea;c)单击save file按钮;d)单击Save在Save File对话框;e)file-*[date according to universal time].html保存到磁盘;f)file-*[date according to universal time].html在浏览器中打开;g)输入“def” textarea;h)重复d),e),f);i)Bug:第二个结果file-*[date according to universal time].html显示textarea包含“abc def”文本内容; button 没有显示在html:// at rendered `html` from second `file-*[date according to universal time].html`// `textarea` containing "abc def" displayed here , // `button` _not_ displayed ; following string displayed following `textarea`:');"console.log(clone);var file = new Blob([clone], {'type':'text/html'});a.href = URL.createObjectURL(file);a.download = 'file-' + new Date().getTime() + '.html';a.click();};在第26行生成,“saveFile.html”+ "var clone = '<!doctype html>'+ document.documentElement.outerHTML.replace(/<textarea>.*<.+textarea>/, '<textarea>'+document.getElementsByTagName('textarea')[0].value+'<\/textarea>');"
查看完整描述

2 回答

?
三国纷争

TA贡献1804条经验 获得超7个赞

我不确定是什么打破了第三代克隆,因此它导致js信息输出到页面,但是使用实际文档对象来克隆/操作原始文件并输出其内容可能会更好Blob对象的字符串。例如,我使用您的基本saveFile.html进行了测试,并进行了以下更改:


//remove original clone var and replace with:

var clone = document.cloneNode(true);


// grab textarea elements from both original document and clone:

var doc_input = document.getElementsByTagName("textarea")[0];

var clone_input = clone.getElementsByTagName("textarea")[0];


// set clone textarea's innerHTML to current textarea value:

clone_input.innerHTML = doc_input.value;


// use outerHTML of clone.documentElement to get string for Blob

var clone_string = [clone.documentElement.outerHTML];

var file = new Blob([clone_string], {"type":"text/html"});

我看到的唯一缺点是:


这可能很难扩展到更通用的框架,用于生成当前加载的HTML页面状态的“实时HTML文件”(尽管它不应该比您的示例方法更复杂)。


返回的字符串clone.documentElement.outerHTML似乎将文档类型声明放到一个简单元素中,以便:


不在输出字符串中。你可以使用类似的东西:


var clone_string = ["<!doctype html>" + clone.documentElement.outerHTML];

作为一种解决方法。或者,对于更强大的东西:


var doc_doctype = new XMLSerializer().serializeToString(document.doctype);


var clone_string = [doc_doctype + clone.documentElement.outerHTML];


查看完整回答
反对 回复 2019-08-14
  • 2 回答
  • 0 关注
  • 614 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信