【JS】JS中常见原生DOM操作API

2018-05-01  本文已影响0人  沫之

几种对象

1.Node

Node是一个接口,中文叫节点,很多类型的DOM元素都是继承于它,都共享着相同的基本属性和方法。常见的Node有 element,text,attribute,comment,document 等(所以要注意 节点 和 元素 的区别,元素属于节点的一种)。

Node有一个属性 nodeType 表示Node的类型,它是一个整数,其数值分别表示相应的Node类型,具体如下:

ELEMENT_NODE: 1,// 元素节点  

ATTRIBUTE_NODE: 2,// 属性节点  

TEXT_NODE: 3,// 文本节点  

 DATA_SECTION_NODE: 4,  

 ENTITY_REFERENCE_NODE: 5,  

  ENTITY_NODE: 6,  

  PROCESSING_INSTRUCTION_NODE: 7,  

  COMMENT_NODE: 8,// 注释节点  

   DOCUMENT_NODE: 9,// 文档  

    DOCUMENT_TYPE_NODE: 10,  

    DOCUMENT_FRAGMENT_NODE: 11,// 文档碎片  

    NOTATION_NODE: 12,  

    DOCUMENT_POSITION_DISCONNECTED: 1,  

    DOCUMENT_POSITION_PRECEDING: 2,  

    DOCUMENT_POSITION_FOLLOWING: 4,  

    DOCUMENT_POSITION_CONTAINS: 8,  

    DOCUMENT_POSITION_CONTAINED_BY: 16,  

    DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: 32  

2.NodeList

NodeList 对象是一个节点的集合,一般由 Node.childNodes 、 document.getElementsByName 和 document.querySelectorAll 返回的。

不过需要注意, Node.childNodes 、 document.getElementsByName 返回的 NodeList 的结果是实时的(此时跟HTMLCollection比较类似),而 document.querySelectorAll 返回的结果是固定的,这一点比较特殊

var childNodes = document.body.childNodes;  

console.log(childNodes.length);// 如果假设结果是“2”  

document.body.appendChild(document.createElement('div'));  

console.log(childNodes.length);// 此时的输出是“3”  

3.HTMLCollection

节点查找API

document.getElementById :根据ID查找元素,大小写敏感,如果有多个结果,只返回第一个;

document.getElementsByClassName :根据类名查找元素,多个类名用空格分隔,返回一个 HTMLCollection 。注意兼容性为IE9+(含)。另外,不仅仅是document,其它元素也支持 getElementsByClassName 方法;

document.getElementsByTagName :根据标签查找元素, * 表示查询所有标签,返回一个 HTMLCollection 。

document.getElementsByName :根据元素的name属性查找,返回一个 NodeList 。

document.querySelector :返回单个Node,IE8+(含),如果匹配到多个结果,只返回第一个。

document.querySelectorAll :返回一个 NodeList ,IE8+(含)。

document.forms :获取当前页面所有form,返回一个 HTMLCollection ;

节点创建API

节点创建API主要包括 createElement 、 createTextNode 、 cloneNode 和 createDocumentFragment (创建文档碎片)四个方法。

节点修改API

节点修改API都具有下面这几个特点:

不管是新增还是替换节点,如果其原本就在页面上,那么原来位置的节点将被移除;

修改之后节点本身绑定的事件不会消失;

appendChild/insertBefore/removeChild/replaceChild

节点关系API

DOM中的节点相互之间存在着各种各样的关系,如父子关系,兄弟关系等。

父关系API

parentNode :每个节点都有一个parentNode属性,它表示元素的父节点。Element的父节点可能是Element,Document或DocumentFragment;

parentElement :返回元素的父元素节点,与parentNode的区别在于,其父节点必须是一个Element元素,如果不是,则返回null;

子关系API

children :返回一个实时的 HTMLCollection ,子节点都是Element,IE9以下浏览器不支持;

childNodes :返回一个实时的 NodeList ,表示元素的子节点列表,注意子节点可能包含文本节点、注释节点等;

firstChild :返回第一个子节点,不存在返回null,与之相对应的还有一个 firstElementChild ;

lastChild :返回最后一个子节点,不存在返回null,与之相对应的还有一个 lastElementChild ;

兄弟关系型API

previousSibling :节点的前一个节点,如果不存在则返回null。注意有可能拿到的节点是文本节点或注释节点,与预期的不符,要进行处理一下。

nextSibling :节点的后一个节点,如果不存在则返回null。注意有可能拿到的节点是文本节点,与预期的不符,要进行处理一下。

previousElementSibling :返回前一个元素节点,前一个节点必须是Element,注意IE9以下浏览器不支持。

nextElementSibling :返回后一个元素节点,后一个节点必须是Element,注意IE9以下浏览器不支持。

元素属性型API

setAttribute、getAttribute

样式相关API

直接修改元素的样式

elem.style.color = 'red';  

elem.style.setProperty('font-size', '16px');  

elem.style.removeProperty('color');  

动态添加样式规则

var style = document.createElement('style');  

style.innerHTML ='body{color:red} #top:hover{background-color: red;color: white;}';  

document.head.appendChild(style);  

window.getComputedStyle

通过 element.sytle.xxx 只能获取到内联样式,借助 window.getComputedStyle 可以获取应用到元素上的所有样式,IE8或更低版本不支持此方法。

getBoundingClientRect

getBoundingClientRect 用来返回元素的大小以及相对于浏览器可视窗口的位置,用法如下:

上一篇下一篇

猜你喜欢

热点阅读