JS - 关于DOM的介绍和使用01

DOM(Document Object Model)是一种用于表示和操作HTML、XML等文档结构的编程接口。在JavaScript中,通过DOM可以访问和操作网页中的各种元素、属性和事件。

获取元素:

  • 通过ID获取元素:使用document.getElementById('elementId')方法。
  • 通过标签名获取元素:使用document.getElementsByTagName('tagName')方法。
  • 通过类名获取元素:使用document.getElementsByClassName('className')方法。
  • 通过选择器获取元素:使用document.querySelector('selector')或document.querySelectorAll('selector')方法。

操作元素:

  • 获取和设置元素的属性:使用element.getAttribute('attributeName')和element.setAttribute('attributeName', 'value')方法。
  • 获取和设置元素的文本内容:使用element.textContent或element.innerHTML属性。
  • 添加和删除元素:使用element.appendChild(newElement)和element.removeChild(childElement)方法。

修改样式:

  • 获取和设置元素的样式属性:使用element.style.property属性。
  • 添加、删除和切换CSS类:使用element.classList.add('className')element.classList.remove('className')element.classList.toggle('className')方法。

事件处理:

  • 添加事件监听器:使用element.addEventListener('eventName', eventHandler)方法。
  • 移除事件监听器:使用element.removeEventListener('eventName', eventHandler)方法。
<!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>
</head>
<body>
    <button id="btn">我是一个按钮</button>
    <script type="text/javascript">
    //浏览器已经为我们提供文档节点对象,这个对象是window属性
    //可以在页面中直接使用,文档节点代表的是整个网页
    console.log(document);
    //获取到button对象,可以使用getElementById()
    var btn=document.getElementById("btn");
    console.log(btn);
    //修改按钮的文字
    console.log(btn.innerHTML);
    btn.innerHTML="I'm Button";
    console.log(btn.innerHTML);
    </script>
</body>
</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>
    
</head>
<body>
    <!--以下代码存在结构和行为耦合,不推荐使用-->
    <!--<button id="btn" οnclick="alert('你点击了此摁钮!');">单击此摁钮</button>
    <br>
    <button id="btn" οndblclick="alert('你点击了此摁钮!');">双击此摁钮</button>
    <br>
    <button id="btn" οnmοusemοve="alert('你在摁钮上滑动了鼠标!');">在此摁钮上滑动一下</button>-->
    <button id="btn">我是一个按钮</button>
    <script type="text/javascript">
    //事件就是用户和浏览器之间的交互行为
    //比如点击按钮,鼠标移动,关闭窗口
    var btn=document.getElementById("btn");
    //用函数的形式来处理对应事件
    //例如给btn增加一个单击事件
    btn.onclick=function()
    {
        alert("你点击了一次此摁钮!");
    };
    </script>
</body>
</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>
    <script type="text/javascript">
    //利用页面加载事件,使方法在页面加载完成之后才开始执行
    //onload事件会在整个页面加载完成后才触发
    //为windows绑定一个onload事件
    //该事件对应的响应函数将会在页面加载完成之后执行
    //这样可以确保我们的代码执行时所有的DOM对象已经加载完毕
    window.onload=function()
    {
        //为id为btn的按钮绑定一个单机响应函数,也就是btn.onclick
        var btn=document.getElementById("btn");
        btn.onclick=function()
        {
            //首先查找节点,并且为查找到的节点设定一个变量
            //getElementById()可以查找单个节点
            var yourmother=document.getElementById("yourmother");
            //打印获取到的节点
            //innerHTML属性可以直接获取到元素内部的HTML代码
            console.log(yourmother.innerHTML);
        };

        //为id为btn2的按钮绑定一个单机响应函数,也就是btn2.onclick
        var btn2=document.getElementById("btn2");
        btn2.onclick=function()
        {
            //首先查找所有li节点
            //getElementsByTagName()可以根据标签签名来获取一组元素节点对象
            //这个方法会给我们返回一个类数组对象,查询里面的元素可以使用数组方法来查询
            var listtext=document.getElementsByTagName("li");

            //打印listtext
           //alert(listtext.length);
           for(var i=0;i<listtext.length;i++)
           {
               console.log(listtext[i].innerHTML);
           }
        };

        //为id为btn3的按钮绑定一个单击响应函数,也就是btn3.onclick
        var btn3=document.getElementById("btn3");
        btn3.onclick=function()
        {
            //先找到所有的h1节点
            //getElementsByTagName()可以根据标签签名来获取一组元素节点对象
            var h1text=document.getElementsByTagName("h1");

            //打印h1text
            for(var i=0;i<h1text.length;i++)
            {
                console.log(h1text[i].innerHTML);
            }
        };
        
        //为id为btn3的按钮绑定一个单击响应函数,也就是btn3.onclick
        var btn4=document.getElementById("btn4");
        btn4.onclick=function()
        {
            //先找到所有的li节点
            //getElementsByTagName()可以根据标签签名来获取一组元素节点对象
            //先给所有的li节点设置一个name="gender"的属性 然后根据此属性来获取所要的对象
            var litext=document.getElementsByName("gender");

            //打印h1text
            for(var i=0;i<litext.length;i++)
            {
                console.log(litext[i].innerHTML);
                //元素的id name value都可以使用元素节点读取,但是class属性不能用这种方式读取
            }
        };
    };
    </script>
