浏览器对象
Window
window对象不仅充当全局作用域,并表示浏览器窗口
window对象有innerWidth 和 innerHeight 属性,获得浏览器窗口的内部宽和高
outerWidth和outerHeight属性,可以获取整个浏览器的宽高
navigator 对象表示浏览器的信息,常用的属性:
navigator.appName: 浏览器名称
navigator.appVersion: 浏览器版本
navigator.language 浏览器设置的语言
navigator.platform: 操作系统类型
navigator.userAgent: 浏览器设定的User-Agent字符串
screen 表示屏幕信息 常用属性:
screen.width: 屏幕宽度,以像素为单位
screen.height: 屏幕高度,以像素为单位
screen.colorDepth: 返回颜色位数
location 表示当前页面的URL信息
一个完整的URL:
> http://www.example.com:8080/path/index.html?a=1&b=2#TOP
可以用location.href获取。要获得URL各个部分的值,可以这么写:
|
|
要加载一个新页面,可以调用location.assign()。如果要重新加载当前页面,调用location.reload()方法非常方便。
document 对象表示当前页面,整个DOM树的根节点
###### document.title 改变标题
查找DOM树的某个节点:从document对象开始查找,最常用的就是根据ID和Tag Name document.getElementById(), getElementsByTagName()
###### document 还有一个cookie属性,可以获得当前页面的cookie
history 对象保留了浏览器的历史记录,JS可以调用history的back()和forward()
history对象不建议使用
更新DOM
##### 修改节点的文本方法有两种:
###### 1.修改innerHTML属性:即可修改一个DOM节点的文本内容,也可以通过HTML片段修改DOM节点内部的子树
###### 2. 修改innerText或textContent属性,直接对字符串进行HTML编码,无法设置任何HTML标签
在读取属性时,innerHTML不返回隐藏的文本,而textContent返回所有文本,IE<9不支持textContent
DOM节点的style属性对应所有的CSS,fontSize对应CSS中的font-size
插入DOM
innerHTML会替换原来的所有节点,所以插入节点有两个其他方法:
1.appendChild() 把一个子节点添加到父节点的最后一个子节点
动态创建一个节点然后添加到DOM树种可以实现很多功能:添加CSS格式:
|
|
2. insertBefore 把子节点插入到指定位置
用法: parentElement.insertBefore(newElement, referenceElement); 子节点会插入到referenceElement 之前
循环一个父节点的所有子节点通过迭代children属性实现:
|
|
删除DOM
删除节点需要获得该节点本身跟他的父节点,调用父节点的removeChild把自己删掉
删除的节点虽然不在文档树中,但其实他还在内存中,可以随时被添加到别的位置
children属性是一个只读属性,并且它在子节点变化时会时时更新,因此删除多个节点时,children属性时刻都在变化
操作表单
用JS操作表单和操作DOM一样, JS操作表单可以获得用户的输入或者对一个输入框设置新的内容
表单控件:
* 文本框,<input type = “text”> 用于输入文本
* 口令框, <input type = “password”> 用于输入口令
* 单选框, <input type = “radio”> 用于选择一项
* 复选框,<input type = “checkbox”> 用于选择多项
* 下拉框,<select> 用于选择一项
* 隐藏文本, <input type = “hidden”> 用户不可见,但表单提交时会把隐藏文本发送到服务器
获取值
首先获得节点的引用, 然后调用**value**获得对应的用户的输入值,对于radio 和 checkbox 获得是否勾选通过**checked**进行判断
设置值
和获取值类似,对于text , password, hidden, select 直接设置**value**
对于radio和checkbox,设置**checked** 为true或者false即可
HTML5控件
新增常用: date, datetime, datetime-local, color等,他们都是用<input>标签 如: <input type = “date” value = “2015-07-01”>
提交表单
两种方式:
* 1.通过**form**元素的submit()方法提交表单
* 2.浏览器默认点击<button type = “submit”>时提交表单,或者是在最后一个输入键按回车,因此可以通过相应<form>本身的onsubmit事件。onsubmit = “return checkForm()”
|
|
Type为hidden用户不可见, 同时因为设置了name属性的<input>的数据会被提交,没有name属性的就不会被提交。
操作文件
上传文件的唯一控件 type = “file”> ``` 1234567891011121314151617
** 注意: 当一个表单包含``` <input type = “file”> ```时,表单的enctype必须制定为multipart/form-data, method必须指定为post, 浏览器才能正确的编码并且以multipart/form-data格式发送表单数据 ** 浏览器只允许选择本地文件因此不能通过改变value的方式来改变文件路径,也不能获得文件的真实路径 #### File API 新增的file API 允许JS获取文件内容,H65新增的File API主要有File和FIleReader两个主要对象 ### AJAX AJAX并不是JS的规范, 他是Asynchronous JavaScript and XML 意识就是用JS执异步网络请求。 Web 运作原理: 一次HTTP请求对应一个页面 而AJAX请求时异步的,要通过回调函数获得响应 现在浏览器上写AJAX主要依靠XMLHttpRequest对象 var request = new XMLHttpRequest(); // 新建XMLHttpRequest对象 Request.onreadystatechange = function() { 状态发生变化时, 函数被回调 } 低版本的IE使用ActiveXObject对象 Var request = new ActiveXObject(‘Microsoft.XMLHTTP’); 通用:
|
|
var request;
if (window.XMLHttpRequest) {
request = new XMLHttpRequest();
} else {
request = new ActiveXObjext('Microsoft.XMLHTTP'); // 针对低版本IE
}
```
创建对象后,首先设置onreadystatechange的回调函数,在回调函数中通过你readyState === 4 来判断是否完成, 在根据status === 200 判断是否是一个成功的响应。
XMLHttpRequest对象三个重要属性:
| 属性 | 描述 |
| :----- | :----- |
|onreadystatechange | 每当readyState属性变化时调用的函数 |
| readyState | 存有XMLHttpRequest的状态, 从0 到 4 变化 |
| status | 两个值200 404 |
0: 请求未初始化
1: 服务器连接已建立
2: 请求已接收
3: 请求处理中
4: 请求已完成,且响应就绪
200: “OK”
404: 未找到页面
如果需要将请求发送到服务器,要使用XMLHttpRequest对象的open()和send()方法
- open(methon, url, async) 方法规定了请求的类型,URL,和是否异步
XMLHttpRequest对象的open()方法有三个参数,第一个参数指定是GET还是POST, 第二个参数指定URL地址, 第三个参数指定是否使用异步,默认为true, 所以不写
Async = true时才有onreadystatechange函数,为false时直接把代码放到send()方法后即可(参考W3AJAX)
GET和POST的区别:
与POST相比, GET更简单也更快,并且在大多数下都能用,例外在以下场景用POST:
1. 无法使用缓存文件
2. 向服务器发送大量数据(POST没有数据量 限制)
3. 发送包含未知字符的用户输入时, POST比GET更稳定和更可靠
4. GET使用URL或Cookie传参,而POST将数据放在BODY中
- send(string) 将请求发送到服务器, string仅用于POST请求
服务器响应
获得服务器的响应,使用XMLHttpRequest对象的responseText和responseXML属性
| 属性 | 描述 |
| :----- | :----- |
| responseText | 获得字符串形式的响应数据 |
| responseXML | 获得XML形式的响应数据 |
安全限制
由于浏览器的同源策略,JS在发送AJAX请求时,URL的域名必须和当前的页面完全一致:域名要一致,协议要相同(http和https不同), 端口号要相同
JS有大致三种方式去请求域外的URL
1. 通过Flash插件发送HTTP请求,已经快被淘汰
2. 在同源域名下架设一个代理服务器进行转发,JS负责把请求发送到代理服务器,代理服务器再把结果返回,这样就遵循了同源策略。
3. JSONP利用了浏览器允许跨域引用JS资源,限制是只能使用GET请求,并且要求返回JS。 具体的做法就是: 先在页面中准备好回调函数,然后给页面添加一个<script>节点,相当于动态的读取域外的JS资源
H5的跨域策略: CORS
CORS全称: Cross-Origin Resourse Sharing 跨域资源共享
Origin表示当前页面的域,当JS想域外发起请求时,浏览器收到响应后,首先检查Access-Control-Allow-Origin 是否包含本域。
> 用一个图来表示就是:
假设本域是my.com,外域是sina.com,只要响应头Access-Control-Allow-Origin为http://my.com,或者是*,本次请求就可以成功。
canvas
Canvas时HTML5的新增组件, 他就像一个画布,可以用JS在上面绘制各种图表,动画等
Promise
Promise对象是一种“承诺将来会执行”的对象。
可见Promise最大的好处是在异步执行的流程中,把执行代码和处理结果的代码清晰地分离了: