JavaScript实现文本转换为文件示例详解

 更新时间:2022年8月17日 07:16  点击:443 作者:海拥

✨ 项目基本结构

目录结构如下:

├── css
│   └── style.css
└── index.html

本节教程我们通过文本转换为文件的案例(如下图所示)带大家去认识一下 JavaScript 吧!

知识点

  • textarea 标签
  • placeholder 属性
  • calc 函数
  • js 中三种引入方式
  • js 中三种声明方法

首先还是跟往常一样新建一个 HTML 页面,在文件中输入英文 !,然后按 tab 键生成模板。

在文件中添加 HTML 和 CSS 代码创建这个项目的基础结构。

<div id="container"></div>

* {
  box-sizing: border-box;
}
body {
  height: 100vh;
  margin: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  background-image: url(https://labfile.oss.aliyuncs.com/courses/8605/bg-451838.jpeg);
  background-size: 100% 100%;
  font-family: "Kanit", Verdana, Arial, sans-serif;
}
#container {
  width: 430px;
  padding: 40px 20px;
  background: white;
}

效果如下所示:

在上面代码中,我们添加了一张背景图片,并且在这里创建了一个宽度为 430px,背景颜色为白色的容器。

添加标题

基本结构有了,现在,我们在容器(#container)的头部添加一个 h1 标题。

<h1>将文本保存到文件中</h1>

这里我们设置标题的字体大小为 30px,颜色为蓝色。

h1 {
  color: #0773d7;
  font-size: 30px;
  width: 100%;
  margin-top: -15px;
  margin-bottom: 30px;
  text-align: center;
  text-transform: uppercase;
}

效果如下所示:

创建一个多行文本框

现在我们在标题下面创建一个文本框用来输入(待转换的)文本内容。这个文本框是用 HTML 中的 textarea 标签来创建的。

<textarea placeholder="在此输入文字..." id="text"></textarea>

然后给文本框添加一些样式。

#text {
  display: block;
  width: 100%;
  background-color: transparent;
  color: #021652;
  border: 2px solid #3ba9f4;
  border-radius: 2px;
  resize: none;
  margin-bottom: 35px;
  height: 200px;
  padding: 10px;
  font-size: 20px;
}

效果如下所示:

属性说明如下:

textarea 标签定义多行的文本输入控件,文本区中可容纳一段相当长的、不限格式的文本。

placeholder 属性规定描述文本区域预期值的简短提示,提示会在文本区域为空时显示。

创建一个单行文本框

接下来我们创建一个单行文本框用来输入文件名。该框使用 input 标签来创建。

<input id="filename" placeholder="起一个文件名..." />

然后给输入框添加一些样式。

#filename {
  width: calc(100% - 200px);
  border: 2px solid #3ba9f4;
  border-radius: 2px;
  background-color: transparent;
  color: #052a53;
  padding: 0 10px;
  height: 50px;
  line-height: 50px;
  font-size: 20px;
  margin-right: 20px;
}

效果如下所示:

属性说明如下:

  • calc() 函数用于动态计算长度值,需要注意的是运算符前后都需要保留一个空格,可参考 MDN calc()。

保存文件的按钮

现在我们需要创建一个下载按钮。单击此按钮将下载转换后的文本文件。

<button id="download">下载文件</button>

我们给按钮设置一下样式,盒子的宽度为 174 像素,高度为 50 像素,背景颜色使用了蓝色。

#download {
  background-color: #3ba9f4;
  color: #fff;
  font-size: 20px;
  height: 50px;
  border: none;
  border-radius: 2px;
  width: 174px;
  cursor: pointer;
}

效果如下所示:

页面的效果现在已经完成了,但是现在点击按钮,还不能下载文件。

JavaScript 该出场了。

使用 JavaScript 将文本保存到文件

在实验介绍中已经为大家介绍过了 JavaScript,这里给大家说一说它的引入方式。

如何在 HTML 页面中引入 JavaScript?

与 CSS 类似,HTML 也可以使用三种方式引入 JavaScript。

  • 内联:在标签的事件属性中添加 js 代码,当事件触发时执行 js 代码。
  • 内部:在 HTML 页面的任意位置添加 script 标签,标签体内写 js 代码,当页面加载时执行。
  • 外部:在单独的 js 文件中写 js 代码,在 HTML 页面中通过 script 标签的 src 属性引入,页面加载时执行。

这里需要同学们注意一下,CSS 和 JS 的外部引入之间的区别,CSS 是使用 link 标签的 href 属性来引入的,而 JS 是通过 script 标签的 src 属性引入的。

我们来看一看下面的例子:

<!-- 内联引入方式 -->
<input type="button" value="按钮" onclick="alert('内联引入成功!')" />
<!-- 内部引入方式 -->
<script type="text/javascript">
  alert("内部引入成功!");
