DOM节点类型

DOM(文档对象模型)是针对HTML和XML文档的一个API,可将HTML/XML文档描绘成多层节点组成的结构:文档节点是每个文档的根节点。总共有12种节点类型,继承与同一个基类型(Node类型,IE不可以访问到Node类型)

//用nodeType属性表示节点类型
Node.ELEMENT_NODE(1);//元素节点
Node.ATTRIBUTE_NODE(2);//属性节点
Node.TEXT_NODE(3);//文本节点
Node.CDATA_SECTION_NODE(4);//用于XML的,表示CDATA域
Node.ENTITY_REFERENCE_NODE(5);//实体引用
Node.ENTITY_NODE(6);//实体
Node.PROCESSING_INSTRUCTION_NODE(7);//处理指令
Node.COMMENT_NODE(8);//注释节点
Node.DOCUMENT_NODE(9);//文档节点
Node.DOCUMENT_TYPE_NODE(10);//文档类型节点
Node.DOCUMENT_FRAGMENT_NODE(11);//
Node.NOTATION_NODE(12);

可通过nodeName/nodeValue获取节点名称和类型

if(someNode.nodeType == 1) {
   value = someNode.nodeName;
}

其中每个节点之间的关系如下:每个节点都有一个childNode属性,保存着一个NodeList对象(类数组,动态变化的),所有节点有一个ownerDocument指向文档的文档节点

对节点的子节点的操作可有以下:

appendChild():向childNodes列表末尾添加新节点,任何DOM节点不能同时出现在文档的多个位置上。

insertBefore()、replaceChild()、removeChild()

每个节点都有的方法:

cloneChild():参数true表示深复制、false表示浅复制

normalize():处理文本文档树的文本节点

Document类型:

document对象是HTMLDocument(继承自Document类型)的一个实例。

所有浏览器支持document.documentElement(指向html)和document.body(指向body)属性,Document还有一个可能的子节点是DocumentType(<!DOCTYPE>),不同浏览器对document.doctype和注释的处理不同。

可以通过document.title/document.URL/document.domain(通过改变这个可以是不同域的文档通信)获取文档信息。

查找元素方法:getElementById(id)/getElementByTagName(tag_name)/getElementByName(name)

Element类型:

提供对元素标签名、子节点及特性的访问。

通过nodeName或者tagName可以访问元素类型

var element = document.getElementById("myElement");
if(element.tagName.toLowerCase() == "div") {
//.....
}

所有HTML元素都是由HTMLElement或者更具体的子类型来表示的,可以直接访问和修改element的属性:id、title、lang、dir、className(css样式类)等等,也可以通过getAttribute()、setAttribute()、removeAttribute()方法操作特性。(在其他浏览器中不适用setAttribute()方法添加自定义属性不会成为元素的特性,而在IE中可以)。

Element类型有attributes属性,里面包含了一个NamedNodeMap(动态集合),有getNamedItem(name)、removeNamedItem(name)、setNamedItem(node)、item(pos)等方法:

//获取元素的id特性的两中表示方法
var id = element.attributes.getNamedItem("id").nodeValue;
var id = element.attributes["id"].nodeValue;

可使用document。createElement()创建新元素,参数可以是元素标签名,也可以是html片段

var div = document.createElement("div");
div.id = "myNewDiv";
//或者如下
var div = document.createElement("<div id=\"myNewDiv\"></div>";

Text类型:

表示纯文本内容。有如下方法:

appendData(text)

deleteData(offset,count)

insertData(offset,text)

replaceData(offset,count,text)

splitText(offset):将文档分成两部分

subStringData(offset,count)

normalize():用于规范化文本节点,不能存在相邻的文本节点,用normalize()合并节点

DocumentFragment类型:

文档片段节点可以当作一个仓库来使用,用于存放可能添加到文档中的节点,在文档中不占据位置

//先定义一个整体的fragment,一次性添加三个li,防止多次渲染
var fragment = document.createDocumentFragment();
var ul = document.getElementById("myList");
var li = null;
for(var i = 0;i<3;i++) {
    li = document.createElement("li");
    li.appendChild(document.createTextNode("Item"+(i+1)));
    fragment.appendChild(li);
}
ul.appendChild(fragment);

 

转载于:https://my.oschina.net/u/3804999/blog/1807866

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值