</head>
<body>
    <!--<button id="btn">点我一下</button>
    <script type="text/javascript">
    //获取id为btn的摁钮
    var btn=document.getElementById("btn");
    //为摁钮绑定一个单机响应函数
    btn.οnclick=function()
    {
        alert("hello");
    };
    //文档从上到下加载,如果把JS卸载head里面,那么就无法加载到摁钮
    </script>-->

    <button id="btn">单个节点内容查询</button>
    <button id="btn2">一组节点内容查询</button>
    <button id="btn3">一组节点内容查询</button>
    <button id="btn4">同一name的节点内容查询</button>
    <h1 id="yourmother">拉拉拉</h1>
    <ul id="list">
        <li name="gender" value=1>语文课</li>
        <li name="gender" value=1>数学课</li>
        <li name="gender">英语课</li>
        <li name="gender">物理课</li>
    </ul>
    <h1>yourmother</h1>
    <h1>yourfather</h1>
    <h1>yourgrandmother</h1>
    <h1>yourgrandfather</h1>
</body>
</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">
       *{
           margin:0;
           padding:0;
        }
        #outer
        {
            width:600px;/*宽度设置为600个像素*/
            margin:50px auto;/*距离顶端个像素 默认居中*/
            background-color:yellow;/*背景颜色设置为黄色*/
            padding:10px;/*向四周扩大十个像素距离*/
            text-align:center;/*设置文本居中*/
        }
    </style>

    <script type="text/javascript">
    window.onload=function()
    {
        //点进按钮切换图片
        //获取两个按钮
        var previous=document.getElementById("previous");
        var next=document.getElementById("next");
        //获取img标签
        var img=document.getElementsByTagName("img")[0];//序号0表示第一个img 序号1表示第二个img
        console.log(img);
        //创建一个图片数组
        var imgArr=["../伊蕾娜素材/图一.jpeg","../伊蕾娜素材/图二.jpg","../伊蕾娜素材/图三.jpg","../伊蕾娜素材/图四.jpg","../伊蕾娜素材/图五.jpg","../伊蕾娜素材/图六.jpg","../伊蕾娜素材/图七.jpg","../伊蕾娜素材/图八.jpg","../伊蕾娜素材/图九.png","../伊蕾娜素材/图十.jpg"];
        console.log(imgArr);
        //创建一个变量,来表示当前变量的索引
        var index=0;
        //设置提示文字
        //获取id为info的p元素
        var info=document.getElementById("info");
        info.innerHTML="一共"+imgArr.length+"张图片,当前是第"+(index+1)+"张";
        //再分别为两个按钮设置一个单击响应函数
        previous.onclick=function()
        {
            //切换图片就是修改img的src属性
            //img.src="../伊蕾娜素材/音乐播放器版.jpg";这样可以切换图片,但是只能切换到指定的图片
            //img.src=imgArr[0];//此方法改编了图片的使用,但是图片切换还是固定的
            index--;
            if(index<0)
            {
                index=imgArr.length-1;
            }
            img.src=imgArr[index];
            info.innerHTML="一共"+imgArr.length+"张图片,当前是第"+(index+1)+"张";
        };
        next.onclick=function()
        {
            //img.src="../伊蕾娜素材/CDKeyWizard.jpg";这样可以切换图片,但是只能切换到指定的图片
            index++;
            if(index>imgArr.length-1)
            {
                index=0;
            }
            img.src=imgArr[index];
            info.innerHTML="一共"+imgArr.length+"张图片,当前是第"+(index+1)+"张";
        };
    }
    </script>
</head>
<body>
    <div id="outer">
        <p id="info"></p>
        <img src="../伊蕾娜素材/图一.jpeg" alt="伊蕾娜03" height="600px" width="600px">
        <button id="previous">上一张</button>
        <button id="next">下一张</button>
    </div>
</body>
</html>

DOM的查询

