1、JS(或浏览器中执行的JS)= JS基础知识(ECMA262标准)+ JS-Web-API(W3C标准)
1)JS-Web-API( W3C 的标准)
- DOM 操作
- BOM 操作
- 事件绑定
- ajax 请求(包括 http 协议)
- 存储
2)“JS基础知识”也叫做“ES基础知识”( ECMA-262 标准)
- 变量类型和计算
- 原型和原型链
- 闭包和作用域
- 异步和单线程
- 其他(如日期、Math、各种常用API)
2、DOM
1)DOM 的本质
开发完的 html 代码会保存到一个文档中(一般以`.html`或者`.htm`结尾),文档放在服务器上,浏览器请求服务器,这个文档被返回。因此,最终浏览器拿到的是一个文档而已,文档的内容就是 html 格式的代码。
但是浏览器要把这个文档中的 html 按照标准渲染成一个页面,此时浏览器就需要将这堆代码处理成自己能理解的东西,也得处理成 JS 能理解的东西,因为还得允许 JS 修改页面内容呢。
基于以上需求,浏览器就需要把 html 转变成 DOM,html 是一棵树,DOM 也是一棵树。对 DOM 的理解,可以暂时先抛开浏览器的内部因此,先从 JS 着手,即可以认为 DOM 就是 JS 能识别的 html 结构,一个普通的 JS 对象或者数组。
2)DOM 节点操作
// 获取 DOM 节点 var div1 = document.getElementById('div1') // 元素 var divList = document.getElementsByTagName('div') // 集合 console.log(divList.length) console.log(divList[0]) var containerList = document.getElementsByClassName('.container') // 集合 var pList = document.querySelectorAll('p') // 集合
prototype和Attribute的区别和联系 prototype:DOM 节点就是一个 JS 对象,它符合之前讲述的对象的特征 ———— 可扩展属性 var pList = document.querySelectorAll('p') var p = pList[0] console.log(p.style.width) // 获取样式 p.style.width = '100px' // 修改样式 console.log(p.className) // 获取 class p.className = 'p1' // 修改 class // 获取 nodeName 和 nodeType console.log(p.nodeName) console.log(p.nodeType) Attribute:property 的获取和修改,是直接改变 JS 对象,而 Attibute 是直接改变 html 的属性。两种有很大的区别 var pList = document.querySelectorAll('p') var p = pList[0] p.getAttribute('data-name') p.setAttribute('data-name', 'imooc') p.getAttribute('style') p.setAttribute('style', 'font-size:30px;')
3)获取DOM树
//新增节点 var div1 = document.getElementById('div1') // 添加新节点 var p1 = document.createElement('p') p1.innerHTML = 'this is p1' div1.appendChild(p1) // 添加新创建的元素 // 移动已有节点 var p2 = document.getElementById('p2') div1.appendChild(p2) //获取父元素 var div1 = document.getElementById('div1') var parent = div1.parentElement //获取子元素 var div1 = document.getElementById('div1') var child = div1.childNodes //删除节点 var div1 = document.getElementById('div1') var child = div1.childNodes div1.removeChild(child[0])
3、BOM
1)BOM的本质
DOM 是浏览器针对下载的 HTML 代码进行解析得到的 JS 可识别的数据对象。而 BOM(浏览器对象模型)是浏览器本身的一些信息的设置和获取,例如获取浏览器的宽度、高度,设置让浏览器跳转到哪个地址。
- navigator
- screen
- location
- history
2)常用API
/ navigator var ua = navigator.userAgent var isChrome = ua.indexOf('Chrome') console.log(isChrome) // screen console.log(screen.width) console.log(screen.height) // location console.log(location.href) console.log(location.protocol) // 'http:' 'https:' console.log(location.pathname) // '/learn/199' console.log(location.search) console.log(location.hash) // history history.back() history.forward()
3)常用场景
//检测浏览器的类型 var ua = navigator.userAgent var isChrome = ua.indexOf('Chrome') console.log(isChrome) //拆解url的各部分 console.log(location.href) console.log(location.protocol) // 'http:' 'https:' console.log(location.pathname) // '/learn/199' console.log(location.search) console.log(location.hash)