js 学习笔记 -- webapi

webapi

JS Web API有哪些?

DOM、BOM、事件绑定、ajax、存储

DOM的本质就是从HTML解析出来的一棵树,是树形的数据结构。

document.getElementById();//id名,在实际开发中较少使用,选择器中多用class id一般只用在顶级层存在 不能太过依赖id
document.getElementsByTagName();//标签名
document.getElementsByClassName();//类名
document.getElementsByName();//name属性值,一般不用
document.querySelector();//css选择符模式,返回与该模式匹配的第一个元素,结果为一个元素;如果没找到匹配的元素,则返回null
document.querySelectorAll()//css选择符模式,返回与该模式匹配的所有元素,结果为一个类数组

所有节点都有nodeType属性,代表节点的不同类型,通过nodeType属性可以来判断节点的类型。经常使用的节点主要有以下几种类型:

Element类型(元素节点):nodeType值为 1
Text类型(文本节点):nodeType值为 3
Comment类型(注释节点):nodeType值为 8
Document类型(document节点):nodeType值为 9;其规定的一些常用的属性有
document.body document.head 分别为HTML中的 body head

document.documentElement为 html 标签

所有的节点都有 hasChildNodes()方法 判断有无子节点 有一个或多个子节点时返回true】

通过一些属性可以来遍历节点树

parentNode//获取所选节点的父节点,最顶层的节点为#document
childNodes //获取所选节点的子节点们
firstChild //获取所选节点的第一个子节点
lastChild //获取所选节点的最后一个子节点
nextSibling //获取所选节点的后一个兄弟节点 列表中最后一个节点的nextSibling属性值为null
previousSibling //获取所选节点的前一兄弟节点 列表中第一个节点的previousSibling属性值为null

基于元素节点树的遍历(遍历元素节点树)

parentElement //返回当前元素的父元素节点(IE9以下不兼容)
children // 返回当前元素的元素子节点
firstElementChild //返回的是第一个元素子节点(IE9以下不兼容)
lastElementChild //返回的是最后一个元素子节点(IE9以下不兼容)
nextElementSibling //返回的是后一个兄弟元素节点(IE9以下不兼容)
previousElementSibling //返回的是前一个兄弟元素节点(IE9以下不兼容)

DOM 操作

一、节点创建型API

1.1 createElement
1.2 createTextNode
1.3 cloneNode
1.4 createDocumentFragment

二、页面修改形API(包括删除和添加)(删)(改)

2.1 appendChild(追加为子元素)
2.2 insertBefore(插入前面)
2.3 removeChild(删除子元素)
2.4 replaceChild(替换子元素)
三 节点查询型API(查)

3.1 document.getElementById
3.2 document.getElementsByTagName
3.3 document.getElementsByName
3.4 document.getElementsByClassName
3.5 document.querySelector和document.querySelectorAll
3.6 elementFromPoint()
四 元素属性型操作(属性节点的操作)

一般只操作html标签上的属性如id;class之类的;
但是style属性如宽高背景色之类的一般写在css里面所以要通过element.currentStyle : window.getComputedStyle(element,pseduoElement)来操作详细请看BOM笔记

4.1 getAttribute() (获取属性)
4.2 createAttribute() (创建属性)
4.3 setAttribute() (设置属性)
4.4 romoveAttribute() (删除属性)
4.5 element.attributes(将属性生成数组对象)

BOM 浏览器对象模型

navigator.userAgent就是获取浏览器的类型
screen 基本上不用
history.back(); // 浏览器后退
history.forward();// 浏览器前进
location 获取 url 地址信息

hash: ""
host: ""
hostname: ""
href: ""
origin: ""
pathname: ""
port: ""
protocol: ""
reload: ƒ reload()
replace: ƒ replace()
search: ""

事件

Event 对象代表事件的状态,比如事件在其中发生的元素、键盘按键的状态、鼠标的位置、鼠标按钮的状态。

事件句柄 (Event Handlers)

事件通常与函数结合使用,函数不会在事件发生前被执行!

标准 Event 属性

下面列出了 2 级 DOM 事件标准定义的属性。

属性 描述
bubbles 返回布尔值,指示事件是否是起泡事件类型。
cancelable 返回布尔值,指示事件是否可拥可取消的默认动作。
currentTarget 返回其事件监听器触发该事件的元素。
eventPhase 返回事件传播的当前阶段。
target 返回触发此事件的元素(事件的目标节点)。
timeStamp 返回事件生成的日期和时间。
type 返回当前 Event 对象表示的事件的名称。

标准 Event 方法

下面列出了 2 级 DOM 事件标准定义的方法。IE 的事件模型不支持这些方法:

方法 描述
initEvent() 初始化新创建的 Event 对象的属性。
preventDefault() 通知浏览器不要执行与事件关联的默认动作。
stopPropagation() 不再派发事件。

事件冒泡、事件捕获和事件委托

事件委托依靠的就是事件冒泡和捕获的机制,我先来解释一下事件冒泡和事件捕获:

事件冒泡会从当前触发的事件目标一级一级往上传递,依次触发,直到document为止。
事件捕获会从document开始触发,一级一级往下传递,依次触发,直到真正事件目标为止。

事件委托就是基于js的事件流产生的,事件委托是利用事件冒泡,将事件加在父元素或者祖先元素上,触发该事件

event.stopPropagation() // 阻止冒泡

ajax

XMLHttpRequest

方法 说明
open 请求URL,方法等
send 发送请求
onreadystatechange xhr.readyState会从0到4变化 ,请求的状态
0 —— (未初始化)还没有调用send()方法
1 —— (载入)已调用send()方法,服务器连接已建立,正在发送请求
2 —— (载入完成) send()方法执行完成,已经接收到全部响应内容
3 —— (交互)正在解析响应内容
4 —— (完成)响应内容解析完成,可以在客户端调用
示例
const xhr = new XMLHttpRequest()
xhr.open('POST', '/login', true)
xhr.onreadystatechange = function() {
    if (xhr.readyState === 4) {
        if (xhr.status === 200) {
            // console.log(JSON.parse(xhr.responseText))
            alert(xhr.responseText)
        } else {
            console.log('其他情况')
        }
    }
}
const postData = {
    username: 'xxx',
    password: 'xxx'
}
xhr.send(JSON.stringify(postData))

同源策略和跨域

同源策略

同源:协议、域名、端口,三者必须一致

加载图片img、css、js可以无视同源策略

跨域方法

jsonp,jsonp就是创建一个script标签,
cors,设置 http 请求 跨域头,Access-Control-Allow-Origin
postMessage
http-proxy -- 常用
websocket
document.domain/window.name/location.hash + iframe -- 不常用

存储

1.localStorage数据会永久存储,除非代码或手动删除
2.sessionStorage数据只存在于当前会话,浏览器关闭则清空
3.cookie 存储大小最大是4KB,http请求时需要发送到服务端,cookie可以跨端口

原文地址:https://www.cnblogs.com/SLchuck/p/13763842.html