<!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>
    <script type="text/javascript">
    window.onload=function()
    {
        //为id为btn04的按钮绑定一个单击响应函数
        var btn04=document.getElementById("btn04");
        btn04.onclick=function()
        {
            //获取id为city的元素
            var city=document.getElementById("city");
            //查找#city下所有li节点
            var cityli=city.getElementsByTagName("li");
            console.log(cityli.length);
            console.log(cityli);
            for(var i=0;i<cityli.length;i++)
            {
                console.log(cityli[i].innerHTML);
            }
        };

        var btn05=document.getElementById("btn05");
        btn05.onclick=function()
        {
            //获取id为city的节点
            var city=document.getElementById("city");
            //返回#city的所有子节点
            //childNodes属性会获取包括文本节点在内的所有节点
            //zai IE8及以下的浏览器中,不会把空白当成子节点
            var citycn=city.childNodes;
            console.log(citycn.length);//多出来的五个是空白文本
            console.log(citycn);
            //children属性可以获取当前元素的所有子元素
            //相比childNodes,用children更好一点
            var citycn2=city.children;
            console.log(citycn2);
        }

        //为id为btn06的按钮绑定一个单机响应函数
        var btn06=document.getElementById("btn06");
        btn06.onclick=function()
        {
            //获取id为phone的元素
            var phone=document.getElementById("phone");
            //返回#phone的第一个子节点
            //firstChild可以获取到当前元素的第一个子节点(包括空白文本)
            var phone01=phone.childNodes[0];
            console.log(phone01);
            console.log(phone.firstChild);
            //firstElementChild可以获取当前元素的第一个子元素
            //此方法不支持IE8以下的浏览器,如果需要兼容IE8,尽量不要使用此方法
            console.log(phone.firstElementChild);
            //类似的还有lastChild,找最后一个子节点
        }
    };
    </script>
</head>
<body>
    
    <ul id="city">
        <li>语文课</li>
        <li>数学课</li>
        <li>英语课</li>
        <li>物理课</li>
    </ul>
    <ul id="phone">
        <li>IOS</li>
        <li>Android</li>
        <li>Windows Phone</li>
    </ul>
    <button id="btn04">查找功能四</button>
    <button id="btn05">查找功能五</button>
    <button id="btn06">查找功能六</button>
</body>
</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>
    <script type="text/javascript">
    //定义一个函数,专门用来为指定元素绑定单击响应函数
    //里面涉及的参数:
    //idStr:要绑定单击响应函数的对象的id属性值
    //fun:事件的回调函数,当单击元素时,该函数将会被触发
    function myClick(idStr,fun)
    {
        var btn=document.getElementById(idStr);
        btn.onclick=fun;
    }

    window.onload=function()
    {
    //为id为btn07的按钮绑定一个单击响应函数
    myClick("btn07",function()
    {
        //获取id为timetable的节点
        var yingyu=document.getElementById("yingyu");
        //返回timetable的父节点
        var pn=yingyu.parentNode;
        console.log(pn.innerHTML);
        console.log(pn.innerText);
        //innerHTML和innerText都会提取文本
        //不同的是Text会自动将标签去掉,而HTML会保留标签
    }
    );

    //为id为btn08的按钮绑定一个单击响应函数
    myClick("btn08",function()
    {
        //获取id为android的元素
        var add=document.getElementById("android");
        
        //返回#android的前一个兄弟节点
        //此属性会让空白文本也默认成为一个兄弟节点
        var aps=add.previousSibling;
        alert(aps.innerText);
        
        //此属性会返回上一个兄弟元素,无事其中的空白文档,但是IEM8及以下不支持
        var apes=add.previousElementSibling;
        alert(apes.innerText);
        
        //此属性会返回当前节点的下一个兄弟节点
        //但是此属性也同样会让空白文本默认成为一个兄弟节点
        var ans=add.nextSibling;
        alert(ans.innerText);

        //此属性会返回当前节点的下一个兄弟节点
        //但此属性会无视其中的空白文档,IE8及以下不支持
        var anes=add.nextElementSibling;
        alert(anes.innerText);
    }    
    );

    //读取id为username的value属性值
    myClick("btn09",function()
    {
        //获取id为username的元素
        var un=document.getElementById("username");
        //读取um的value属性值
        alert(un.value);
        //文本框个的value属性值,就是文本框中填写的内容
    }
    );

    //设置username的value属性值
    myClick("btn10",function()
    {
        //获取id为username的元素
        var un=document.getElementById("username");
        //给un的value设置属性值
        un.value="Your Mother Fucker"
    }
    );

    //返回bj的文本值
    myClick("btn11",function()
    {
        //获取id为bj的元素
        var bj=document.getElementById("bj");
        console.log(bj.innerHTML);

        //获取bj中的文本节点
        var fc=bj.firstChild
        console.log(fc.nodeValue);//文本节点的属性值就是文本本身
        console.log(fc);
        console.log(bj.firstChild.nodeValue);
    }
    );

    };
    </script>
