当前位置: 首页 > article >正文

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);


http://www.kler.cn/a/509058.html

相关文章:

  • 联发科MTK6762/MT6762安卓核心板_4G智能模块应用
  • vue3学习三
  • Python毕业设计选题:基于python的酒店推荐系统_django+hadoop
  • 关于高级工程师的想法
  • Conda的一些常用命令
  • 02JavaWeb——JavaScript-Vue(项目实战)
  • Java日志配置
  • 蓝桥杯 连续奇数和问题解析
  • 支持向量机算法(三):非线性支持向量原理层层拆解,精读公式每一处细节
  • JavaScript 代码规范
  • MarsCode青训营打卡Day5(2025年1月18日)|稀土掘金-148.小A的子数组权值、304.计算特定条件下的四元组数量
  • 1.6 从 GPT-1 到 GPT-3.5:一路的风云变幻
  • 蓝桥杯算法日常|枚举[*找到最多的数]
  • ASP.NET Core 中的 JWT 鉴权实现
  • recat与vue相比有什么优缺点
  • Titans 架构中的记忆整合:Memory as a Context;Gated Memory;Memory as a Layer
  • 用 Rust 写下第一个 “Hello, World!”
  • 2024年AI与大数据技术趋势洞察:跨领域创新与社会变革
  • 【PyCharm】远程连接Linux服务器
  • 钉钉消息推送()
  • 数据结构——队列和栈(介绍、类型、Java手搓实现循环队列)
  • RV1126+FFMPEG推流项目(5)VI和VENC模块绑定,并且开启线程采集
  • 【Django开发】django美多商城项目完整开发4.0第12篇:商品部分,表结构【附代码文档】
  • 动手学大数据-1大数据体系介绍与 SQL 处理流程
  • 58,【8】BUUCTF [PwnThyBytes 2019]Baby_SQL1
  • Python 调整 Excel 中的行列顺序