学记笔记(API)

新人学习JS的日记。

欢迎各位朋友纠错!

以下内容都在谷歌浏览器进行测试可用
一些方法是ES6的,要用babel转码才能用(不过最新版本谷歌浏览器已经支持90%的ES6语法了,基本都可以使用).

>> Node

>> 属性
前提:node是dom中的一个节点.

>> node.nodeType -- 节点类型
1: 说一下常用的类型值 
   返回1: 表示为Element节点,例如
,

返回2: 属性节点 返回3: 表示为Text节点,文本节点. 2: 更多请看 https://developer.mozilla.org/zh-CN/docs/Web/API/Node/nodeType >> node.nodeValue -- 节点值 1: 节点(常用) 值 Text 文本节点的内容 Attr 属性值 Element null 更多请看 https://developer.mozilla.org/zh-CN/docs/Web/API/Node/nodeValue 2: 对于文本,属性节点,(不返回null的节点)的该属性赋值,会直接改变其值. >> node.textContent -- 节点的所有文本内容 1: 将所有节点的文本合并然后返回 2: Document,DocumentType 或者 Notation 类型节点,则返回null. 3: 给此属性赋值,会删除所有子节点,然后替换为给定文本节点 >> node.ownerDocument -- 节点的根节点 1: 通常为#document. document返回null >> node.parentNode -- node的<父节点> 1: 返回其DOM树中node的父节点. 2: document返回null. 创建的节点还未加入dom返回null. >> node.childNodes -- node的所有<子节点>的集合 1: 获取node节点的所有 子节点. 2: 返回一个nodeList对象,数组方法无法使用(nodeList有forEach方法),你可以将它转换为数组: Array.prototype.slice.call(nodeList); Array.from(nodeList); [...nodeList]; 3: 动态集合,子节点的任何变动,都会直接更新. 你无须再次获取. >> node.firstChild -- node节点的第一个<子节点> 1: 返回node节点的子节点的第一个节点. 2: 若没有子节点,返回null. >> node.lastChild -- node节点的最后一个<子节点> 1: 返回node节点的子节点的最后一个节点. 2: 若没有子节点,返回null. >> node.nextSibling -- node节点的下一个<兄弟节点> 1: 返回node节点的紧跟在其后面的节点. 2: 若没有返回null. 3: 若只想获得元素节点可用: Element.nextElementSibling >> node.previousSibling -- node的前一个<兄弟节点> 1: 返回node节点的紧跟在其前面的节点. 2: 若没有返回null. 3: 若只想获得元素节点可用: Element.previousElementSibling >> node.children -- node的所有<元素子节点> 1: 返回node的子节点的所有元素节点. 2: 返回值是数组. >> node.firstElementChild -- node节点的第一个元素子节点 1: 返回node节点的子节点的第一个元素节点. 2: 若没有子节点,返回null. >> node.lastElementChild -- node节点的最后一个<元素子节点> 1: 返回node节点的子节点的最后一个元素节点. 2: 若没有子节点,返回null. >> node.childElementCount -- node的元素子节点数量 1: 返回一个整数, 没有则返回0

>> 方法
>> Node.normalize() -- 规范节点中的文本
1: 去除空文本节点(空白,换行),相邻的文本节点会合并.

>> Node.hasChildNodes() -- 是否有子节点
1: 如果有返回true , 否则返回false.

>> node.contains(targetNode) -- targetNode是否为node的后代节点
1: targetNode: 判断是否为node的后代节点.
2: 如果 otherNode 是 node 的后代节点或是 node 节点本身.则返回true , 否则返回 false.

>> node.compareDocumentPosition(targetNode) -- 位置关系
1: targetNode: 要与node进行位置比较的节点.
2: 返回值           意义
   0               node与targetNode是同一节点
   1               node与targetNode<不在>同一文档
   2               node是targetNode的<后代>节点
   4               node是targetNode的<祖先>节点
   8               node被targetNode所包含
   16              node 包含 targetNode
3: 同时具有多种位置关系,值会相加. 例:
    doucment.compareDocumentPosition(任意文档内节点 B)
    // 返回20   document是B的祖先,也包含B.   4+16 
4: 与 & 位于运算符计算更有意义.

>> node.cloneNode(deep) -- 克隆节点
1: node: 要被克隆的节点.   deep:布尔值,是否深度克隆.
    deep:为true会克隆其所有的DOM树.
2: 克隆不会克隆node的事件绑定.  例如:
    addEventListener    不会克隆.
    node.onclick = 函数  不会克隆.
    node.onclick = "alert('dads')" (特例)会克隆.
3: 若node有ID属性,你应该给克隆后的节点重新指定ID.以防出现多个相同ID.

>> node.isEqualNode(targetNode) -- 节点是否相同
1: 相同不是 ==, === . 是指节点类型,节点属性,后代节点等等是否相同.
2: 相同返回true, 反则返回false.

>> node.removeChild(targetNode) -- 删除子节点
1: node: targetNode的父节点.  
   targetNode: 要被删除的节点. 
2: 不获取node节点直接删除: targetNode.parentNode.removeChild(targetNode)
3: 最好先解除事件绑定再删除,因为删除节点,事件绑定还会存在,占内存.
4: 返回被删除的节点,你可以保留下来,以后使用. 不保留,会马上销毁.

>> node.appendChild(targetNode) -- 添加节点到父节点的子节点队列末尾
1: node: targetNode的父节点.
   targetNode: 要添加的节点.  
2: targetNode 会被添加到 node 的子节点的末尾.
   若 targetNode 已经在 node 中,则会被移动到末尾.
3: 方法相当于将 targetNode 移动到 node 的子节点末尾.
4: 返回targetNode节点.

>> parentNode.replaceChild(newChild, oldChild) -- 替换节点
1: parentNode: 要替换节点的父节点.
   newChild: 新节点,用来替换.   
   oldChild: 要被替换的节点.
2: 若oldChild在DOM中,先将其删除,在将newChild放入.
3: 返回oldChild节点.

>> parentNode.insertBefore(newChild, targetChild) -- 在目标子节点前插入新子节点
1: parentNode: 2个节点的父节点.
   newChild: 新节点,用来插入.   
   targetChild: 在此目标前插入.
2: 若 targetChild 为 null 则在末尾插入.
3: 返回newChild.

>> 没有insertAfter方法(在目标节点后插入).
1: 模拟: parentNode.insertBefore(node1, node2.nextSibling);

以下接口继承Node的方法和属性:Document,Element,CharacterData(其中Text,Comment,和CDATASection继承),ProcessingInstruction,DocumentFragment,DocumentType,NotationEntityEntityReference.

>> Document

>> 属性
>> document.doctype -- 文档类型
1: 返回文档类型声明,没有则返回null.

>> document.URL -- 文档地址
1: 返回文档的URL地址.

>>document.loaction -- 关于URL的信息
1: 返回一个对象.包含URL的所有信息

>> document.hidden -- 文档是否被隐藏
1: 如何判断隐藏: 页面不在可以被看到,锁屏,页面被完全覆盖等.
2: 完全看不到返回 true. 有任意处可以被看到返回 false.

>> document.visibilityState -- 文档可见详情
1: 返回值             意义
   'visible'         至少有一处可见
   'hidden'          对用户不可见
   'prerender'       正在渲染,并且不可见
   'unloaded'        正在从内存卸载
2: 相关事件: visibilitychange  当值改变时将事件发生到document.
   document.addEventListener("visibilitychange", function() {
       console.log( document.visibilityState );
   });

>> document.activeElement -- 当前获取焦点的元素.
1: 通常来获取