04.DOM

1. DOM标准

1.1 定义

  1. Document Object Model:文档对象模型 ,是 HTML 和 XML 文档的编程接口。
  2. 定义了访问和处理 HTML 文档的标准方法。是W3C国际组织制定的统一标准。
  3. DOM 以树结构表达 HTML 文档。

1.2 分类

  • 核心 DOM - 针对任何结构化文档的标准模型
  • XML DOM - 针对 XML 文档的标准模型
    XML DOM 定义了所有 XML 元素的*对象*和*属性*,以及访问它们的*方法*。
  • HTML DOM - 针对 HTML 文档的标准模型
    HTML DOM 定义了所有 HTML 元素的*对象*和*属性*,以及访问它们的*方法*。换言之,HTML DOM 是关于如何获取、修改、添加或删除 HTML 元素的标准。

2. 节点(Node)

在 HTML DOM 中,所有事物都是节点。HTML文档是由DOM节点构成的集合。

2.1 节点的分类

  • 文档节点(Document):DOM标准将整个HTML文档的相关信息封装后得到的对象。
  • 元素节点(Element):DOM标准将HTML标签的相关信息封装后得到的对象。
  • 属性节点(Attribute):DOM标准将HTML标签属性的相关信息封装后得到的对象。
  • 文本节点(Text):DOM标准将HTML文本的相关信息封装后得到的对象。

2.2 节点的方法和属性

DOM方法是您能够执行的动作(比如添加或修改元素)。
DOM属性是您能够获取或设置的值(比如节点的名称或内容)。

  • nodeName: 代表当前节点的名字

    nodeName 是只读的
    元素节点的 nodeName 与标签名相同
    属性节点的 nodeName 与属性名相同
    文本节点的 nodeName 始终是 #text
    文档节点的 nodeName 始终是 #document
    
  • nodeType:返回一个整数, 这个数值代表着给定节点的类型,只读属性。

    1 -- 元素节点    2 -- 属性节点    3 -- 文本节点
    
  • nodeValue:返回给定节点的当前值(字符串),可读写的属性。

    元素节点, 返回值是 null
    属性节点: 返回值是这个属性的值
    文本节点: 返回值是这个文本节点的内容
    

    节点属性关系图

2.3 常用方法和属性

一些常用的 HTML DOM 方法:

  • getElementById(id) - 获取带有指定 id 的节点(元素)
  • appendChild(node) - 插入新的子节点(元素)
  • removeChild(node) - 删除子节点(元素)

一些常用的 HTML DOM 属性:

  • innerHTML - 节点(元素)的文本值
  • parentNode - 节点(元素)的父节点
  • childNodes - 节点(元素)的子节点
  • attributes - 节点(元素)的属性节点

3. DOM树

HTML DOM 将 HTML 文档视作树结构。这种结构被称为节点树

父元素:直接包含当前元素的元素就是当前元素的父元素
子元素:当前元素直接包含的元素就是当前元素的子元素
祖先元素:直接或间接包含当前元素的所有元素都是当前元素的祖先元素
后代元素:当前元素直接或间接包含的元素就是当前元素的后代元素
兄弟元素:有相同父元素的元素是兄弟元素

<html>
  <head>
    <meta charset="utf-8">
    <title>My title</title>
  </head>
  <body>
    <a href="Link.html">My Link</a>
    <h1>My header</h1>
  </body>
</html>

<html> 节点没有父节点;它是根节点
<head> 和 <body> 的父节点是 <html> 节点
文本节点 "My header" 的父节点是 <h1> 节点
<h1> 和 <a> 节点是同胞节点,同时也是 <body> 的子节点
可通过节点的 innerHTML 属性来访问文本节点的值

4. DOM API

可通过 JavaScript (以及其他编程语言)对 HTML DOM 进行访问。
所有 HTML 元素被定义为对象,而编程接口则是对象方法和对象属性。
document对象 是window对象的一个属性,代表当前HTML文档,包含了整个文档的树形结构。
获取document对象的本质方法是:window.document,而“window.”可以省略。

4.1. 元素查询

  • 在整个文档范围内查询元素节点 :
功能 API 返回值
根据Id值查询 document.getElementById(“id值”) 一个具体的元素节点
根据标签名查询 document.getElementsByTagName(“标签名”) 元素节点数组
根据Name属性值查询 document.getElementsByName(“name值”) 元素节点数组
<body>
    <div id="main"> 
        <p id="intro">Hello World!</p>
        <p>这个实例演示了 <b>getElementById</b> 方法!</p>
    </div>
    <script>
        x=document.getElementById("intro");
        document.write("<p>段落的文本为: " + x.innerHTML + "</p>");
    </script>
    <script>
        x=document.getElementById("main").getElementsByTagName("p");
       for (i=0;i<x.length;i++){ 
            document.write(x[i].innerHTML);
            document.write("<br>");
        }
    </script>
</body>

  • 根节点

    document.documentElement - 全部文档
    document.body - 文档的主体

    访问根节点:

    <body>
        <p>Hello World!</p>
        <div>
            <p>DOM 是非常有用的!</p>
            <p>这个实例演示了 <b>document.body</b> 属性。</p>
        </div>
        <script>
            //弹出body的内容
            alert(document.body.innerHTML);
        </script>
    </body>
    
    
  • 在具体元素节点范围内查找子节点

功能 API 返回值
查找全部子节点 element.childNodes 节点数组
查找第一个子节点 element.firstChild 节点对象
查找最后一个子节点 element.lastChild 节点对象
查找指定标签名的子节点 element.getElementsByTagName(“标签名”) 元素节点数组
  • 父节点
功能 API 返回值
查找指定元素节点的父节点 element.parentNode() 节点对象
  • 查找指定元素的兄弟节点
功能 API 返回值
查找前一个兄弟节点 node.previousSibling 节点对象
查找后一个兄弟节点 node.nextSibling 节点对象
<body>
    <p id="intro">Hello World!</p>
    <script>
        x=document.getElementById("intro");
        document.write(x.firstChild.nodeValue);
    </script>
</body>

4.2. 属性操作

  1. 读取属性值
    元素对象.属性名
   <script>
    document.getElementById("btn09").onclick = function(){
               //1.获取文本框元素对象
               var inputEle = document.getElementById("username");
               //2.获取文本框的value属性值
               var inputValue = inputEle.value;
               alert(inputValue);
        }; 
   </script>
   <button id="btn09">返回#username的value属性值</button>
  1. 修改属性值
    元素对象.属性名=新的属性值
    <body>
        <script>
            function ChangeBackground()
            {
                document.body.style.backgroundColor="blue";
            }
        </script>
        <input type="button" onclick="ChangeBackground()" value="修改背景颜色" />
      <script>
        document.getElementById("btn10").onclick = function(){
            //1.获取文本框元素对象
            var inputEle = document.getElementById("username");
            //2.设置文本框中的value属性值
            inputEle.value = "New Value";
        };
       </script>
    </body>
    
    

4.3. 文本操作

  1. 读取文本值
  2. 修改文本值

获取元素的内容有两种方式:
- innerHTML
- childNodes 和 nodeValue 属性

//修改文本
<body>
    <p id="p1">Hello world!</p>
    <input type="button" onclick="ChangeText()" value="修改文本" />
    <script>
    function ChangeText()
    {
        document.getElementById("p1").innerHTML="Hello Runoob!";
    }
    </script>
//获取内容    
    <script>
        txt=document.getElementById("p1").childNodes[0].nodeValue;
        document.write(txt);
    </script>
</body>

4.4 元素增删改

API 功能
document.createElement(“标签名”) 创建元素节点并返回,但不会自动添加到文档中
document.createTextNode(“文本值”) 创建文本节点并返回,但不会自动添加到文档中
element.appendChild(ele) 将ele添加到element所有子节点后面
parentEle.insertBefore(newEle,targetEle) 将newEle插入到targetEle前面
parentEle.replaceChild(newEle, oldEle) 用新节点替换原有的旧子节点
parentEle.removeChild(childNode) 删除指定的子节点
element.innerHTML 读写HTML代码
  • 创建新元素

    <body>
        <div id="div1">
            <p id="p1">这是一个段落。</p>
            <p id="p2">这是另一个段落。</p>
        </div>
        <script>
            //创建了新的 <p> 元素:
            var para=document.createElement("p");
            //创建新的文本节点
            var node=document.createTextNode("这是一个新段落。");
            //向 <p> 元素追加文本节点
            para.appendChild(node);
            //向已有元素追加这个新元素
            var element=document.getElementById("div1");
            //将新元素作为父元素的最后一个子元素进行添加
            element.appendChild(para);
    
            //insertBefore()
            //var child=document.getElementById("p1");
            //element.insertBefore(para,child);
    
        </script> 
    </body>
    
    
  • 删除已有元素

    <body>
    
        <div id="div1">
            <p id="p1">这是一个段落。</p>
            <p id="p2">这是另一个段落。</p>
        </div>
        <script>
            var parent=document.getElementById("div1");
            var child=document.getElementById("p1");
            parent.removeChild(child);
    
            //找到您需要删除的子元素,然后使用 parentNode 属性来查找其父元素:
            //var child=document.getElementById("p1");
            //child.parentNode.removeChild(child);
    
        </script>
    
    </body>
    
    
  • 替换HTML元素

    <body>
    
        <div id="div1">
            <p id="p1">这是一个段落。</p>
            <p id="p2">这是另外一个段落。</p>
        </div>
    
        <script>
            var parent=document.getElementById("div1");
            var child=document.getElementById("p1");
            var para=document.createElement("p");
            var node=document.createTextNode("这是一个新的段落。");
            para.appendChild(node);
            parent.replaceChild(para,child);
        </script>
    
    </body>
    
    

5. DOM事件

HTML DOM 允许 JavaScript 对 HTML 事件作出反应。

HTML 事件的例子:

  • 当用户点击鼠标时
  • 当网页已加载时
  • 当图片已加载时
  • 当鼠标移动到元素上时
  • 当输入字段被改变时
  • 当 HTML 表单被提交时
  • 当用户触发按键时
<body>
    <p>点击按钮执行 <em>displayDate()</em> 函数。</p>
    <button id="myBtn">点我</button>
    <script>
        //名为 displayDate 的函数被分配给了 id=myButn" 的 HTML 元素。
        //当按钮被点击时,将执行函数。
        document.getElementById("myBtn").onclick=function(){displayDate()};
        function displayDate(){
                document.getElementById("demo").innerHTML=Date();
        }
    </script>
    <p id="demo"></p>
</body>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • HTML DOM 定义了访问和操作 HTML 文档的标准。 什么是 HTML DOM? HTML DOM 是: H...
    亮亮叔家的小笔笔阅读 4,994评论 1 5
  •   DOM(文档对象模型)是针对 HTML 和 XML 文档的一个 API(应用程序编程接口)。   DOM 描绘...
    霜天晓阅读 3,726评论 0 7
  • 常见Dom操作有哪些? it-修真院小课堂 目录 1.背景介绍 2.知识剖析 3.常见问题 4.解决方案 5.编码...
    冷眸_c6b8阅读 812评论 0 0
  • 通过 HTML DOM,可访问 JavaScript HTML 文档的所有元素。 HTML DOM (文档对象模型...
    圣贤与无赖阅读 419评论 0 3
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,879评论 1 45