首页 > 编程语言 >JavaScript DOM

JavaScript DOM

时间:2024-09-15 17:21:00浏览次数:12  
标签:console log DOM JavaScript obj document 节点 属性

一、DOM简介

1、简介

​ Document Object Model 文档对象模型

​ 浏览器加载HTML文档时,会将HTML文档解析为一个树形结构,称为DOM树

  • HTML文档和DOM树是一一对应的关系
  • 当DOM树被改变时,与之对应的HTML文档也会随之改变
  • 当需要对HTML中的内容进行动态改变时,可以使用DOM来进行操作
  • DOM提供了一组用来操作HTML文档的API,即提供一套属性、方法和事件
  • 树上的每一个节点都是一个DOM对象,树的顶层为document对象,表示整个文档

<script>
        //document对象,表示整个文档
        console.log(document);
    </script>

2、document属性 

<head>
    <script>
        //document.bgColor属性
        function dobgColor(){
            document.bgColor="red";//改变背景颜色
            console.log(document.bgColor);//获取背景颜色
        }
        //document.title属性
        function doTitle(){
            document.title="DOM";//改变标题
            console.log(document.Title);//获取标题
        }
        //document.body属性
        function doBody(){
            document.body.appendChild(document.createTextNode("嘿嘿"));//向body内部添加一个文本节点
            //console.log(document.body);//获取主体
        }
    </script>
</head>
<body>
    <button onclick="dobgColor()">操作页面背景</button>
    <button onclick="doTitle()">操作页面标题</button>
    <button onclick="doBody()">操作页面主体</button>
    <h2>hello world</h2>
</body>

二、查询操作

​ 获取DOM对象

方法含义
document.getElementById("id值")根据id属性来查询节点,返回匹配的第一个节点
document.getElementsByName("name属性值")根据name属性来查询,返回所有匹配的节点集合
document.getElementsByTagName("标签名")根据标签名来查询,返回所有匹配的节点集合
document.getElementsByClassName("类名")根据class属性来查询,返回所有匹配的节点集合
document.querySelector("选择器")根据css选择器来查询,返回匹配的第一个节点
document.querySelectorAll("选择器")根据css选择器来查询,返回所有匹配的节点集合
node.getElementsByTagName("标签名")在当前节点的内部根据标签名来查询
node.parentNode属性查询当前节点的父节点
node.children属性查询当前节点的所有子元素节点
node.firstElementChild属性查询当前节点的第一个子元素节点
node.lastElementChild属性查询当前节点的最后一个子元素节点
node.previousElementSibling属性查询当前节点的上一个元素节点
node.nextElementSibling属性查询当前节点的下一个元素节点

节点类型分为:元素节点、文本节点、属性节点等

示例: 

<head>
    <script>
        function doQuery(){
        //1.根据id获取,返回单个对象
        var a=document.getElementById("d1");
        console.log(a);
        console.log(typeof a);//object,DOM对象,表示页面中对应的元素
        //2.根据name获取,返回集合
        var objs=document.getElementsByName("hobby");
        console.log(objs);
        //3.根据标签名获取,返回集合
        var objs1=document.getElementsByTagName("div");
        console.log(objs1[1]);//通过索引获取集合中的元素
        //4.根据class获取,返回集合
        var objs2=document.getElementsByClassName("hello");
        console.log(objs2);
        //5.根据css选择器获取,返回单个对象
        var obj1=document.querySelector("div.hello");//获取class为hello的div
        console.log(obj1);
        //var obj1=document.querySelector("div");//返回匹配的第一个元素
        //6.根据css选择器获取,返回集合
        var objs2=document.querySelectorAll("div");
        console.log(objs2);
        }
    </script>
</head>
<body>
    <button onclick="doQuery()">查询获取页面中的元素</button>
    <hr>
    <div id="d1">div1</div>
    <div class="hello">div2</div>
    <div>div3</div>
    <p class="hello">welcome</p>
    <span class="hello">你好</span><br>
    爱好:<input type="checkbox" name="hobby" value="sport">健身
         <input type="checkbox" name="hobby" value="music">听歌
         <input type="checkbox" name="hobby" value="read">阅读
         <hr>