</head>
<body>
    <ul id="ttb">
        <li id="yingyu">英语课</li>
        <li id="bj">语文课</li>
        <li>数学课</li>
        <li>物理课</li>
    </ul>

    <ul id="phone">
        <li>IOS</li>
        <li id="android">Android</li>
        <li>Windows Phone</li>
    </ul>
    <button id="btn07">查找功能七</button>
    <button id="btn08">查找功能八</button>
    <button id="btn09">查找功能九</button>
    <button id="btn10">查找功能十</button>
    <button id="btn11">查找功能十一</button>
    <input type="text" name="name" id="username" value="abcde">
</body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/547156.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

4.Godot图片素材的获取和编辑

游戏开发中经常遇到图片素材的需求 1. 图片素材的准备 术语&#xff1a;Sprite 精灵&#xff0c;游戏开发中指一张图片来源不明的图片&#xff0c;切勿在商业用途使用&#xff0c;以免引起版权风险。 1. 在学习阶段&#xff0c;可以百度或者从一些资源网站获取&#xff0c;这…

面试题总结:HashMap底层原理

不仅仅是一道题&#xff0c;之后的某一天&#xff0c;它可能是破局的关键。 关于HashMap的知识点有哪些呢&#xff1f;分层次展示 1.基础知识&#xff1a; 存储键值对结构、底层数据结构、红黑树和链表 2.位运算与实现 位运算、put、get方法的实现 3.关于锁 segment锁和桶锁、线…

OpenCV基本图像处理操作(三)——图像轮廓

轮廓 cv2.findContours(img,mode,method) mode:轮廓检索模式 RETR_EXTERNAL &#xff1a;只检索最外面的轮廓&#xff1b;RETR_LIST&#xff1a;检索所有的轮廓&#xff0c;并将其保存到一条链表当中&#xff1b;RETR_CCOMP&#xff1a;检索所有的轮廓&#xff0c;并将他们组…

广东莱斯广告,6.8米UV喷印推动粤东喷绘产业升级

广东莱斯广告作为汕头市大型的广告服务运营商,近日迎来了一件值得庆祝的事情:彩神6.8米UV喷印机运行一周年,销售服务商深圳嘉豪总经理李伟特地前来回访。该设备是深圳润天智数字设备股份有限公司开发的全球首台搭载XTRA6800H柯尼卡喷头的设备,设备特点是:1.色彩艳丽;2.超宽喷印…

Suno,属于音乐的ChatGPT时刻来临

AI绘画 AI视频我们见过了&#xff0c;现如今AI都能生成一首音乐&#xff0c;包括编曲&#xff0c;演唱&#xff0c;而且仅需几秒的时间便可创作出两分钟的完整歌曲 相信关注苏音的很大一部分都是从获取编曲或者混音插件来的&#xff0c;现如今AI却能帮你几秒生成曲子 今天就带…

Postgresql源码(125)游标恢复执行的原理分析

问题 为什么每次fetch游标能从上一次的位置继续&#xff1f;后面用一个简单用例分析原理。 【速查】 恢复扫描需要知道当前页面、上一次扫描到的偏移位置、当前页面一共有几条&#xff1a; 当前页面&#xff1a;HeapScanDesc结构中记录了扫到的页面&#xff08;scan->rs_cb…

计算机网络:数据链路层 - CSMA/CA协议

计算机网络&#xff1a;数据链路层 - CSMA/CA协议 CSMA/CA概述帧间间隔工作原理退避算法虚拟载波监听 CSMA/CA概述 讲解CSMA/CA之前&#xff0c;我们回顾一下CSMA/CD的三个特性&#xff1a; 多址接入MA&#xff1a;多个主机连接在一条总线上&#xff0c;竞争使用总线 载波监听…

2024年主流的java混淆工具有哪些

2024年&#xff0c;主流的Java混淆工具可能会包括&#xff1a; ProGuard&#xff1a;ProGuard 是一个免费的开源 Java 混淆工具&#xff0c;可用于压缩、优化和混淆 Java 字节码。它是Android开发者的首选混淆工具之一&#xff0c;并且在Java应用程序中也得到了广泛应用。 Dex…

Stable Diffusion超详细教程!从0-1入门到进阶

