整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

「JS进阶」 HTML5 之文件操作(file)

在 HTML 文档中 <input type="file"> 标签每出现一次,一个 FileUpload 对象就会被创建。

该元素包含一个文本输入字段,用来输入文件名,还有一个按钮,用来打开文件选择对话框以便图形化选择文件。

该元素的 value 属性保存了用户指定的文件的名称,但是当包含一个 file-upload 元素的表单被提交的时候,浏览器会向服务器发送选中的文件的内容而不仅仅是发送文件名。

当用户选择或编辑一个文件名,file-upload 元素触发 onchange 事件句柄。

看个简单例子:

[html]view plaincopy

<!-- oscar999  -->  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
<html>  
  <head>  
  <meta http-equiv="content-type" content="text/html; charset=utf-8">  
  <meta name="author" content="oscar999">  
  <title></title>  
  <script>  
  function  handleFiles(files)  
  {  
    if(files.length)  
    {  
       var file = files[0];  
       var reader = new FileReader();  
       reader.onload = function()  
       {  
           document.getElementById("filecontent").innerHTML = this.result;  
       };  
       reader.readAsText(file);  
    }  
  }  
  </script>  
  </head>  
  <body>  
  <input type="file" id="file" onchange="handleFiles(this.files)"/>  
  <div id="filecontent"></div>  
  </body>  
</html>  

这里读取一个文件, 显示在div 中。

(在IE8 中 无效, this.files 无法读取文件。这个属于HTML5 的特性)

当选择了一个文件时,就会把包含这个文件的列表(一个FileList对象)作为参数传给handleFiles()函数了。这个FileList对象类似一个数组,可以知道文件的数目,而它的元素就是File对象了。从这个File对象可以获取name、size、lastModifiedDate和type等属性。把这个File对象传给FileReader对象的读取方法,就能读取文件了。



HTML5 Drag and Drop File

Html5 支持的File 的操作不仅仅是文件的选择,

在HTML5 之前需要使用 Applet 和 SilverLight 才能达到的文件拖拽功能,在HTML5 中也能轻松的实现,

看代码:

[html]view plaincopy

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
<html>  
  <head>  
  <meta http-equiv="content-type" content="text/html; charset=utf-8">  
  <meta name="author" content="oscar999">  
  <title></title>  
  </head>  
  <body>  
    <div id="dropbox"> Drop Here </div>  
    <div id="filecontent"></div>  
    <script>  
      var dropbox = document.getElementById("dropbox");    
      dropbox.addEventListener("dragenter", dragenter, false);    
      dropbox.addEventListener("dragover", dragover, false);    
      dropbox.addEventListener("drop", drop, false);     
    function dragenter(e) {    
        e.stopPropagation();    
        e.preventDefault();    
    }    
    function dragover(e) {    
        e.stopPropagation();    
        e.preventDefault();    
    }  
    function drop(e) {    
        e.stopPropagation();    
        e.preventDefault();     
        var dt = e.dataTransfer;    
        var files = dt.files;  
        if(files.length)  
        {  
           var file = files[0];  
           var reader = new FileReader();  
           reader.onload = function()  
           {  
               document.getElementById("filecontent").innerHTML = this.result;  
           };  
           reader.readAsText(file);  
        }  
    }   
    </script>  
  </body>  
</html>  

这里通过事件对象的 dataTransfer 可以得到文件。



读取文件内容

在第一个例子中, 我们使用 FileReader类来读取文件的内容,

在 W3C 草案中,File 对象只包含文件名,文件类型等只读属性;FileReader用于内容读取和监控读取状态。

(在firefox 中, 可以直接使用 var fileBinary = file.getAsBinary(); 读取文件的二进制源码)

FileReader提供的方法包括:

1. readAsBinaryString

2. readAsDataURL

3. readAsText

4. abort

.........


以下,举一个 使用 FileReader 将用户选择的图片不通过后台即时显示出来的例子。

[html]view plaincopy

function handleFiles(files){  
    for (var i = 0; i < files.length; i++) {  
        var file = files[i];  
        var imageType = /image.*/;  
        if (!file.type.match(imageType)) {  
            continue;  
        }  
        var img = document.createElement("img");  
        img.classList.add("obj");  
        img.file = file;  
        preview.appendChild(img);  
        var reader = new FileReader();  
        reader.onload = (function(aImg){  
            return function(e){  
                aImg.src = e.target.result;  
            };  
        })(img);  
        reader.readAsDataURL(file);  
    }  
}  



