原生JS操作DOM对象

发布于 2015-10-28 22:08 类别: tech

查看节点

访问指定节点的方法:

通过id

getElementById()

<div id="hei">嘿~</div>

例如想获取这个div

var div =  document.getElementById("hei");

直接访问id就可以实现

Alt text

通过name

getElementsByName()

<div name="hei">嘿~</div>

还可以通过name获取

var div =  document.getElementsByName("hei");

Alt text

还请注意这里由于获取的是name,所以是getElementsByName,因为id是唯一的,但name返回的是所有name为指定字符的数组。

通过标签名

getElementsByTagName()

通过标签名获取与通过name一样,返回的是数组,是所有标签名为指定字符的元素。

<div>嘿~</div>

这里不需要指定id或name

var div =  document.getElementsByTagName("div");

直接获取网页上所有div

Alt text

实际开发中通常使用第一种直接通过id访问节点

查看/修改属性节点

修改(设置)

setAttribute("属性名","属性值")

setAttribute的应用场景很多,可以根据需求来设置获取属性,也可以用属性来传递值。

div.setAttribute("new","yoho~");

Alt text

查看

getAttribute("属性名")

var a = div.getAttribute("new");

Alt text

Alt text

根据层次查找节点

如果只希望访问父节点或子节点,又不知道它的id、name、tagname的时候,可以通过寻找层次关系查找节点。

孩子节点

childNodes 以ul为例

    <ul id = "u">
        <li>fir</li>
        <li>sec</li>
        <li>thir</li>
    </ul>

先获取ul节点,在通过它来访问他的孩子节点。

        var ul = document.getElementById("u");
        var liList = ul.childNodes;
        alert(liList);

返回的是对象数组,即父亲节点下所有的孩子节点,可以用遍历数组的方式遍历它所有的孩子。

Alt text

Alt text

父亲节点

parentNode

        var ul = document.getElementById("u");
        //liList[0]是指liList的第一个孩子
        var parent = liList[0].parentNode;
        alert(parent == ul?"ul是父亲节点":"不是父亲节点");

Alt text

创建和增加节点

创建节点

createElement("标签名")

增加节点

appendChild(变量名)

插入节点包括创建和增加两部分,先用creatElement创建出节点,再用appendChild插入到父亲节点下。

        var ul = document.getElementById("u");
        var four = document.createElement("li");
        four.innerHTML = "我是创建出来滴~";
        ul.appendChild(four);

Alt text

删除节点

removeChild() 先找到要删除的节点和它的父节点,在父节点的角度删除子节点。

        ul.removeChild(liList[1]);

Alt text

其中的text节点是空格,因为HTML格式如下: Alt text 浏览器会把空格识别成dom的文本对象

浏览器执行HTML代码创建节点的过程

  • 浏览器在执行html代码的时候,首先将html代码解析成为一个DOM树
  • 浏览器会根据DOM树的结构创建相关的节点对象。每个节点对象都包含属性和接口。节点对象之间存在父子关系。
  • 浏览器会为DOM树创建一个根节点称作文档节点。文档节点可以访问整棵DOM树。
  • 浏览器通过DOM树的各个节点对象的属性来布局,这样才能显示出一个精美的html页面来。
  • 页面显示后,通过在页面上配置事件来执行对应的javascript函数,在javascript中调用文档树节点的API接口,来实现网页的动态效果。

DOM 与 html DOM的关系

  • DOM 用于遍历或修改各种结构化的文档,html也是这种结构化的文档。
  • 各浏览器的供应商都遵循DOM的标准接口,提供API(例如增删改查html文档上的元素)
  • 但是DOM的标准接口应用在html上,不能全部满足开发者的需求,或使用起来不方便。因此各浏览器厂商又针对html的各个标签做了单独的封装,扩充了API,扩充的部分可以称为html dom 或DHTML。
  • 所以如果采用DOM接口进行开发,效率低,但是各浏览器兼容,使用html dom效率高,但是程序不兼容。

html 遵照XML的编写格式,但是自身包含有语义的标签,不同标签有各自的使用场景,虽然使用DOM接口可以完成编程,但是增大了实现难度,于是w3c组织公布了HTML DOM 规范,该规范中明确了每一个html元素的接口和属性,浏览器厂商也都按照此规范进行浏览器的开发(基本上可以兼容),但该规范却不能应用于其他的xml文档解析。