3月18日

DOM和DOM节点

1.DOM

DOM是Javascript操作网页的接口,全称叫文档对象模型(Document Object Model)。它的作用是将网页转化为一个Javascript对象,从而用Javascript脚本进行各种操作(比如增删元素等)。

2.DOM节点

DOM的最小组成单位就是节点(node)。DOM树就是由不同类型的节点组成。每个节点可以看成是DOM树上的叶子。
在DOM中,节点的类型一共有7种

  • Document:整个文档树的顶层节点;
  • DocumentType:dotype标签比如:<!DOCTYPE html>
  • Element:网页的各种HTML标签比如:<body> <h> <a> <div>
  • Attribute:网页元素的属性比如:id=”id” class=”class” type=”text”
  • Text:标签之间或标签包含的文本
  • Comment:注释
  • DocumentFragment:文档片段

3.节点树

一个文档的所有节点,按照所在的层次,可以抽象成一个树状结构。这种树状结构就是DOM。
最顶层的节点就是document类型的节点,它代表了整个文档。文档里面最高一层的HTML标签,一般是<html>,它构成树结构的根节点(root node),其他的Html标签都是它的下级。

除了根节点,其他节点对于周围的几点都存在3种关系

  • 父节点关系(parentNode):直接的那个上级节点
  • 子节点关系(childNodes):直接的下级节点
  • 同级节点关系(sibling):拥有同一父节点的节点
    DOM提供操作接口,用来获取三种关系的节点。
    获取子节点:firstChild(第一个子节点)lastChild(最后一个子节点)等
    获取同级别:nextSibling(紧邻在后的同级节点)和previousSibling(紧邻在前的同级节点)

    特征相关属性

    所有的节点对象我们都可以理解为浏览器内置的node对象的实例。

    1.Node.nodeName和Node.nodeType

    console.log("document.nodeName=" + document.nodeName); // #document
    console.log("document.nodeType=" + document.nodeType); // 9 
    

    2.Node.nodeValue

    返回是一个字符串,表示当前节点本身的文本值,该属性可读写。
    由于只有Text节点、Comment节点和xml文档的CDATA节点有文本值,因此只有这三类节点有nodeValue,其他节点一律返回null。

    注意,这里需要特别注意的是,Text节点代表的是元素或属性中的文本内容。

    console.log("p.nodeValue=" + document.getElementById("_p").nodeValue); //null
    

    3.Node.textContent

    返回当前节点和它的后代节点的文本内容,该属性是可读写的。

    console.log("p.textContent=" + document.getElementById("_p").textContent); // hello,world
    document.getElementById("_p").textContent = "hello, <span color='red'>nantong!</span>";
    // hello, <span color='red'>nantong!</span>
    
    

    上面代码在插入文本时,会将标签解释为文本,而不会当做标签去处理。

    4.Node.nextSibling

    返回紧跟在当前节点后面的一个同级节点。如果没有找到返回null。

    注意:该属性还包括文本节点。因此如果当前节点后面有空格,该属性返回一个文本节点,内容为空格。

    var _pb = document.getElementById("_p").nextSibling;
    console.log(_pb.textContent); // 空格
    

    5.Node.previousSibling

    返回当前节点前面的,距离最新的一个同级节点。

    6.Node.parentNode

    返回当前节点的父节点。父节点只可能包括三种类型:element节点、document节点、documentfragment节点

    7.Node.parentElement

    返回当前节点的父element节点。不是W3C标准,仅支持IE。

    8.childNodes

    返回一个nodelist集合,成员包括当前节点的所有子节点。

    注意:除了Html元素节点,还包括Text节点和Comment节点。如果当前节点不包含任何子节点,则返回一个空的nodelist集合。

    Html:
    <div id="_asia">
    	<span id="_china">China</span>
    	<!-- xxxx -->
    	<span id="_korea">Korea</span>
    	<span id="_japan">Japan</span>
    </div>
    var _asia = document.getElementById("_asia");
    var _asias = _asia.childNodes;
    console.log(_asias);
    

    9.Node.firstChild/lastChild

    返回当前节点的第一个或者最后一个子节点。如果没有找到返回null。

  • 节点对象的方法

    Node.appendChild()

    接收一个对象节点作为参数,将其作为最后一个节点,插入当前节点。

    var addCountry = function() {
       var cinput = document.getElementById("country");
       var cvalue = cinput.value;
       var cli = "<li id='" + cvalue + "'>" + cvalue + "</li>";
       var culInnerHtml = document.getElementById("_asia").innerHTML;
        culInnerHtml = culInnerHtml + cli;
        document.getElementById("_asia").innerHTML = culInnerHtml;
    };
    
    var addCountry2 = function() {
        var cinput = document.getElementById("country");
        var cvalue = cinput.value;
    
        var cli = document.createElement("li");
        cli.innerHTML = cvalue;
        document.getElementById("_asia").appendChild(cli);
    };
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值