同后端的交互

在一般的HTML 中,使用方式是把file input 放在form 中, 以POST 方式把文件传递到后端。

在 HTML5 中, 也可以通过 FileReader 的 readAsBinaryString 方法读取到文件的二进制码,然后通过 XMLHttpRequest 的 sendAsBinary 方法将其发送出去。

[javascript]view plaincopy

var xhr = new XMLHttpRequest();  
xhr.open("POST", "url");  
xhr.overrideMimeType('text/plain; charset=x-user-defined-binary');  
<pre code_snippet_id="422893" snippet_file_name="blog_20140709_4_2106578" class="sh_javascript sh_sourceCode" name="code">xhr<span class="sh_symbol">.</span><span class="sh_function">sendAsBinary</span><span class="sh_symbol">(</span>binaryString<span class="sh_symbol">);</span></pre><br>  

、常用的标签

<h1>~<h6> 表示是一个标题

<p> 段落标签

<hr/> 水平线标签

<br/> 换行标签

<sub> 下标

<sup> 上标

<pre> 原样标签: 原样标签会保留空格和换行符。

<ol> <li> 有序的列表标签、

<ul> <li> 无序的列表标签。

项目列表标签(dl dt dd)

行内标签(span)

块标签<div> div标签的内容会独立占一行。

二、实体标签

空格 &nbsp;

小于号 &lt;

大于号 &gt;

-----------------------------

人民币 &yen;

版权 &copy;

商标 &reg;

三、媒体标签

<embed></embed>

hidden : 设置隐藏插件是否隐藏。

src :用于指定音乐的路径

<embed src="1.mp3" ></embed>

<marquee> 飘动标签direction : 指定飘动的方向

scrollamount : 指定飘动的速度。

loop :指定飘动的次数

四、超链接标签

<a> 超链接标签

a标签常用的属性:

href : 用于指定链接的资源

target: 设置打开新资源的目标。

_Blank 在独立的窗口上打开新资源

_self 在当前窗口打开新资源

file: file协议(文件协议)这种协议主要是用于搜索本地机器的资源文件的。

格式:

file:///f:/美女/1.jpg

邮件 的协议: mailTo迅雷的协议: thunder

超链接标签的作用:

1. 可以用于链接资源。

2. 锚点点位.

1. 首先编写一个锚点 锚点的格式: <a name="锚点名字"> 数据</a>

2. 使用a标签 的herf属性连接到锚点出。 href=”#锚点的名字“

五、图片标签

img标签常用的属性:

width: 设置图片宽度

height 设置图片高度

alt: 如果图片资源无法找到,那么就显示对应的文字对图片进行说明。

六、表格标签

表格使用到的标签:

<table> 表格

<tr> 行

<td> 单元格

<th> 表头 默认的样式是居中,加粗。

<caption> 表格的标题

表格常用的属性:

border 设置表格的边框

width : 设置表格的宽度

height: 设置表格的高度的。

colspan: 设置单元格占据指定的列数。

rowspan : 设置单元格占据指定的行数。

<thead> 标签用于组合 HTML 表格的表头内容。

<thead> 元素应该与 <tbody> 和 <tfoot> 元素结合起来使用,用来规定表格的各个部分(表头、主体、页脚)。

通过使用这些元素,使浏览器有能力支持独立于表格表头和表格页脚的表格主体滚动。当包含多个页面的长的表格被打印时,表格的表头和页脚可被打印在包含表格数据的每张页面上。

<thead> 标签必须被用在以下情境中:作为 <table> 元素的子元素,出现在 <caption>、<colgroup> 元素之后,<tbody>、 <tfoot> 和 <tr> 元素之前。

七、表单标签

<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<!-- 表单标签: 表单标签的作用是用于提交数据给服务器的表单标签的根标签是<form>标签常用的属性action: 该属性是用于指定提交数据的地址。method: 指定表单的提交方式。get : 默认使用的提交方式。 提交的数据会显示在地址栏上。post : 提交的数据不会显示在地址栏上。注意: 表单项的数据如果需要提交到服务器上面,那么表单项必须要有name的属性值 -->