一、本地部署 Stable Diffusion 前言 目前市面上比较权威&#xff0c;并能用于工作中的AI绘画软件其实就两款。一个叫Midjourney&#xff08;简称MJ&#xff09;&#xff0c;另一个叫Stable-Diffusion&#xff08;简称SD&#xff09;。MJ需要付费使用&#xff0c;而SD开源免费…

【洛谷 P8802】[蓝桥杯 2022 国 B] 出差 题解(带权无向图+单源最短路+Dijkstra算法+链式前向星+最小堆)

[蓝桥杯 2022 国 B] 出差 题目描述 A \mathrm{A} A 国有 N N N 个城市&#xff0c;编号为 1 … N 1 \ldots N 1…N 小明是编号为 1 1 1 的城市中一家公司的员工&#xff0c;今天突然接到了上级通知需要去编号为 N N N 的城市出差。 由于疫情原因&#xff0c;很多直达的交…

【GEE实践应用】统计遥感数据像元的观测值数量以及良好观测值数量

下面我们以贵州省毕节市2016年8月1号至2018年7月31号两年间像元的观测值数量以及良好的观测值数量为例&#xff0c;统计结果以图像形式进行输出&#xff0c;如图1所示&#xff1a; // 1. 定义研究区域 var studyArea table;// 获取 Landsat 和 Sentinel-2 数据集 var landsat…

第九届少儿模特明星盛典 全球赛首席体验官『韩嘉滢』精彩回顾

2024年1月30日-2月1日&#xff0c;魔都上海迎来了龙年第一场“少儿形体行业美育春晚”&#xff01;由IPA模特委员会主办的第九届少儿模特明星盛典全球总决赛圆满收官&#xff01;近2000名少儿模特选手从五湖四海而来&#xff0c;决战寒假这场高水准&#xff0c;高人气&#xff…

前端上传照片压缩 (适合 vue vant组件的)

为什么要这样做&#xff1f; &#xff08;减小服务器压力 提升用户体验上传照片和加载照片会变快&#xff09; 最近有一个需求&#xff0c;通过手机拍照后上传图片到服务器&#xff0c;大家应该都知道&#xff0c;现在的手机像素实在是太高了&#xff0c;随便拍一张都是10M以上…

物联网的核心价值是什么?——青创智通

工业物联网解决方案-工业IOT-青创智通 物联网&#xff0c;这个词汇在当今的科技领域已经变得耳熟能详。但当我们深入探索物联网的核心价值时&#xff0c;我们会发现它远不止是一个简单的技术概念&#xff0c;而是一种能够彻底改变我们生活方式和工作方式的革命性力量。 物联网…

Django之rest_framework(三)

一、GenericAPIView的使用 rest_framework.generics.GenericAPIView 继承自APIVIew,主要增加了操作序列化器和数据库查询的方法,作用是为下面Mixin扩展类的执行提供方法支持。通常在使用时,可搭配一个或多个Mixin扩展类 1.1、属性 serializer_class 指明视图使用的序列化器…

JVM之JVM栈的详细解析

Java 栈 Java 虚拟机栈&#xff1a;Java Virtual Machine Stacks&#xff0c;每个线程运行时所需要的内存 每个方法被执行时&#xff0c;都会在虚拟机栈中创建一个栈帧 stack frame&#xff08;一个方法一个栈帧&#xff09; Java 虚拟机规范允许 Java 栈的大小是动态的或者是…

npm配置阿里镜像库

1、配置阿里云镜像源 #查看当前使用的镜像地址命令 npm config get registry#设置阿里镜像源 npm config set registry http://registry.npmmirror.com 这里要注意下&#xff0c;之前的镜像源地址 https://registry.npm.taobao.org/ 已经不能用了&#xff0c;这里要更改为新…

Grok-1.5 Vision 预览 将数字世界与物理世界连接起来,首款多模态模型

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

android 创建module

文章目的&#xff1a; 快速创建module并使用 创建步骤&#xff1a; 1 创建module 2 修改module下的build.gradle文件 3 修改清单文件中MainActivity属性&#xff0c;否则APP会因为有多个启动界面而崩溃 4 在主项目build.gradle引用该object Module 至此&#xff0c;可在APP中…

golang 迷宫回溯算法(递归)

// Author sunwenbo // 2024/4/14 20:13 package mainimport "fmt"// 编程一个函数&#xff0c;完成老鼠找出路 // myMap *[8][7]int 地图&#xff0c;保证是同一个地图&#xff0c;因此是引用类型 // i,j表示对地图的哪个点进行测试 func SetWay(myMap *[8][7]int, …