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

目录
  • 项目基本结构
    • 知识点
  • 添加标题
  • 创建一个多行文本框
  • 创建一个单行文本框
  • 保存文件的按钮
  • 使用 JavaScript 将文本保存到文件
  • 总结

项目基本结构

目录结构如下:

├── 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 语句 {} 中的内容。

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

完整源码下载

这里我给出了完整的源代码,你可以下载并在自己的学习或者工作中使用

源码地址

总结

希望通过上面的教程,大家已经学会了如何使用 JavaScript 将文本内容保存到文件。同时我们也了解了 CSS 和 JS 中一些基础知识,例如 <textarea> 标签、placeholder 属性、calc() 函数,还认识了 JavaScript 中三种引入方式和三种声明方法。

更多关于JavaScript文本转文件的资料请关注我们其它相关文章!

(0)

相关推荐

  • js实现保存文本框内容为本地文件兼容IE,chrome,火狐浏览器 原创

    很多网站实现了利用JS保存页面中文本框内容到本地,并另存为指定文件扩展名与编码类型的功能,特别是一些代码教程,JS特效站上更是长见.如何利用JS实现这种功能的呢,下面给出了具体的实现代码 首先建立HTML文件,具体代码如下 <!doctype html> <html> <head> <meta charset="utf-8"> <title>无标题文档</title> </head> <body&

  • 使用JavaScript保存文本文件到本地的两种方法

    一段使用javascript保存文件的代码.这里方法可以保存指定id元素下的所有html内容:不过这个方法只支持IE浏览器. function createHtml() { try { save_record("index1", $("#yhtcprediv").html()); } catch (e) { alert(e); } } function save_record(filename, content) { //打开新窗口保存 var winRecord

  • js前端实现word excel pdf ppt mp4图片文本等文件预览

    目录 前言 实现方案 docx文件实现前端预览 代码实现 实现效果 pdf实现前端预览 代码实现 实现效果 excel实现前端预览 代码实现 实现效果 pptx的前端预览 实现效果 总结 前言 因为业务需要,很多文件需要在前端实现预览,今天就来了解一下吧. 可以点击下面地址体验喔 git仓库地址以及在线demo地址 实现方案 找了网上的实现方案,效果看起来不错,放在下面的表格里,里面有一些是可以直接通过npm在vue中引入使用. 文档格式 老的开源组件 替代开源组件 word(docx) mam

  • JS构造一个html文本内容成文件流形式发送到后台

    具体代码如下所示: let html = <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0"> <title>X-Find迅聘选才</title> <link rel=

  • JS基于FileSystemObject创建一个指定路径的TXT文本文件

    本文实例讲述了JS基于FileSystemObject创建一个指定路径的TXT文本文件.分享给大家供大家参考.具体如下: Js创建一个指定路径的TXT文本文件,创建一个新的new ActiveXObject对象,使用这个对象的CreateTextFile方法来创建一个指定路径的TXT文本文件,简单吧? 在IE浏览器上运行该实例会有对应的安全提示,选择"允许阻止的内容",使程序正常运行即可.如下图所示: 文本文件创建成功后提示如下: 若文本文件已存在,则有如下提示: 具体代码如下: &l

  • JavaScript使用FileSystemObject对象写入文本文件内容的方法

    本文实例讲述了JavaScript使用FileSystemObject对象写入文本文件内容的方法.分享给大家供大家参考.具体如下: 这段代码主要是练习JavaScript的FileSystemObject对象,用它来让JavaScript向一个文本文件中写入内容,这个TXT文件的路径你可以自己指定,然后定义好要写入的内容,运行代码,你会发现原来的TXT文本中的内容已改变. 运行效果如下图所示: 具体代码如下: <html> <head> <title>写入文本文件<

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

    目录 项目基本结构 知识点 添加标题 创建一个多行文本框 创建一个单行文本框 保存文件的按钮 使用 JavaScript 将文本保存到文件 总结 项目基本结构 目录结构如下: ├── css │ └── style.css └── index.html 本节教程我们通过文本转换为文件的案例(如下图所示)带大家去认识一下 JavaScript 吧! 知识点 textarea 标签 placeholder 属性 calc 函数 js 中三种引入方式 js 中三种声明方法 首先还是跟往常一样新建一个

  • Java使用FileInputStream流读取文件示例详解

    一.File流概念 JAVA中针对文件的读写操作设置了一系列的流,其中主要有FileInputStream,FileOutputStream,FileReader,FileWriter四种最为常用的流 二.FileInputStream 1)FileInputStream概念  FileInputStream流被称为文件字节输入流,意思指对文件数据以字节的形式进行读取操作如读取图片视频等 2)构造方法 2.1)通过打开与File类对象代表的实际文件的链接来创建FileInputStream流对象

  • JavaScript中事件委托的示例详解

    目录 事件流 事件委托 结尾 大家好,我是前端西瓜哥.今天我们来认识一下事件委托. 所谓事件委托,就是将原本应该在当前元素绑定的事件,放到它的祖先元素上,让祖先元素来委托处理. 事件流 事件流指从页面中接收事件的顺序,也可理解为事件在页面中传播的顺序. 事件流由两阶段组成: 捕获事件 冒泡事件 我们通常用 addEventListener 给元素添加事件: document.querySelector('#card')addEventListener( 'click', function (ev

  • 利用Python查看目录中的文件示例详解

    前言 我们在日常开发中,经常会遇到一些关于文件的操作,例如,实现查看目录内容的功能.类似Linux下的tree命令.统计目录下指定后缀文件的行数. 功能是将目录下所有的文件路径存入list中.可以加入后缀判断功能,搜索指定的后缀名文件.主要利用递归的方法来检索文件. 仿造 tree 功能示例代码 Python2.7 列出目录下所有文件 递归法 import os def tree_dir(path, c_path='', is_root=True): """ Get file

  • 利用Swift如何计算文本的size示例详解

    前言 对于swift 还处于摸索阶段很多语法还不熟悉,本文主要给大家介绍的是关于利用Swift计算文本size的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. iOS 11之前限制宽高计算字符串的size用的是UILabel的textRect(forBounds bounds: CGRect, limitedToNumberOfLines numberOfLines: Int) -> CGRect方法,当时也没考虑线程安全问题(low爆了),Xcode也没提示,用了好

  • JavaScript中变量提升机制示例详解

    变量提升 JavaScript的变量提升有两种,用var声明的变量以及用function声明的变量. 用var声明的变量 我们先来看下面这段代码,a的值是多少 代码1 console.log(a); var a; 按照以往编程语言的思路来看,代码自上而下运行,按这种思路,会报错,因为执行到第2行时,变量a还没有定义,所以会报错a is not defined 然而事实上答案是undefined 好,抱着疑惑,我们看下面的代码 var a; console.log(a); 我们发现,这两段代码是一

  • JavaScript 类的封装操作示例详解

    本文实例讲述了JavaScript 类的封装操作.分享给大家供大家参考,具体如下: 一,首先,为什么要使用封装? 这是从信息的角度出发的,信息的隐藏是最终的目的,而封装只不过是实现隐藏的一种方法. 这里我们需要明白一点就是:类的定义有如下的三种方式: (第一种)门户大开型方式       (第二种)用命令规范区别私有和公有的方式    (第三种)闭包 现在详细描述一下每一种类的定义方式: 针对第一种,门户大开类型 首先,我们来看一种情况 (1)声明一个简单的类,代码如下 function Per

  • JavaScript获取上传文件相关信息示例详解

    目录 前题场景 处理方式 图片文件 音频文件 判断处理 分析总结 前题场景 在开发过程中,文件上传是再熟悉不过的场景了,但是根据实际使用情况对上传文件的限制又各有不同.需要对本地上传文件进行相应的限制处理,防止不符合规则或者要求的文件上传到云存储中,从而造成云盘资源空间浪费. 与此同时,也在给客户端使用文件信息之前做了一次数据过滤处理,减少客户端对文件资源的处理和校验. 处理方式 因为客户端使用后台管理上传的图片文件和音频文件时,为了优化展示效果和加载的速度,所以在后台管理系统上传处希望依据图片

  • JavaScript进阶之前端文件上传和下载示例详解

    目录 文件下载 1.通过a标签点击直接下载 2.open或location.href 3.Blob和Base64 文件上传 文件上传思路 File文件 上传单个文件-客户端 上传文件-服务端 多文件上传-客户端 大文件上传-客户端 大文件上传-服务端 文件下载 1.通过a标签点击直接下载 <a href="https:xxx.xlsx" rel="external nofollow" download="test">下载文件</

  • JavaScript复原何同学B站头图细节示例详解

    目录 前言 手把手实现它 如何抓取B站的请求 在nodejs里生成图片 获得用户最新的投稿计算日子 Github Action定时任务 使用本项目 步骤1: 步骤2: 步骤3: 前言 在今年初,B站颁布了2021年的百大UP.我很喜欢其中一位UP主 @老师好我叫何同学 ,他的每一个视频都非常的有创意. 何同学也是一个极其注重细节的人,点进何同学的B站个人空间,细心的小伙伴肯定能关注到他个人空间的头图,右边显示的数字其实是何同学上次投稿距今的时间,这个数字每天都会变. 这也太细节了吧~ 我并不知道

随机推荐