</script>
<!-- 引入外部js文件 -->
<script src="my.js" type="text/javascript" charset="utf-8"></script>

my.js 中的内容:

alert("外部引入成功!");

三种方式均可成功输出内容,效果如下(点击右下方 Go Live 启动 8080 端口,打开 Web 服务):

在上面例子中,onclick 是绑定的点击事件,当点击这个元素会被触发;

alert 是弹出一个警告框。

接下来我们使用内部引入的方式添加 JS 代码,用来实现文件下载的功能。

<script type="text/javascript">
// js 中方法声明:function 方法名(参数列表){方法体}
function downloadFile(filename, content) {
  // 它适用于所有支持 HTML5 的浏览器,因为它使用了 <a> 元素的下载属性:
  const element = document.createElement("a");
  // Blob 是一种可以存储二进制数据的数据类型
  // 根据要保存的文件,它可以有不同的值
  const blob = new Blob([content], { type: "plain/text" });
  // createObjectURL() 静态方法创建一个 DOMString,其中包含一个 URL,该 URL 表示参数中给定的对象。
  const fileUrl = URL.createObjectURL(blob);
  // setAttribute() 设置指定元素的属性值。
  element.setAttribute("href", fileUrl); // 文件位置
  element.setAttribute("download", filename); // 文件名
  element.style.display = "none";
  // 使用 appendChild() 方法将一个节点附加到指定父节点的子节点列表的末尾处
  document.body.appendChild(element);
  element.click();
  // Node 接口的 removeChild() 方法从 DOM 中移除一个子节点并返回移除的节点
  document.body.removeChild(element);
}
window.onload = () => {
  document.getElementById("download").addEventListener("click", (e) => {
    // 文件名输入框的值
    const filename = document.getElementById("filename").value;
    // 文本中输入的值
    const content = document.getElementById("text").value;
    // &&(逻辑与)运算符指示两个操作数是否为真。 如果两个操作数都具有非零值,则结果的值为 1。否则,结果的值为 0。
    if (filename && content) {
      downloadFile(filename, content);
    }
  });
};
</script>

最终效果如下所示:

接下来,我们对上面的 JS 代码做一下说明~

  • function downloadFile(filename, content) {} 定义了一个名为 downloadFile 的函数,该函数可以传入两个参数 filename(保存文本的文件名) 和 content(文本内容)。
  • const 是定义常量的关键字,还有两种定义变量的关键字 varlet
  • document 是 JS 的 DOM 操作,DOM 的全称为 Document Object Model,就是对 HTML 文档中的元素进行操作,比如修改、删除、增加。那么 document.createElement("a") 就是在 HTML 文档中创建了一个 <a> 元素。
  • new Blob() 是实例化了一个 Blob 对象,它表示一个不可变、原始数据的类文件对象,它的数据可以按文本或二进制的格式进行读取,也可以转换成 ReadableStream 来用于数据操作。其中:
    • [content] 是多行输入框中的文本内容。

{ type: "plain/text" } 是 MIME 类型,表示文本的类型为数组或者字符串。

例如:

var blob = new Blob(["<html>…</html>"], { type: "text/html" });

  • URL.createObjectURL() 表示静态方法会创建一个 DOMString,其中包含一个表示参数中给出的对象的 URL,这个 URL 对象表示指定的 File 对象或 Blob 对象。

element.setAttribute() 用来给指定 HTML 元素设置属性,使用格式如下:

// name 为属性名称的字符串,value 为属性的值
element.setAttribute(name, value);

  • element.style.display = "none" 给元素设置 CSS 为 display:none
  • appendChild() 用于将一个节点附加到指定父节点的子节点列表的末尾。
  • click() 是点击事件。
  • removeChild() 用于从 DOM 中删除一个子节点,返回删除的节点。
  • window.onload 用于处理元的加载事件。
  • addEventListener("click", (e)=>{}),表示监听 click 事件,(e)=>{} 是一个回调函数。
  • => 表示箭头函数。
  • if 语句,括号中的条件为真时,会执行 if 语句 {} 中的内容。

到此我们将文本内容保存到文件的小项目就完成啦!

原文出处:https://juejin.cn/post/7130900875379212296

[!--infotagslink--]

