您的位置:首页 > Web前端 > JavaScript

[js]DOM 篇

2016-06-17 11:31 295 查看
  • DOM 是 JavaScript 操作网页的接口,全称为“文档对象模型”(Document Object Model)。它的作用是将网页转为一个 JavaScript 对象,从而可以用脚本进行各种操作
  • 浏览器会根据 DOM 模型,将结构化文档(比如 HTML 和 XML)解析成一系列的节点,再由这些节点组成一个树状结构(DOM Tree)。所有的节点和最终的树状结构,都有规范的对外接口

一、节点

  • DOM 的最小组成单位叫做节点(node)。文档的树形结构(DOM 树),就是由各种不同类型的节点组成。每个节点可以看作是文档树的一片叶子
  • 浏览器提供一个原生的节点对象
    Node
    ,上面这七种节点都继承了
    Node
    ,因此具有一些共同的属性和方法
  • Document
    :整个文档树的顶层节点
  • DocumentType
    doctype
    标签(比如
    <!DOCTYPE html>
  • Element
    :网页的各种HTML标签(比如
    <body>
    <a>
    等)
  • Attribute
    :网页元素的属性(比如
    class="right"
  • Text
    :标签之间或标签包含的文本
  • Comment
    :注释
  • DocumentFragment
    :文档的片段

2、检测节点类型:node.nodeType  

 

  • 文档节点(document):9,对应常量
    Node.DOCUMENT_NODE
  • 元素节点(element):1,对应常量
    Node.ELEMENT_NODE
  • 属性节点(attr):2,对应常量
    Node.ATTRIBUTE_NODE
  • 文本节点(text):3,对应常量
    Node.TEXT_NODE
  • 文档片断节点(DocumentFragment):11,对应常量
    Node.DOCUMENT_FRAGMENT_NODE
  • 文档类型节点(DocumentType):10,对应常量
    Node.DOCUMENT_TYPE_NODE
  • 注释节点(Comment):8,对应常量
    Node.COMMENT_NODE

3、node.
nodeName
属性返回节点的名称 

  • 文档节点(document):
    #document
  • 元素节点(element):大写的标签名
  • 属性节点(attr):属性的名称
  • 文本节点(text):
    #text
  • 文档片断节点(DocumentFragment):
    #document-fragment
  • 文档类型节点(DocumentType):文档的类型
  • 注释节点(Comment):
    #comment
// HTML 代码如下
// <div id="d1">hello world</div>
var div = document.getElementById('d1');
div.nodeName // "DIV"

 

4、node.
nodeValue
属性返回一个字符串,表示当前节点本身的文本值,该属性可读写

  只有文本节点(text)和注释节点(comment)有文本值,因此这两类节点的

nodeValue
可以返回结果,其他类型的节点一律返回
null
。同样的,也只有这两类节点可以设置
nodeValue
属性的值,其他类型的节点设置无效。

// HTML 代码如下
// <div id="d1">hello world</div>
var div = document.getElementById('d1');
div.nodeValue // null
div.firstChild.nodeValue // "hello world"

 

 

div
是元素节点,
nodeValue
属性返回
null
div.firstChild
是文本节点,所以可以返回文本值。

5、Node.textContent属性返回当前节点和它的所有后代节点的文本内容。

 

 

 

 

二、使用DOM获取元素(Element对象)

1.通过名称类型访问节点

(1)getElementById();

(2)getElementsByTagName();

2.利用父子关系查询节点

(1).ChildNodes //获取全部子节点数组(在Firefox chrome ie9中会包含文本节点)

(2).children //只选择标签节点的子元素

(3).parentNode  //父节点

(4).offsetNode  //绝对定位的父节点

(5).hasChildnNodes()  //判断是否有子节点 返回布尔值

(6).firstChild  //第一个子节点  (在Firefox chrome ie9中会包含文本节点)

(7).lastChild //最后一个子节点  (在Firefox chrome ie9中会包含文本节点)

3.利用兄弟关系访问节点

(1).nextSibling

(2).previousSibling

兼容性:在Firefox、chrome等浏览器中会包含文本节点(空节点)

(兼容处理nextSibing)

function(node)
{
var tempLast=node.parentNode.lastChild;
if(node==tempLast)
return null;
var tempObj=node.nextbiSing;
while(tempObj.nodeType !=1 && tempObj!=tempLast)
tempObj=tempObj.nextSibling;
return (tempObj.nodeType==1)?tempObj;null;
}

三、获取节点属性

(1)gitAttribute(属性名);  //获取属性值

(2)setAttribute(属性名,属性值);  //设置属性值

(3)removeAttribute(属性名);  //删除属性值

四、创建和添加节点

1、创建节点

(1)createElement("标签名");

(2)createTextNode("文本内容");

(3)createDocumentTragment();

2、添加节点

appendChild(nodename);  //添加子节点//默认插入到末尾//动作删除创建位置,插入到新位置

3、删除节点

removeChild(nodename);  //找的父元素删除。。。。 x.parentNode.removeChild(x); 

4、替换节点

replaceChild(newNode,oldNode);  //查找父元素替换。。。 x.parentNode.replaceChild(oNewP,oOldP); 

5、在特定节点前插入

insertBefore(newNode,targetNode);  

6、在特定节点后插入

function insertAfter(newElement,targetElement)
{
if(oParent.lastChild==targetElement)
oParent.appendChild(newElement);
else
oParent.insertBefore(newElement,targetElement.nextSibling);
}

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: