JavaScript小白入门篇(三、高级语法之 DOM 详解)

嗨小伙伴们
学习了 JavaScript小白入门篇(一、基本语法详解)
JavaScript小白入门篇(二、高级语法之 BOM 详解)
之后,大家已经对JavaScript有了很深的了解了,那接下来我们就来学习JavaScript中的DOM复制

1、概念

2、DOM的三个标准

  • 核心 DOM - 针对任何结构化文档的标准模型
  • XML DOM - 针对 XML 文档的标准模型
  • HTML DOM - 针对 HTML 文档的标准模型

XML DOMHTML DOM是对 核心DOM 的扩展和延伸,我们要学习HTML DOM 就要先学习 核心DOMXML DOM 我们今天先不学习以后再学

3、核心DOM模型

我们主要讲解前三个对象,另外三个了解一下

1、Document: 文档对象

1、创建/获取对象: 跟我们之前讲的差不多,在HTML DOM 模型中可以使用window对象来获取。
(1)、window.document
(2)、document (直接使用)

2、方法讲解 Document 对象的方法有很多,我们拿一些常用的来讲解,分为以下两类 get… create…

(1)、获取Element对象的方法
1.getElementById(): 根据id的属性值来获取元素对象,id就像我们学生在学校的学号一样,一般都是唯一的。

2.getElementsByTagName(): 根据元素的名称来获取元素对象, 调用这个方法返回的是一个数组。

3.getElementsByClassName(): 根据Class属性值来获取元素对象,调用这个方法返回的是一个数组。

4.getElementsByName():根据name属性值来获取元素对象调用这个方法返回的是一个数组。

<body>
    <div id="div1">div1</div>
    <div id="div2">div2</div>
    <div id="div3">div3</div>
    <div class="class1">div4</div>
    <div class="class1">div5</div>
    <input type="text" name="username">
<script>
    var div = document.getElementsByTagName("div");
    var class1 = document.getElementsByClassName("class1");
    var ele_username = document.getElementsByName("username");
    var table = document.createElement("table");
    alert(div);
    alert(class1);
    alert(ele_username);
    alert(table);
</script>

演示结果会弹出四个警告框

(2)、创建其他DOM对象的方法

  1. createAttribute( name ) 创建属性对象。
  2. createComment( ) 创建注释对象。
  3. createElement( ) 创建…
  4. createTextNode( ) 创建…

小伙伴们可以自己进行创建其他DOM对象喔

2、 Element: 元素对象

1.创建/获取对象
根据上面我们了解到,可以通过Document文档对象来创建和获取Element对象
createElement( ) 、getElementById( )方法

2.方法
我们先介绍2个常见的方法,还有些方法下面在Node节点再介绍

  1. removeAttribute():删除属性
  2. setAttribute():设置属性
<body>
<input type="button" value="设置标签" id="btn1"> 
<!--设置按钮-->
<a>我是超链接</a>
<input type="button" value="取消标签" id="btn2">
<script>  <!--取消按钮-->
    var btn1 = document.getElementById("btn1");
    btn1.onclick = function () {
        var tagName_a = document.getElementsByTagName("a")[0]; //返回的是一个数组,所以用[0] 来获取对象
        tagName_a.setAttribute("href","https://www.baidu.com"); //设置href属性 属性值为百度网址
    }
    var btn2 = document.getElementById("btn2");
    btn2.onclick = function () {
        var tagName_a = document.getElementsByTagName("a")[0];
        tagName_a.removeAttribute("href"); //取消href属性
    }
</script>

演示截图
演示

3、Node: 节点对象

Node节点对象是其他5个对象的父对象(document…),所以Node的很多属性和方法被它的子对象继承

Node对象的特点: 所有dom对象都可以被认为是一个节点
注意,虽然所有的对象均能继承用于处理父节点和子节点的属性和方法,但是并不是所有的对象都拥有父节点或子节点。例如,文本节点不能拥有子节点,所以向类似的节点添加子节点就会导致 DOM 错误。

方法
Node节点对象的方法也很多,我们主要讲一下增删查改
CRUD dom树

  • appendChild( ):向节点的子节点列表的结尾添加新的子节点。
  • removeChild( ):删除(并返回)当前节点的指定子节点。
  • replaceChild( ):用新节点来替换一个子节点。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Node节点对象</title>
 <style>
        div{
            background-color: yellow;
        }
        #div1{
            background-color: red;
            width: 200px;
            height: 200px;
        }
        #div2{
            background-color: yellow;
            width: 100px;
            height: 100px;
        }
        #div3{
            background-color: blue;
            width: 100px;
            height: 100px;
        }
    </style>
<div id="div1">
    <div id="div2"></div>
</div>
<a href="javascript:void(0);" id="addNode">添加子节点</a>
<!--javascript:void(0)创建一个超链接,但是,在点击链接时,
既不能够跳转,也不会引起页面的刷新。-->
<a href="javascript:void(0);" id="deleteNode">删除子节点</a>
<script>
    var element_a = document.getElementById("deleteNode");
    element_a.onclick = function () {
            var div1 = document.getElementById("div1"); //获取div1对象
            var div2 = document.getElementById("div2");
            div1.removeChild(div2); // 删除div2 
    }
    var addNode = document.getElementById("addNode");
    addNode.onclick = function () {
        var div1 = document.getElementById("div1"); //返回div1
        var div3 = document.createElement("div"); // 创建一个div
        div3.setAttribute("id","div3"); ///设置div3的属性
        div1.appendChild(div3); //向div1 添加的子节点
    }