相关文章

  • php读取zip文件(删除文件,提取文件,增加文件)实例

    下面小编来给大家演示几个php操作zip文件的实例,我们可以读取zip包中指定文件与删除zip包中指定文件,下面来给大这介绍一下。 从zip压缩文件中提取文件 代...2016-11-25
  • 使用PHP+JavaScript将HTML页面转换为图片的实例分享

    这篇文章主要介绍了使用PHP+JavaScript将HTML元素转换为图片的实例分享,文后结果的截图只能体现出替换的字体,也不能说将静态页面转为图片可以加快加载,只是这种做法比较interesting XD需要的朋友可以参考下...2016-04-19
  • Jupyter Notebook读取csv文件出现的问题及解决

    这篇文章主要介绍了JupyterNotebook读取csv文件出现的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2023-01-06
  • C#和JavaScript实现交互的方法

    最近做一个小项目不可避免的需要前端脚本与后台进行交互。由于是在asp.net中实现,故问题演化成asp.net中jiavascript与后台c#如何进行交互。...2020-06-25
  • 关于JavaScript中name的意义冲突示例介绍

    在昨天的《Javascript权威指南》学习笔记之十:ECMAScript 5 增强的对象模型一文中,对于一段代码的调试出现了一个奇怪现象,现将源代码贴在下面: 复制代码 代码如下: <script type="text/javascript"> function Person(){}...2014-05-31
  • javascript自定义的addClass()方法

    复制代码 代码如下: //element:需要添加新样式的元素,value:新的样式 function addClass(element, value ){ if (!element.className){ element.className = value; }else { newClassName = element.className; newClas...2014-05-31
  • python Matplotlib基础--如何添加文本和标注

    这篇文章主要介绍了python Matplotlib基础--如何添加文本和标注,帮助大家更好的利用Matplotlib绘制图表,感兴趣的朋友可以了解下...2021-01-26
  • Photoshop打开PSD文件空白怎么解决

    有时我们接受或下载到的PSD文件打开是空白的,那么我们要如何来解决这个 问题了,下面一聚教程小伙伴就为各位介绍Photoshop打开PSD文件空白解决办法。 1、如我们打开...2016-09-14
  • JavaScript中的this关键字使用方法总结

    在javascritp中,不一定只有对象方法的上下文中才有this, 全局函数调用和其他的几种不同的上下文中也有this指代。 它可以是全局对象、当前对象或者任意对象,这完全取决于函数的调用方式。JavaScript 中函数的调用有以下...2015-03-15
  • JavaScript中逗号运算符介绍及使用示例

    有一道js面试题,题目是这样的:下列代码的执行结果是什么,为什么? 复制代码 代码如下: var i, j, k; for (i=0, j=0; i<10, j<6; i++, j++) { k = i+j; } document.write(k); 答案是显示10,这道题主要考察JavaScript的逗...2015-03-15
  • javascript的事件触发器介绍的实现

    事件触发器从字面意思上可以很好的理解,就是用来触发事件的,但是有些没有用过的朋友可能就会迷惑了,事件不是通常都由用户在页面上的实际操作来触发的吗?这个观点不完全正确,因为有些事件必须由程序来实现,如自定义事件,jQue...2014-06-07
  • 详解javascript数组去重问题

    首先,我想到的是另建一个结果数组,用来存储原始数组中不重复的数据。遍历原始数组依次跟结果数组中的元素进行比较,检测是否重复。于是乎,我写出了如下代码A: Array.prototype.clearRepetitionA = function(){ var resul...2015-11-08
  • 解决python 使用openpyxl读写大文件的坑

    这篇文章主要介绍了解决python 使用openpyxl读写大文件的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-13
  • C#实现HTTP下载文件的方法

    这篇文章主要介绍了C#实现HTTP下载文件的方法,包括了HTTP通信的创建、本地文件的写入等,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • SpringBoot实现excel文件生成和下载

    这篇文章主要为大家详细介绍了SpringBoot实现excel文件生成和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-09
  • C#操作本地文件及保存文件到数据库的基本方法总结

    C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
  • ActiveX控件与Javascript之间的交互示例

    1、ActiveX向Javascript传参 复制代码 代码如下: <script language="javascript" for="objectname" event="fun1(arg)"> fun2(arg); </script> objectname为ActiveX控件名,通过<object>标签里的id属性设定,如下; 复制...2014-06-07
  • Javascript类型转换的规则实例解析

    这篇文章主要介绍了Javascript类型转换的规则实例解析,涉及到javascript类型转换相关知识,对本文感兴趣的朋友一起学习吧...2016-02-27
  • JavaScript获取浏览器信息的方法

    Window有navigator对象让我们得知浏览器的全部信息.我们可以利用一系列的API函数得知浏览器的信息.JavaScript代码如下:function message(){ txt = "<p>浏览器代码名: " + navigator.appCodeName + "</p>";txt+= "<p>...2015-11-24
  • 详解JavaScript操作HTML DOM的基本方式

    通过 HTML DOM,可访问 JavaScript HTML 文档的所有元素。 HTML DOM (文档对象模型) 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。 HTML DOM 模型被构造为对象的树: 通过可编程的对象模型,Java...2015-10-23