</body>
  

<head>
    <script>
        function doQuery(){
        //根据已有的节点来获取其他节点
        
        //7.在当前节点的内部,根据标签名获取
        var ul=document.getElementById("myul");
        var lis=ul.getElementsByTagName("li");
        console.log(lis);
        //8.查询当前节点的父节点
        var li3=document.getElementById("third");
        console.log("父节点:",li3.parentNode);
        console.log("父节点的父节点:",li3.parentNode.parentNode);
        //9.查询当前节点的所有子元素节点
        console.log("父节点的所有子节点:",li3.parentNode.children);
        //10.查询当前节点的第一个子元素节点
        console.log("第一个子节点:",li3.parentNode.firstElementChild);
        //11.查询当前节点的最后一个子元素节点
        console.log("最后一个子节点:",li3.parentNode.lastElementChild);
        //12.查询当前节点的上一个元素节点
        console.log("前一个兄弟节点:",li3.previousElementSibling);
        //13.查询当前节点的下一个元素节点
        console.log("后一个兄弟节点:",li3.nextElementSibling);
 }
    </script>
</head>
<body>
    <button onclick="doQuery()">查询获取页面中的元素</button>
    <hr>
    <ul id="myul">
        <li>li1</li>
        <li>li2</li>
        <li id="third">li3</li>
        <li>li4</li>
        <li>li5</li>
    </ul>     
</body>
  

 三、访问操作

1、 访问属性

获取/设置DOM对象的属性

​ DOM对象的属性和HTML标签的属性几乎是一样的,一般情况下DOM对象都会存在一个与对应HTML标签同名的属性

​ 两种方式:

  • 直接访问属性

用法:DOM对象.属性 

  • 调用setAttribute()和getAttribute()方法

用法:DOM对象.setAttribute("属性名","属性值") 或 DOM对象.getAttribute("属性名")

<head>
<script>
        //访问属性
        function doproperty(){
            let obj=document.getElementById("baidu");//DOM属性
            let obj1=document.querySelector("#username");//CSS选择器,要加#
            let obj2=document.querySelector("#male");
            console.log(obj);
            //获取属性的值
            console.log(obj.href);
            console.log(obj.target);
            console.log(obj.id);
            console.log(obj.getAttribute("href"));
            console.log(obj1.value);
            console.log(obj2.checked);//checked是一个boolean属性,取值为true、false
            //设置属性的值
            obj.target="_self";
            obj.setAttribute("href","https://www.qq.com")
            obj1.value="alice";
            obj2.checked="true";
        }
</script>
</head>
<body>
 <button onclick="doproperty()">访问属性</button>
    <hr>
    <a href="https://www.baidu.com" target="_blank" id="baidu">点我</a>
    <br>
    用户名:<input type="text" id="username" value="tom"><br>
    性别:<input type="radio" name="sex" id="male" value="male" checked>男
         <input type="radio" name="sex" id="female" value="female" >女<br>

</body>

  2、访问内容

 获取/设置标签中的内容

​ 三种方式:

  • 使用innerHTML

用法:DOM对象.innerHTML 将内容解析为HTML

  • 使用innerText

用法: DOM对象.innerText 将内容作为纯文本,出现转义符时会进行解析

  • 使用textContent

用法: DOM对象.textContent 将内容作为纯文本,出现转义符时会直接保留特性

<head>
<script>
         //访问内容
        function doContent(){
            var obj=document.getElementById("mydiv");
            //获取内容 
            console.log(obj.innerHTML);//HTML
            console.log(obj.innerText);//纯文本
            console.log(obj.textContent);//纯文本
            //设置内容
            obj.innerHTML="<h1>嘿嘿</h1>";//将内容解析为HTML
            obj.innerText="嘿\n嘿";//纯文本,出现转义符时会进行解析
            obj.textContent="<h1>嘿嘿</h1>";//纯文本,出现转义符时会直接保留特性

        }
</script>
</head>
<body>
 <button onclick="doContent()">访问内容</button>
    <hr>
    <div id="mydiv">
        <h2>hello world</h2>
    </div>     

</body>

 3、访问CSS

