JavaScript的document对象是指文档对象模型,主要是处理网页内容。DOM(Document Object Model)即文档对象模型,是针对 HTML 和 XML 文档的 API 。字母D指document(文档),字母O指object(对象),字母指Model(模型)。DOM 描绘了一个层次化的节点树。节点表示一个连接点,文档是由节点构成的集合,DOM的节点主要分为三类:元素节点、文本节点(不是文本内容)、属性节点。
获取节点的名称和类型
1.nodeName属性用来获取节点的名称,文本节点返回#text,元素节点返回标签名称(此时等价于tagName)。语法:目标节点.nodeName
2.nodeType属性用来获取节点的类型,元素节点:1,属性节点:2,文本节点:3。语法:目标节点.nodeType
3.nodeValue属性用来获取和设置节点的值。元素节点返回 null 。语法:目标节点.nodeValue
获取元素节点的方式
1. document.getElementById
通过ID查找,返回唯一元素节点
2. document.getElementsByName
通过name属性查找,返回元素节点数组
3. document.getElementsByTagName
通过标签名称查找,返回元素节点数组
以下三种方法属于HTML5 DOM,并非所有浏览器支持(如某些低版本IE就不支持),属于高级方法
4. document.getElementsByClassName
通过class属性的类名查找,返回元素节点数组
5. document.querySelector
通过selector条件获取元素节点,只返回符合条件的第一个元素节点
6. document.querySelectorAll
通过selector条件获取元素节点,返回所有符合条件的元素节点数组,多条件使用逗号分隔,表示要查找的元素必须符合所有逗号分隔的条件,如果一个元素只符合逗号分隔的条件中的一个,则不会被返回
小结: getElementById和querySelector只返回一个元素节点,而getElementsByName、getElementsByTagName、getElementsByClassName、querySelectorAll返回的是元素节点数组
节点指针
1.childNodes属性用来获取元素节点的子节点,返回节点数组。语法:父节点.childNodes;
2.children属性可以用来获取忽略了空白节点的有效节点(在某些浏览器上,空白符或换行符也是一个文本节点)。语法:父节点.children;
3.firstChild属性可以用来获取元素的第一个子节点,等价于 childNodes[0]。语法:父节点.firstChild;
3.lastChild属性可以用来获取元素的最后一个子节点,等价于 childNodes[childNodes.length-1]。语法:父节点.lastChild;
4.previousSibling属性用来获取目标节点的前一个兄弟节点。语法:目标节点.previousSibling;
5.nextSibling属性用来获取目标节点的后一个兄弟节点。语法:目标节点.nextSibling;
6.parentNode属性用来获取已知节点的父节点。语法:子节点.parentNode;
7.ownerDocument属性用来当前节点所在文档的根节点,等价于document。语法:目标节点.ownerDocument;
节点的操作
1.createElement方法用来创建元素节点。语法:document.createElement('元素标签名称');
2.createAttribute方法用来创建属性节点。语法:document.createAttribute('属性名称');
3.createTextNode方法用来创建文本节点。语法:document.createTextNode('文本内容');
4.appendChild方法用来在目标节点的子节点的末尾添加一个子节点(可以是createElement创建的元素节点,也可以是createTextNode创建的文本节点)。语法:parent.appendChild(要插入的节点);
5.insertBefore方法用来在目标元素的前面插入一个新元素节点,此时的指针在目标元素的父级上。语法:parent.insertBefore(newElement,targetElement);
6.DOM中没有insertAfter这个方法,但是可以通过以下方法来模拟insertAfter;
/* * newElement : 要插入的新元素 * targetElement : 目标元素 */ function insertAfter(newElement,targetElement){ var parent = targetElement.parentNode; if(parent.lastChild == targetElement){ /* 如果目标元素是parent的最后一个子元素,则把新元素追加到parent元素上, 也就是在parent的子元素的末尾位置添加新元素 */ parent.appendChild(newElement); }else{ /* 否则,就把新元素添加到目标元素和目标元素的下一个兄弟元素之间 */ parent.insertBefore(newElement,targetElement.nextSibling); } }
7.replaceChild方法用来替换一个元素节点,此时的指针在目标元素的父级上。语法:parent.replaceChild(replaceElement,targetElement);