</head>
<body>
<form action="http://www.baidu.com" method="post"> <!-- 文本输入框 单 行- -> 用户名:<input name="userName" type="text"/><br/>
<!-- 密码框 -->
密码:<input name="password" type="password"/><br/>
<!-- 单选框 -->
性别: 男<input checked="true" value="man" name="sex" type="radio"/>
女<input name="sex" value="woman" type="radio"/><br/>
< !-- 下拉框 -->
来自的城市:<select name="city">
<option value="BJ">北京</option>
<option value="SH">上海</option>
<option value="GZ">广州</option>
<option value="SZ">深圳</option>
</select><br/>
<!-- 复选框 同一组的复选框name的属性值要一致 -->
兴趣爱好:java <input value="java" name="hobit" checked="checked" type ="checkbox" />
javascript <input type="checkbox" value="javascript" name="hobit" />
android <input value="android" name="hobit" type="checkbox" /><br/> <!-- 文件上传框-->
大头照:<input name="image" type="file" /><br/>
个人简介:
<!-- 文本域 -->
<textarea name="intro" rows="10" cols="30"></textarea><br/>
<!-- 提交按钮 -->
<input type="submit" value="注册"/>
<!-- 重置按钮 -->
<input type="reset" value="重置"/>
</form>
</body>
</html>

更多精彩内容在微信公众平台:网页设计自学平台

干货!免费领取Adobe高级讲师前端教程


点我领取

览器支持

所有主流浏览器都支持 <a> 标签。

标签定义及使用说明

<a> 标签定义超链接,用于从一个页面链接到另一个页面。

<a> 元素最重要的属性是 href 属性,它指定链接的目标。

在所有浏览器中,链接的默认外观如下:

  • 未被访问的链接带有下划线而且是蓝色的

  • 已被访问的链接带有下划线而且是紫色的

  • 活动链接带有下划线而且是红色的

提示和注释

提示:如果没有使用 href 属性,则不能使用 hreflang、media、rel、target 以及 type 属性。

提示:通常在当前浏览器窗口中显示被链接页面,除非规定了其他 target。

提示:请使用 CSS 来改变链接的样式。

HTML 4.01 与 HTML5之间的差异

在 HTML 4.01 中,<a> 标签既可以是超链接,也可以是锚。在 HTML5 中,<a> 标签是超链接,但是假如没有 href 属性,它仅仅是超链接的一个占位符。

HTML5 有一些新的属性,同时不再支持一些 HTML 4.01 的属性。

属性

New :HTML5 中的新属性。

属性描述
charsetchar_encodingHTML5 不支持。规定目标 URL 的字符编码。
coordscoordinatesHTML5 不支持。规定链接的坐标。
downloadNewfilename指定下载链接
hrefURL规定链接的目标 URL。
hreflanglanguage_code规定目标 URL 的基准语言。仅在 href 属性存在时使用。
mediaNewmedia_query规定目标 URL 的媒介类型。默认值:all。仅在 href 属性存在时使用。
namesection_nameHTML5 不支持。规定锚的名称。
relalternateauthorbookmarkhelplicensenextnofollownoreferrerprefetchprevsearchtag规定当前文档与目标 URL 之间的关系。仅在 href 属性存在时使用。
revtextHTML5 不支持。规定目标 URL 与当前文档之间的关系。
shapedefaultrectcirclepolyHTML5 不支持。规定链接的形状。
target_blank_parent_self_topframename规定在何处打开目标 URL。仅在 href 属性存在时使用。
typeNewMIME_type规定目标 URL 的 MIME 类型。仅在 href 属性存在时使用。注:MIME = Multipurpose Internet Mail Extensions。

全局属性

<a> 标签支持 HTML 的全局属性。

事件属性

<a> 标签支持 HTML 的事件属性。

创建超级链接

本例演示如何在 HTML 文档中创建链接。

将图像作为链接

本例演示如何使用图像作为链接。

在新的浏览器窗口打开链接

本例演示如何在新窗口打开一个页面,这样的话访问者就无需离开您的站点了。

创建电子邮件链接

本例演示如何链接到一个邮件。(本例在安装邮件客户端程序后才能工作。)

创建电子邮件链接 2

本例演示更加复杂的邮件链接。

使用锚跳转到同一个页面的不同位置

本例演示如何使用锚的 id 属性跳转到页面的不同位置( HTML5 不支持 name 属性)

如您还有不明白的可以在下面与我留言或是与我探讨QQ群308855039,我们一起飞!