获取/设置CSS样式

​ 三种方式:

  • 使用style属性

用法:DOM对象.style.样式属性

如果CSS属性中有短横线-,需要去掉短横线,然后将其后的单词首字母改成大写,如fontSize

  • 使用className属性

用法:DOM对象.className

  • 使用classList属性

用法:DOM对象.classList

通过classList的add()remove()进行类样式的添加和删除

style属性 

<script>
            //访问样式
        function doStyle(){
            var obj=document.getElementById("mydiv");
            //使用style属性
            //获取样式(仅限于行内样式)
            console.log(obj.style.width);
            console.log(obj.style.background);
            console.log(obj.style.height);
            //设置样式
            obj.style.color="red";
            obj.style.width="400px";//必须添加单位,否则不生效
            obj.style.fontSize="30px";//属性中有短横线-,需要去掉短横线,然后将其后的单词首字母改成大写
            obj.style.boderTopRightRadius="10px";

}
 </script>
        <body>
    <button onclick="doStyle()">访问样式</button>
    <hr>
    <div id="mydiv" style="width: 300px;height:300px;background:pink;">
        <h2>hello world</h2>
    </div>
        </body>

className属性 

<style>
            .d1{
                width:300px;
                height:300px;
                background: pink;
            }
            .hello{
                color: red;
                width: 400px;
                font-size: 30px;
                border-radius: 20px;
                border:1px solid grey;
            }
        </style>
        <script>
            //访问样式
        function doStyle(){
            var obj=document.getElementById("mydiv");
            //使用className属性
            obj.className="hello";//将样式d1换成样式hello
            console.log(obj.className);
            
        }
        </script>
<body>
    <button onclick="doStyle()">访问样式</button>
    <hr>
    <div id="mydiv" class="d1">
        <h2>hello world</h2>
    </div>
</body>

 classList属性

 <style>
            .d1{
                width:300px;
                height:300px;
                background: pink;
            }
            .hello{
                color: red;
                width: 400px;
                font-size: 30px;
                border-radius: 20px;
                border:1px solid grey;
            }
            .world{
                text-decoration: underline;
            }
            
        </style>
        <script>
            //访问样式
        function doStyle(){
            var obj=document.getElementById("mydiv");
            //使用classList属性
            //添加类样式
            obj.classList.add ("hello");
            obj.classList.add ("world");
            //删除类样式
            obj.classList.remove ("hello");
            console.log(obj.classList);
  }
        </script>
<body>
<button onclick="doStyle()">访问样式</button>
    <hr>
    <div id="mydiv" class="d1">
        <h2>hello world</h2>
    </div>
</body>

 四、更新操作

​ 节点的创建、添加、修改、删除

方法含义
document.createElement("标签名")创建一个元素节点,即标签
document.createTextNode("文本内容")创建一个文本节点,即标签中的文本内容
node.appendChild(newNode)将一个新的节点newNode添加到指定的节点node中子节点的末尾
node.insertBefore(newNode,refNode)将一个新的节点newNode插入到node节点的子节点refNode之前
node.replaceChild(newNode,refNode)用一个新的节点newNode替换原有的node节点中的子节点refNode
node.removeChild(refNode)删除当前节点中指定的子节点
node.remove()删除当前节点
<script>
            function doUpdate(){
                //1.创建元素节点
                var li=document.createElement("li");
                //2.设置文本内容
                li.innerText="li4";
                //var txt=document.createTextNode("li4");
                //li.appendChild(txt);
                //3.设置属性
                li.id="fourth";
                //li.setAttribute("id","fourth");
                //4.添加到节点中
                var myul=document.getElementById("myul");
                console.log(li);
                //添加到末尾
                //myul.appendChild(li);
                //添加到指定节点前面
                //myul.insertBefore(li,document.getElementById("second"));
                //替换指定的节点
                //myul.replaceChild(li,document.getElementById("second"));
                //删除内部某个子节点
                //myul.removeChild(document.getElementById("second"));
                //删除当前节点
                document.getElementById("second").remove();
                
            }
         
        </script>
