自学内容网 自学内容网

HTML学习笔记(5)

目录

一、dom操作

1、查找操作

getElementById()

getElementsByClassName()

getElementsByTagName()

querySelector()

querySelectorAll()

通过属性查找

2、修改操作

3、增加元素

4、删除操作


一、dom操作

document object model

1、查找操作

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="js/dom操作.js"></script>
</head>
<body>
    <div id="aa">hello</div>
    
</body>
</html>

getElementById()

// getElementById()通过id获取元素,返回一个对象
var obj = document.getElementById("aa");
console.log(obj);

我们发现控制台输出并不是我们预期的答案

注:因为html是顺序执行的代码,按照所给html代码,先外引js文件此时并没有id为aa的元素,所以值为null,可以有三种方式修改如下:

1、调整导入顺序

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    
</head>
<body>
    <div id="aa">hello</div>
    <script src="js/dom操作.js"></script>
</body>
</html>

2、+延迟标记 注:defer只能用在外引

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="js/dom操作.js" defer></script>
</head>
<body>
    <div id="aa">hello</div>
</body>
</html>

3、修改JS文件,window.onload它在整个网页(包括所有的图片、CSS、脚本等资源)加载完成后触发

window.onload = function() {
    var obj = document.getElementById("aa");
    console.log(obj);
};

getElementsByClassName()

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="js/dom操作.js" defer></script>
</head>
<body>
    <div class="aa">hello</div>
    <div class="aa">hello</div>
    <div class="aa">hello</div>
</body>
</html>
// getElementsByClassName()通过class获取元素,返回一个数组
var arr = document.getElementsByClassName("aa");
console.log(arr)

测试一下,实现点击某个元素对应的元素,修改背景颜色,对应代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <script src="js/javascript基础语法.js" defer></script>
</head>
<body>
    <div class="aa">hello</div>
    <div class="aa">hello</div>
    <div class="aa">hello</div>
    <div class="aa">hello</div>
    <div class="aa">hello</div>
    <div class="aa">hello</div>
</body>
</html>
// 鼠标点击页面,出现弹窗1
var arr = document.getElementsByClassName("aa")
console.dir(arr)
for(var j = 0; j < arr.length; j ++ )
{
    arr[j].onclick = function(){
        var color = "";
        for(var i = 0; i < 6; i ++ )
        {
            var num = Math.round(Math.random() * 15);
            if(num == 10){
                num = 'a';
            } else if(num == 11) {
                num = 'b';
            } else if(num == 12) {
                num = 'c';
            } else if(num == 13) {
                num = 'd';
            } else if(num == 14) {
                num = 'e';
            } else if(num == 15) {
                num = 'f';
            }
            color = color + num;
        }
        console.log(j) 
        this.style.background = "#" + color;
    }

}

注:这里最后修改背景颜色调用的是this关键字,为什么不是arr[j].style.background = "#" + color,首先后者一定是错的,在读取这个循环时,先给每个数组元素绑定了一个点击的函数,但是函数内部并没有执行,因为没有点击操作,只有绑定完之后,点击某一个元素,才开始执行对应元素的function内部的函数,所以当绑定完点击的函数后,每次点击j一定是数组长度+1,因为已经给每个元素都绑定完点击的效果了,this它指向函数执行时的当前对象。

getElementsByTagName()

// 根据元素名称查找 找到所有符合条件的对象组成的数组

var obj = document.getElementsByTagName("div")

querySelector()

// 根据元素选择器查找 querySelector()获取符合条件的第一个对象

var obj = document.querySelector(".aa")

querySelectorAll()

// 根据元素选择器查找 querySelectorAll()获取所有符合条件的对象组成的数组

var obj = document.querySelectorAll(".aa")

通过属性查找

// 通过关系查找
// 找父亲 parentNode parentElement
// 找孩子 childNodes children
// 第一个孩子 firstChild firstElementChild
// 最后一个孩子 lastChild lastElementChild
// 上一个元素 previousSibling previousElementSibling
// 下一个元素 nextSibling nextElementSibling

console.log(obj.parentNode)
console.log(obj.parentElement)
console.log(obj.childNodes)
console.log(obj.children)

2、修改操作

本质是修改属性,可以通过console.dir打印属性信息,找对应的修改,对象.属性=值

//例如html结构如下  
//<div id="aa">hello</div>
var obj = document.getElementById("aa")
console.dir(obj)
console.log(obj)

// 修改属性
obj.innerText = "修改后的内容"
obj.innerHTML = "第二次修改后的内容"

针对自定义属性的值

console.log(obj.getAttribute("属性名"))
obj.setAttribute("属性","值")
//修改样式
obj.style.backgrount = "yellow";
obj.style.fontSize = "15px";

obj.style.cssText = "background:red;color:pink;font-size:15px";

3、增加元素

//例如html结构如下
//<div id="aa">
    //<p style="background: paleturquoise;">aa</p>
    //<h4 style="background: paleturquoise;"></h4>
//</div>
var obj = document.getElementById("aa")
console.dir(obj)
console.log(obj)

// 添加
obj = document.getElementById("aa")
console.log(obj)

// 一、创建元素
var newNode = document.createElement("h1")
console.log(newNode)
newNode.innerHTML = "新添加的元素"
newNode.className = "xixi"
newNode.style.background = "purple"

// 二、添加元素
// 在子元素最后位置添加
obj.appendChild(newNode)
// 在h4前面增加
var h4 = document.querySelector("h4");
obj.insertBefore(newNode, h4)

// 替换掉某个子元素
obj.replaceChild(newNode, h4)

复制元素

// 假设一个ul li列表
var oldNode = document.querySelector("ul");
var newNode = oldNode.cloneNode();
// cloneNode false复制外壳只复制ul ,true复制内部的li内容

4、删除操作

//例如html结构如下,删除h4    
//<div id="aa">
    //<p style="background: paleturquoise;">aa</p>
    //<h4 style="background: paleturquoise;"></h4>
//</div>

var obj = document.getElement("aa");
varr h4 = document.querySelector("h4");
obj.remmoveChild(h4);

//等价于
varr h4 = document.querySelector("h4");
h4.parentNode.removeChild(h4);


原文地址:https://blog.csdn.net/m0_70026215/article/details/145227169

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!