一、什么是DOM

DOM全称是document object model(文档对象模型)。在网页上,组织页面(或文档)的对象被组织在一个树形结构中,用来表示文档中对象的标准模型就称为DOM。通俗的说DOM其实就是针对HTML和XML文档的一个API接口,用于操作HTML/XML。

W3C DOM 标准被分为 3 个不同的部分:
  • 核心 DOM - 针对任何结构化文档的标准模型
  • XML DOM - 针对 XML 文档的标准模型
  • HTML DOM - 针对 HTML 文档的标准模型

二、DOM节点

注意:DOM树的根统一为文档根—document),DOM既然是树状结构,那么他们自然有如下的几种关系:

  • 根结点(document)
  • 父结点(parentNode)
  • 子结点(childNodes)
  • 兄弟结点(sibling)

为了更好的理解各种节点,我们来构造一个简单的页面结构,如下代码。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <ul>
        <li></li>
        <li></li>
        <li></li>
    </ul>
</body>
</html>

在上面这段代码中,我们很容易看出:

  1. ul为li的父结点(parentNode)
  2. li为ul的子结点(childNodes)
  3. 各个li为其他li的兄弟结点(sibling)

三、常见节点类型

1、DOCUMENT_NODE 

(document)文档根结点类型,该枚举型的值是9.

2、ELEMENT_NODE 

(element)元素结点类型,该枚举型的值是1。上文中的html, body, div这些结点都是属于该类型。

3、TEXT_NODE (text)文本结点类型,该枚举型的值是3。 (注:一个空格也就可能是一个文本结点) 

四、DOM操作

1.创建元素

 document.createElement()

使用document.createElement()可以创建新元素。这个方法只接受一个参数,即要创建元素的标签名。这个标签名在HTML文档中不区分大小写,在XHTML中区分大小写。


为了理解document.createElement的用法,我们创建一个简单的网页,当我们在文本框输入内容之后,点击按钮创建节点的按钮的时候会创建一个li
并把文本框的内容赋给li
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script>
        window.onload=function(){
            var oBtn=document.getElementById('btn1');
            var oUl=document.getElementById('ul1');
            var otext=document.getElementById('text1');
            oBtn.onclick=function(){
                var oLi=document.createElement("li");
                oLi.innerHTML=otext.value;
            }
        }
    </script>
</head>
<body>
    <input type="text" id='text1'>
    <input type="button" id='btn1'   value="创建节点">
    <ul id='ul1'>

    </ul>
</body>
</html>

运行程序我们会发现,新创建的元素并不会自动添加到文档树中,要添加到文档树,还需要结合appendChild()、insertBefore()、replaceChild()进行操作(后面会讲到)

2.插入元素

 appendChild()

appendChild()用于向childNodes列表的末尾添加一个节点,并且返回这个新增的节点。如果传入到appendChild()里的节点已经是文档的一部分了,那结果就是将节点从原来的位置转移到新位置,任何一个节点不能同时出现在文档中的多个位置。

如下代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script>
        window.onload=function(){
            var oBtn=document.getElementById('btn1');
            var oUl=document.getElementById('ul1');
            var otext=document.getElementById('text1');
            oBtn.onclick=function(){
                var oLi=document.createElement("li");
                oLi.innerHTML=otext.value;
                oUl.appendChild(oLi);
            }
        }
    </script>
</head>
<body>
    <input type="text" id='text1'>
    <input type="button" id='btn1'   value="创建节点">
    <ul id='ul1'>

    </ul>
</body>
</html>

运行程序我们会发现,当点击创建节点后,会往ul里面添加一个li,而且每次都是在li的后面添加

insetBefore(newItem,existingItem)

insetBefore()可以将节点插入到某个特定的位置。这个方法接受两个参数:要插入的节点和作为参照的节点。
插入节点后,被插入的节点变成参照节点的前一个同胞节点,同时被方法返回。 如果参照节点是null,则与appendChild()执行相同的操作。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script>
        window.onload=function(){
            var oBtn=document.getElementById('btn1');
            var oUl=document.getElementById('ul1');
            var otext=document.getElementById('text1');
            oBtn.onclick=function(){
                var oLi=document.createElement("li");
                var aLi=document.getElementsByTagName('li');
                oLi.innerHTML=otext.value;
                oUl.insertBefore(oLi,aLi[]);

            }
        }
    </script>
</head>
<body>
    <input type="text" id='text1'>
    <input type="button" id='btn1'   value="创建节点">
    <ul id='ul1'>
        <li></li>
    </ul>
</body>
</html>

注意:如果ul里面原本是没有节点的 则需要做判断,然后再插入,如下代码

    <script>
        window.onload=function(){
            var oBtn=document.getElementById('btn1');
            var oUl=document.getElementById('ul1');
            var otext=document.getElementById('text1');
            oBtn.onclick=function(){
                var oLi=document.createElement("li");
                var aLi=document.getElementsByTagName('li');
                oLi.innerHTML=otext.value;
                if(aLi.length>0){
                    oUl.insertBefore(oLi,aLi[0]);
                }else{
                    oUl.appendChild(oLi);
                }

            }
        }
    </script>

3、删除结点

removeChild()

