JavaScript-DOM树和事件

发布于:2023-01-16 ⋅ 阅读:(225) ⋅ 点赞:(0)

1文档对象模型介绍

DOM树--对于一个网页文件,我们可以类比做一棵树,根标签的HTML看做根,文档中的所有标签都可以看做为这棵树的树枝或叶子

通过DOM树的结构,我们可以从根标签有序的获取,操作文档中任何一个子标签.

1.1DOM树

1.2.相关术语

元素:标签以及标签所包含的内容

元素属性:标签的属性

节点:元素,属性,文本统称为节点(元素--标签节点,属性--属性节点,文本--文本节点)

节点名称:标签节点的节点名就是标签名,属性节点的节点名就是属性名,文本节点的节点名是text

2.doucument对象

doucument对象指代的就是一个网页文档,doucument对象提供属性,函数大多都是获取网页中的对象

2.1集合属性

//document对象的属性

            //all:获取当前网页的所有的元素

            var arr=document.all;

            console.log(arr[0]);

            //imgs:获取当前网页的所有的照片

            //links,forms

3.对HTML标签的操作

标签属性操作和标签样式操作

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Document</title>

    <style type="text/css">

        .imgStyle{

            width: 200px;

            height: 200px;

            border-radius: 50%;

            transform: rotate(50deg);

        }

    </style>

</head>

<body>

    <img src="./img/剑姬.webp" height="200px"> <br>

    <img id="img2" src="./img/杰斯.webp" height="200px"> <br>

    <img id="img3" src="./img/格温.webp" height="200px"><br>

 

    <button onclick="testAttOper()">操作标签属性</button>

    <button onclick="testStyleOper()">操作标签样式</button>

    <button onclick="testClassOper()">操作标签class属性</button>

 

    <script type="text/javascript">

        function testAttOper(){

            var img2Ele=document.getElementById("img2");

            //操作标签属性

            //a.获取属性值

            var s=img2Ele.src;

            console.log(s);

            //b.设置属性值

            img2Ele.src="./img/杰斯.webp";

        }

        function testStyleOper(){

            var img=document.getElementById("img2");

            //操作标签样式(标签对象.sytle.样式属性名)

            //设置标签的样式属性

            img.style.border="2px solid red";

            img.style.borderRadius="10px";

        }

 

        function testClassOper(){

            var img=document.getElementById("img3");

            //操作标签的class属性是要.className

            img.className="imgStyle";

        }

    </script>

</body>

</html>

4.节点操作

元素,元素属性以及文本都被称之为节点

节点操作--使用js完成节点创建,节点删除,节点增加,插入节点

4.1节点属性:

节点类型

nodeType

nodeName

nodeValue

 标签节点

1

标签名

null

属性节点

2

属性名

属性值

文本节点

3

#text

文本内容

对于HTML对象:

获取属性节点:   .attributes

获取子节点: .childNodes

4.2创建新节点

//创建标签节点(元素)

        var imgTag=document.createElement("img");

//创建文本节点

        var textNode=document.createTextNode("hello world");

//创建属性节点

        var arrNode=document.createAttribute("name");

4.3插入新节点

 //1.创建标签节点

     var imgTag=document.createElement("img");

 

     //2.给标签节点添加属性

     imgTag.setAttribute("src","img/剑姬.webp");

     imgTag.alt="图片无法显示";

     console.log(imgTag);

 

     //3.给标签节点移除属性

     imgTag.removeAttribute("alt"); 

 

     //4.appendChild: 拼接子节点 拼接到标签的里面(标签之前)  调用一定是tagNode

     var body=document.body;

     // body.appendChild(imgTag);

 

     //5.insertBefore

     var btnTag=document.getElementById("btnTest");

     body.insertBefore(imgTag,btnTag);

4.4替换节点

replaceChild函数

可以使用新建的标签节点去替换某个节点,也可以获取网页中已经存在的标签去替换

  • 如果创建新的节点,这可以直接替换
  • 如果使用已经创建好的节点A去替换B  那么A会移动并替换B

4.5删除节点

parseTag.removeChild(oldChild)  从parseTag节点中删除oldChild节点

5.绑定事件的三种方式

事件:在网页文档中发生行为(可以是网页文档加载过程产生,也可以用户认为操作的)

  • 通过标签内部通过事件属性来绑定
  • 给获取的标签绑定事件
  • 获取标签后,添加绑定事件
//获取p标签

var pEle = document.querySelector("p");

 

function show(){

pEle.style.backgroundColor="#ccc";

}

 

function out(){

pEle.style.backgroundColor="";

}

 

var buttonEles =document.querySelectorAll("button");

buttonEles[1].onclick=function(){

alert('你是谁?为什么要点我?');

}

 

var h2Ele = document.querySelector("h2");

h2Ele.onmouseover = function(){

h2Ele.style.backgroundColor = "#f00";

}

 

var h3Ele = document.querySelector("h3");

h3Ele.addEventListener("click",function(){

alert("我是h3标签");

})

6.鼠标事件

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title></title>

<style>

div{

width: 500px;

height: 300px;

border: 1px solid #f00;

}

</style>

</head>

<body>

<p>双击我看效果</p>

<h2>按下鼠标和放开鼠标某个键</h2>

<div></div>

</body>

<script>

//获取标签

var pEle = document.querySelector("p");

//添加事件,执行操作

pEle.ondblclick = function(){

this.style.backgroundColor = "#F00";

}

 

//获取标签

var h2Ele = document.querySelector("h2");

h2Ele.onmousedown=function(){

this.style.backgroundColor = "#0f0";

}

 

h2Ele.onmouseup=function(){

this.style.backgroundColor = "#00f";

}

 

//获取标签

var divEle = document.querySelector("div");

divEle.onmousemove = function(){

var num = parseInt(Math.random()*899999+100000);

divEle.style.backgroundColor="#"+num;

// console.log(num);

}

 

</script>

</html>

7.表单事件

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title></title>

<style>

span{

margin-left: 10px;

color: #ccc;

font-size: 14px;

}

 

.err{

color: #f00;

}

 

.right{

color: #0f0;

}

</style>

</head>

<body>

<form>

昵称:<input type="text"/><span></span>

</form>

</body>

<script>

//获取元素

var inputEle = document.querySelector("input");

var spanEle = document.querySelector("span");

//添加事件

inputEle.onfocus = function(){

spanEle.className = "";

this.style.backgroundColor = "#f00";

spanEle.innerText = "昵称长度在6-12位";

}

 

inputEle.onblur = function(){

//获取input标签内输入的数据

var value =inputEle.value;

if(value.length>12||value.length<6){

spanEle.innerText ="昵称长度不对";

spanEle.className = "err";

}else{

spanEle.innerText ="恭喜你,此昵称可以使用";

spanEle.className = "right";

}

console.log(value);

}

 

</script>

</html>

8.键盘事件

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title></title>

</head>

<body>

<input  type="text"/>

</body>

<script>

//获取标签

var inputEle = document.querySelector("input");

//添加事件

inputEle.onkeydown=function(){

console.log("你按下了一个键");

}

 

inputEle.onkeyup = function(){

console.log("你释放了一个键")

}

 

</script>

</html>

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到