浏览器模型
第 5-9 节内容建议结合《文件上传与下载》学习。
1. 浏览器对象 BOM
BOM(Browser Object Model) 是指浏览器对象模型,是用于描述这种对象与对象之间层次关系的模型,浏览器对象模型提供了独立于内容的、可以与浏览器窗口进行互动的对象结构。BOM由多个对象组成,其中代表浏览器窗口的 Window 对象是BOM的顶层对象,其他对象都是该对象的子对象(如 Screen、Location、History、Navigator 等)。

1.1 Window 对象
浏览器里面,window对象(注意,w为小写)指当前的浏览器窗口。它也是当前页面的顶层对象,即最高一层的对象,所有其他对象都是它的下属。一个变量如果未声明,那么默认就是顶层对象的属性。具体详见《网道 - Window 对象》。
1.2 Location 对象
Location 对象提供 URL 相关的信息和操作方法。通过 window.location 和 document.location 属性得到对象。
1.3 History 对象
window.history 指向 History 对象,表示当前窗口的浏览历史。
每当同一个文档的浏览历史(即history对象)出现变化时,就会触发popstate事件。注意,仅仅调用pushState()方法或replaceState()方法 ,并不会触发该事件,只有用户点击浏览器倒退按钮和前进按钮,或者使用 JavaScript 调用History.back()、History.forward()、History.go()方法时才会触发。另外,该事件只针对同一个文档,如果浏览历史的切换,导致加载不同的文档,该事件也不会触发。
1.4 Screen 对象
Screen 对象表示当前窗口所在的屏幕,提供显示设备的信息。window.screen属性指向这个对象。具体详见《网道 - Screen 对象》。
1.5 Navigator 对象
window.navigator属性指向一个包含浏览器和系统信息的 Navigator 对象。脚本通过这个属性了解用户的环境信息。具体详见《网道 - Navigator 对象》。
2. Document 对象
Document Object Model(DOM),文档对象模型,其由节点组成的。DOM 为文档提供了结构化表示,并定义了如何通过脚本来访问文档结构。
DOM 节点分类:
文档节点(文档):整个 HTML 文档
元素节点(标签):HTML标签
属性节点(属性):元素的属性
文本节点(文本):HTML标签中的文本内容(包括空格/换行)