该方法移除节点,接受一个参数,即要移除的节点,同时该方法返回被移除的节点。只能是一个节点,不能是一组节点。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script>
        window.onload=function(){
            var aA=document.getElementsByTagName('a');
            var oUl=document.getElementById('ul1');
            for(var i=0;i<aA.length;i++){
                aA[i].onclick=function(){
                    oUl.removeChild(this.parentNode);
                }
            }
        }
    </script>
</head>
<body>
    <ul id='ul1'>
        <li>2222 <a href="#">删除</a></li>
        <li>333 <a href="#">删除</a></li>
        <li>4444<a href="#">删除</a></li>
        <li>45555<a href="#">删除</a></li>
    </ul>
</body>
</html>

 暂时就这么多,如果有补充,后面再更新。。。。。。。。。。。。。。。。。。

JavaScript笔记:DOM基础的更多相关文章

  1. 从头开始学JavaScript 笔记(一)——基础中的基础

    原文:从头开始学JavaScript 笔记(一)--基础中的基础 概要:javascript的组成. 各个组成部分的作用 . 一.javascript的组成   javascript   ECMASc ...

  2. Javascript DOM 编程艺术(第二版)读书笔记——DOM基础

    1.DOM是什么 D=document(文档) O=object(对象) M=Model(模型) DOM又称节点树 一些术语: parent(父)   child(子)   sibling(兄弟)   ...

  3. js笔记-DOM基础

    DoM 浏览器支持: IE: 10% FF: 99% Chrome: 60% childNotes不兼容 在Chrome和IE9中会将文本节点也算作childNotes,而在IE6-8中childNo ...

  4. JavaScript笔记——DOM的操作

    节点及其类型 在JavaScript中,节点分为三种: 元素节点:HTML标签元素. 属性节点: 元素的属性, 可以直接通过属性的方式来操作. 文本节点: 是元素节点的子节点, 其内容为文本. 在什么 ...

  5. JavaScript 笔记(1) -- 基础 & 函数 & 循环 & ...

    目录(代码编写): 显示数据 语法 变量 & 变量类型 对象 函数 事件 字符串 运算符 条件语句 循环语句 Break 和 Continue 使用 JS 近两年,现整理下一些基本: HTML ...

  6. JavaScript之DOM基础

    概述 DOM(Document Object Model)文档对象模型,针对Html和XML的文档的对象API,是一项 W3C (World Wide Web Consortium) 标准.文档对象模 ...

  7. javascript中DOM基础知识介绍

    1.1.     基本概念 1.1.1.      DOM DOM Document Object Model 文档对象模型 就是把HTML文档模型化,当作对象来处理 DOM提供的一系列属性和方法可以 ...

  8. javascript笔记---算法基础学习

  9. JavaScript DOM基础总结

    上个月在进行百度三面时候,面试官提问JavaScript DOM方法,我回答的有点少,前面太关注JavaScript 兼容性,框架方面,JavaScript 原生DOM基础没有记牢,心中有点遗憾.下来 ...

随机推荐

  1. 绑定hosts

    测试过程中需绑定hosts.将测试环境IP绑定域名,输入域名即可连接到测试环境. 1  hosts文件地址:C:\WINDOWS\system32\drivers\etc 2  用记事本打开hosts ...

  2. Css学习笔记 (一)

    这几天写了点CSS,大概总结一下,很凌乱,只是加深一下自己的认识. background-position background-position是以容器的左上角为0,0定位,支持(left,righ ...

  3. 高通CP Crash分析调试

    1. 转换tlcore文件 获取 EBICS0.BIN tl2elf --qconly tlcore 2.使用T32 命令把Riva的dump信息从EBICS0文件分离出来 data.load.BIN ...

  4. Python 入门指南

    Release: 3.4 Date: March 29, 2014 Python 是一门简单易学且功能强大的编程语言. 它拥有高效的高级数据结构,并且能够用简单而又高效的方式进行面向对象编程. Pyt ...

  5. Python12期培训班-day1-三级菜单代码分享

    #!/usr/bin/env python3 import sys import os zonecode = { '广东省': {'广州市':['越秀区','海珠区','荔湾区','天河区'], '深 ...

  6. bigworld源码分析(3)——dbMgr分析

    dbMgr主要是玩家数据的读取和保存的,例如在bigworld源码分析(3)中,玩家在认证的时候,loginApp需要通过dbMgr来验证玩家数据是否合法,这就是针对玩家的账号数据进行查询.本篇中,我 ...

  7. java中set的交集、差集、并集的简单实现

    实现思路很简单,直接上代码: package test; import java.util.HashSet; import java.util.Set; public class Test { pub ...

  8. springmvc工作原理以及源码分析(基于spring3.1.0)

    springmvc是一个基于spring的web框架.本篇文章对它的工作原理以及源码进行深入分析. 一.springmvc请求处理流程 二.springmvc的工作机制 三.springmvc核心源码 ...

  9. Kubuntu 使用YaH3C进行中大校园网认证

    之前都是用路由器连网线上网,我也没注意到inode校园网客户端在linux上的问题.直到前两天把路由器给搞残废了,只能默默的找办法装inode.根据学校网络中心给的教程,在kubuntu上尝试安装in ...

  10. 图片加载完后执行js

    <script>            window.onload=function(){                          var liwidth = $('.imgul ...