<body>
<button onclick="doUpdate()">更新节点</button>
    <hr>
    <ul id="myul">
        <li id="first">li1</li>
        <li id="second">li2</li>
        <li>li3</li>
    </ul>
</body>

标签:console,log,DOM,JavaScript,obj,document,节点,属性
From: https://blog.csdn.net/qq_72013756/article/details/142201508

相关文章

  • JavaScript中if嵌套 assert
    摘要: 本文主要探讨在JavaScript中if嵌套的使用场景以及assert语句在代码调试与逻辑验证方面的作用。通过分析if嵌套的结构与常见用法,结合assert语句在确保程序正确性上的优势,阐述它们在JavaScript编程中的重要性与高效运用方式。一、引言在JavaScript开发中,控制结构......
  • 蓝易云服务器 - ubuntu安装开发javascript ubuntu script教程
    在Ubuntu上安装开发JavaScript的教程如下:打开终端。安装Node.js:运行以下命令安装Node.js。sudoaptupdatesudoaptinstallnodejs安装npm:npm是Node.js的包管理器,运行以下命令安装npm。sudoaptinstallnpm验证安装:通过运行以下命令验证Node.js和npm是否安装成功。node-vnpm-......
  • JavaScript 中的异步任务、同步任务、宏任务与微任务
    JavaScript中的异步任务、同步任务、宏任务与微任务在JavaScript的世界里,理解异步任务、同步任务、宏任务和微任务是非常重要的,它们共同构成了JavaScript独特的执行机制。一、同步任务与异步任务1.同步任务定义:同步任务是在代码执行过程中,按照顺序依次执行的任务......
  • 【JavaScript】LeetCode:707设计链表
    文章目录题目内容题目分析(1)获取第n个节点的值(2)头部插入节点(3)尾部插入节点(4)第n个节点前插入节点(5)删除第n个节点完整代码题目内容题目分析添加哨兵节点dummy。在第n个节点前插入节点时,应该找到第n-1个节点(即前一个节点),才能完成插入操作。在删除第n......
  • 【工具】前端JavaScript代码在线执行器 方便通过网页 手机测试js代码
    【工具】前端JavaScript代码在线执行器方便通过网页手机测试js代码自动补全js代码格式化代码色彩打印日志清空日志待补充<!DOCTYPEhtml><htmllang="zh-CN"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,ini......
  • 哈莫尼斯 手工王国 Harmonis the hand made kingdoms,官方中文,解压即玩,
    游戏截图 哈莫尼斯手工王国HarmonisthehandmadekingdomsHarmonis:手工王国是一款极简策略游戏,让您的创造力成为中心舞台。通过独特的瓷砖塑造生机勃勃的王国,每一块瓷砖都为一个充满活力和动态的世界做出贡献。从郁郁葱葱的森林到干旱的沙漠,探索各种生物群落,并在您......
  • JavaScript语法入门六 数据类型
    数据类型JavaScript数据类型有8种,分别是number、bigint、string、boolean、null、undefined、symbol、object。JavaScript是一种弱类型语言,或者说动态类型语言。即每一个变量的类型在定义之后可变化的,JavaScript根据使用情况自动识别。number类型整数、浮点数。范围:常规的数字、Inf......
  • MutationObserver监听DOM变化示例
    示例代码:<template><divclass="it-bottom-button":style="{right:bottomBarRight}"><slot></slot></div></template><script>exportdefault{name:"itBottomBar",componen......
  • JavaScript空值判断
    JavaScript本身没有判断一个变量是不是空值的函数,因为变量有可能是string,object,number,boolean等类型,类型不同,判断方法也不同。所以在文章中写了一个函数,用以判断JS变量是否空值,如果是undefined,null,'',NaN,false,0,[],{},空白字符串,都返回true,否则返回false。functionisEmpty(v){sw......
  • JavaScript之填充数组的五种方法
    点击跳转填充字符串方法填充数组是一种常见的操作,尤其是当你需要初始化数组或填充默认值时。本文将介绍几种不同的方法来填充数组,每种方法都有其适用的场景和用法。1.使用Array.prototype.fill()fill()方法是最直接的填充数组的方式。它可以用指定的值填充数组的所有......