DOM 节点获取:
获取直接节点
document.getElementById()document.getElementsByClassName()document.getElementsByTagName()document.querySelector()document.querySelectorAll()
获取关系节点
父节点:
节点.parentNode下一个兄弟节点:
节点.nextElementSibling || 节点.nextSibling前一个兄弟节点:
节点.previousElementSibling || 节点.previousSibling任意兄弟节点:
节点.parentNode.children[index]第一个子节点:
节点.firstElementChild || 节点.firstChild最后一个子节点:
节点.lastElementChild || 节点.lastChild所有子节点:
节点.children
DOM 节点操作:
创建节点:
document.createElement("标签名")末尾插入节点:
节点.appendChild(新的子节点)定位插入节点:
节点.insertBefore(新的子节点, 作为参考的子节点)删除节点:
节点.removeChild(子节点)克隆节点:
要复制的节点.cloneNode()
DOM 节点属性操作:
获取属性:
节点.属性名或节点.getAttribute("属性名称")设置属性:
节点.属性名=XXX或节点.setAttribute("属性名", "属性值")删除属性:
节点.removeAttribute(属性名)
3. URL 对象
url的合法对象分为:
URL 元字符:分号(
;),逗号(,),斜杠(/),问号(?),冒号(:),at(@),&,等号(=),加号(+),美元符号($),井号(#)语义字符:
a-z,A-Z,0-9,连词号(-),下划线(_),点(.),感叹号(!),波浪线(~),星号(*),单引号('),圆括号(())
url编码和解码即合法与不合法之间的转换:
encodeURI()方法用于转码整个 URL,转码元字符和语义字符之外的字符encodeURIComponent()方法用于转码 URL 的组成部分,转码语义字符之外的所有字符decodeURI()方法用于整个 URL 的解码decodeURIComponent()方法用于URL 片段的解码
URL接口是一个构造函数,通过window.URL可以拿到构造函数。
实例属性:
4. URLSearchParams 对象
URLSearchParams 对象用来构造、解析和处理 URL 的查询字符串(即 URL 问号后面部分)。
5. XMLHttpRequest 对象
AJAX 通信
创建XMLHttpRequest对象实例
发出 HTTP 请求
接收服务器传回的数据
更新网页数据
6. FormData 表单对象
表单提交以键值对的形式,键名是控件的name属性,键值是控件的value属性。
表单以 GET 形式提交,所有键值对会以 URL 的查询字符串形式,提交到服务器,例如
/handling-page?user_name=张三&user_passwd=123&submit_button=提交表单以 POST 形式提交,所有键值对会连接成一行,作为 HTTP 请求的数据体发送到服务器,例如
user_name=张三&user_passwd=123&submit_button=提交
FormData() 构造函数的参数是一个表单元素,如果参数为空,则默认为空表单。
表单实例方法(以上述表单为例):
7. ArrayBuffer 对象
ArrayBuffer 对象表示一段二进制数据,用来模拟内存里面的数据。通过这个对象,JavaScript 可以读写二进制数据。这个对象可以看作内存数据的表达。具体详见 ArrayBuffer 对象教程。
8. Blob 对象
Blob 对象表示一个二进制文件的数据内容,通常用来读写文件,比如一个图片文件的内容就可以通过 Blob 对象读写通常用来读写文件。它与 ArrayBuffer 的区别在于,它用于操作二进制文件,而 ArrayBuffer 用于操作内存。具体详见 Blob 对象教程。
Blob 对象不能直接下载成文件,需要通过 URL.createObjectURL() 转化成一个临时 URL。这个 URL 以blob://开头,表明对应一个 Blob 对象,协议头后面是一个识别符,用来唯一对应内存里面的 Blob 对象。
9. File 对象
File 对象代表一个文件,用来读写文件信息,可以说是一种特殊的 Blob 对象。
实例属性:
File.lastModified:最后修改时间
File.name:文件名或文件路径
File.size:文件大小(单位字节)
File.type:文件的 MIME 类型
实例方法:
继承自 Blob 对象的方法
FileList 对象是一个类似数组的对象,代表一组选中的文件,每个成员都是一个 File 实例。FileList 对象主要出现的两个场合:
文件控件节点的 files 属性,返回一个 FileList 实例。
拖拉一组文件时,目标区的
DataTransfer.files属性,返回一个 FileList 实例。
FileList 的实例是一个类似数组的对象,可以直接用[]运算符,即 myFileList[0] 表示第一个 File 对象。
10. FileReader 对象
FileReader 对象用于读取 File 对象或 Blob 对象所包含的文件内容。
实例属性:
FileReader.error:读取文件时产生的错误对象
FileReader.readyState:整数,表示读取文件时的当前状态。一共有三种可能的状态,
0表示尚未加载任何数据,1表示数据正在加载,2表示加载完成。FileReader.result:读取完成后的文件内容,有可能是字符串,也可能是一个 ArrayBuffer 实例。
FileReader.onabort:
abort事件(用户终止读取操作)的监听函数。FileReader.onerror:
error事件(读取错误)的监听函数。FileReader.onload:
load事件(读取操作完成)的监听函数,通常在这个函数里面使用result属性,拿到文件内容。FileReader.onloadstart:
loadstart事件(读取操作开始)的监听函数。FileReader.onloadend:
loadend事件(读取操作结束)的监听函数。FileReader.onprogress:
progress事件(读取操作进行中)的监听函数。
实例方法:
FileReader.abort():终止读取操作,
readyState属性将变成2。FileReader.readAsArrayBuffer():以 ArrayBuffer 的格式读取文件,读取完成后
result属性将返回一个 ArrayBuffer 实例。FileReader.readAsBinaryString():读取完成后,
result属性将返回原始的二进制字符串。FileReader.readAsDataURL():读取完成后,
result属性将返回一个 Data URL 格式(Base64 编码)的字符串,代表文件内容。对于图片文件,这个字符串可以用于<img>元素的src属性。注意,这个字符串不能直接进行 Base64 解码,必须把前缀data:*/*;base64,从字符串里删除以后,再进行解码。FileReader.readAsText():读取完成后,
result属性将返回文件内容的文本字符串。该方法的第一个参数是代表文件的 Blob 实例,第二个参数是可选的,表示文本编码,默认为 UTF-8。
最后更新于
这有帮助吗?