</script>
</body>

演示截图:
演示截图

⚠️代码中没有设置删除div3的节点,所以删除不了蓝色的方块

属性
parentNode 返回节点的父节点。

 var node = div3.parentNode;
 alert(node); //返回div1节点

4、Attribute:属性对象 Text:文本对象 Comment:注释对象

Attribute:属性对象,可以setAttribute createAttribute
Text 对象表示元素或属性的文本内容。
Comment 对象表示文档中注释节点的内容。

4、HTML DOM

什么是 HTML DOM?

HTML DOM 是:
HTML 的标准对象模型
HTML 的标准编程接口
W3C 标准

HTML DOM 定义了所有 HTML 元素的对象和属性,以及访问它们的方法。

也就是说,HTML DOM 是关于如何获取、修改、添加或删除 HTML 元素的标准。

HTML DOM 也有我们刚才介绍的核心DOM的东西,那接下来我们来介绍一点刚才没有介绍的东西,HTML DOM的知识还是比较多的,小伙伴们需要用到的时候可以查一下文档

  1. 标签体的设置和获取:innerHTML
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>HTMLDOM</title>
</head>
<body>
      <div id="div1">div</div>
        <script>
            var div = document.getElementById("div1");
            var innerHTML = div.innerHTML;
            div.innerHTML = "<input type='text' >";  // 将我们设置的div标签替换成一个文本输入框
            //为 div标签追加一个文本输入框
            div.innerHTML +="<input type='text'> ";
        </script>
</body>
</html>

演示截图

在这里插入图片描述

3.控制元素样式
(1) 、使用元素的style属性来控制元素样式

	 div1.style.border = "1px solid red"; //控制div1 的style 
	 div1.style.width = "50px";
  //font-size--> fontSize
  // background-color -> backgroundcolor
    div1.style.fontSize = "20px";

(2)、 提前定义好类选择器的样式,通过元素的className属性来设置其class属性值。

提前设置好改class 的style属性值,然后定义ckassName属性来获取改属性值

        div1.className = "div2" ;

5、事件监听机制

事件监听机制概念: 简单的来理解就是 某个组件被执行来某些操作后,触发某些代码的执行。
我们需要先了解以下名词概念

  • 事件 : 指的是某些操作:
    如: 单击、双击、键盘操作、鼠标操作

  • 事件源: 指的是 组件 例如 文本输入框,按钮等

  • 监听器: 就是触发后执行的代码

  • 注册监听 : 也就是将上面3种结合起来,完成 某个组件被执行来某些操作后,触发某些代码的执行的 触发代码过程

常见的事件有:
(1). 点击事件类:
1. onclick:单击事件
2. ondblclick:双击事件

(2). 焦点事件类
1. onblur:失去焦点
2. onfocus:元素获得焦点。

(3). 加载事件类:
1. onload:一张页面或一幅图像完成加载。

(4). 鼠标事件类:
1. onmousedown 鼠标按钮被按下。
2. onmouseup 鼠标按键被松开。
3. onmousemove 鼠标被移动。
4. onmouseover 鼠标移到某元素之上。
5. onmouseout 鼠标从某元素移开。

(5). 键盘事件类:
1. onkeydown 某个键盘按键被按下。
2. onkeyup 某个键盘按键被松开。
3. onkeypress 某个键盘按键被按下并松开。

(6). 选择和改变事件类
1. onchange 域的内容被改变。
2. onselect 文本被选中。

(7). 表单事件类:
1. onsubmit 确认按钮被点击。
2. onreset 重置按钮被点击。

加载事件中的 onload 我们之前不是说过 在符合语法的情况下可以放在任意位置吗? 但是放的位置会对

 window.onload = function() {
	<script>
	....
	</script>
}

接下来我们通过一个鼠标的事件来了解这些事件该怎么用

  • 通过获取元素对象,然后调用我们需要的事件类,然后执行我们定义的function()
 document.getElementById("username").onmouseover = function () {//链式编程
                alert("鼠标在我身上");
            }

表单事件类讲讲表单事件,

第一种用法

....
<script>
windou.onload = function(){
///在这返回什么就决定表单是否被提交
 document.getElementById("form").onsubmit = function () {  
                    return true; //true 则表单被提交,false则不提交
            }
     }
</script>
<body>
<form action="#" id="form" onclick=" return checkform();">
</body>

...

第二种用法

.....
 <script>
 //先定义个方法
  function  checkform(){
            return true; // 返回true则提交,false则不提交表单
        }
    </script>
</head>
<body>
<form action="#" id="form" onclick=" return checkform();">//注意这里是return checkform();
//因为 调用checkform()返回的是true/false,然后我们要再将其 return 才能进行判断是否提交表单
...

好啦,那我们 JavaScript小白入门篇 就结束啦,喜欢的朋友可以点赞支持一下,如果文章中有什么错误欢迎大家指出来,谢谢。

JavaScript小白入门篇(一、基本语法详解)
JavaScript小白入门篇(二、高级语法之 BOM 详解)

猜你喜欢

转载自blog.csdn.net/qq_42878218/article/details/106822516