JavaScript操作DOM对象

news2024/11/28 18:59:41

DOM 是 JavaScript 操作网页的接口,全称为“文档对象模型”

(Document Object Model)。它的作用是将网页转为一个

JavaScript 对象,从而可以用脚本进行各种操作(比如对元素增删

内容)

节点的类型有七种 :

Document:整个文档树的顶层节点

DocumentType:doctype标签

Element:网页的各种HTML标签 ,比如a标签 br等

Attribute:网页元素的属性(比如class="right")

Text:标签之间或标签包含的文本 ,文本也算节点

Comment:注释

DocumentFragment:文档的片段(不常用忽略)

节点树:

浏览器原生提供document节点,代表整个文档

document
// 整个文档树

除了根节点,其他节点都有三种层级关系

  • 父节点关系(parentNode):直接的那个上级节点
  • 子节点关系(childNodes):直接的下级节点
  • 同级节点关系(sibling):拥有同一个父节点的节点

Node.nodeType属性:

不同节点的nodeType值不同

文档节点(顶层节点):9,,对应常量 Node.DOCUMENT_NODE

元素节点:1 ,对应常量Node.ELEMENT_NODE

属性节点:2,对应常量Node.ATTRIBUTE_NODE

文本节点:3,对应常量Node.TEXT_NODE

文档片断节点:11,对应常量Node.DOCUMENT_FRAGMENT_NODE

可以用来判断节点类型:

 if (document.nodeType==9){
        console.log("这是document文档节点")
    }

访问节点:

使用getElement系列方法访问指定节点:

getElementById():根据id获取特定DOM元素

getElementsByName():根据name属性的值获取元素

getElementsByTagName():根据标签名获取元素



document.getElementsByName('myInput')。
document.getElementsByTagName('div'):

通过这个str可以是一个数组,访问0来获取对应的值

var str = document.getElementsByTagName("div")[0]
console.log(str);

否则就显示:

var str = document.getElementsByTagName("div");
console.log(str);

修改标签内的内容:innerHTML

这样就可以达到通过JS修改页面内容

<div>aaa</div>
<div>bbb</div>

<script>
    var str = document.getElementsByTagName("div")[0]
    str.innerHTML="蛋蛋";
</script>

document.getElementsByClassName():

也可以通过innerHtml修改

<input class="input01">aa</input>

<script>
    var str02 = document.getElementsByClassName("input01");
    console.log(str02);
</script>

输出内容就是这样,可以用这种数组的方式输出具体的

var str02 = document.getElementsByClassName("input01")[0];

document.getElementById('myElement'):

通过s这个方法可以直接输出,就不像上面的需要读一群然后挨个输出,因为id只有一个

var str03 = document.getElementById("打打");
console.log(str03);

document.querySelector() :

方法接受一个 CSS 选择器作为参数,返回匹配该选择器的元素节点。如果有多个节点满足匹配条件,则返回第一个匹配的节点。如果没有发现匹配的节点,则返回 null。

var el1 = document.querySelector('.myclass');

document.querySelectorAll():

document.querySelectorAll 方法与 querySelector 用法类似,区别是返回一个NodeList 对象,包含所有匹配给定选择器的节点

var elementList =document.querySelectorAll('.myclass');

根据层次关系访问节点:

访问节点:

感觉跟脱了裤子放屁一样。。。

属性名称

描述

parentNode

返回节点的父节点

document.getElementById("child").parentNode;

childNodes

返回子节点集合,childNodes[i]

var childNode = document.getElementById("child").parentNode;这个返回的值childNode是一个集合

firstChild

返回节点的第一个子节点

lastChild

返回节点的最后一个子节点

nextSibing

获取当前节点的下一个兄弟节点

document.getElementById("first").nextSibling;

previousSibing

获取当前节点的上一个兄弟节点

element属性:

和上面比多了一个element,是因为上面的会把换行也当作节点,而带element的不会这样

属性名称

描述

firstElementChild

返回节点的第一个子节点

lastElementChild

返回节点的最后一个子节点

nextElementSibling

下一个节点

previousElementSibing

上一个节点

element对象属性:
Element.id:

Element.id 属性返回指定元素的 id 属性,该属性可读写

var p = document.querySelector('p');
p.id 

Element.className:

var div = document.getElementById('myDiv');
div.className

节点信息

nodeName:节点名称

nodeValue:节点值

nodeType:节点类型

需要举例子补充

操作节点:

操作节点属性:

getAttribute("属性名")

setAttribute("属性名","属性值")

创建节点:
createElement(tagName)创建一个标签名为tagName的新元素节点
var newDiv = document.createElement('div');
newDiv.innerHTML="你好小蛋蛋";
// 将新创建的div添加到body中
document.body.appendChild(newDiv); 
//打印标签
console.log(newDiv);

document.createTextNode():

用来生成文本节点( Text 实例),并返回该节点。

A.appendChild(B) 把B节点追加至A节点的末尾

也可以添加内容

var newDiv = document.createElement('div');
// 使用 document.createTextNode 创建文本节点
var newContent = document.createTextNode('Hello');
//新创建的节点添加这个新建内容
newDiv.appendChild(newContent);
// 将新创建的 div 添加到 body 中
document.body.appendChild(newDiv);

document.createAttribute():

生成一个新的属性节点( Attr 实例),并返回它

这里放入属性值和属性不再使用appendChild

使用value给属性赋值

使用setAttributeNode把赋值后的属性放到标签里面

 var text = document.createElement("p");
    //创建属性
    var id = document.createAttribute("id");
    //直接用value给属性赋值
    id.value = "first";
    //把赋值后的属性放到标签p里
    text.setAttributeNode(id);
    console.log(text);

insertBefore(A,B) 把A节点插入到B节点之前
cloneNode(deep) 复制某个指定的节点

删除和替换节点:

removeChild( node) 删除指定的节点

replaceChild( newNode, oldNode) 用其他的节点替换指定的节点

container.replaceChild(newNode, oldNode);

操作节点的样式:
style属性:
document.getElementById("titles").style.color="#ff0000"; 
document.getElementById("titles").style.fontSize="25px ";

  • onclik:当用户单击某个对象时调用事件
  • onmouseover:鼠标移到某元素之上
  • onmouseout:鼠标从某元素移开
  • onmousedown:鼠标按钮被按下

  <div id="myDiv" onclick="changeColor()">点击我!</div>

    <script>
        function changeColor() {
            // 随机生成颜色
            const randomColor = '#' + Math.floor(Math.random()*16777215).toString(16);
            // 改变 div 的背景颜色
            document.getElementById('myDiv').style.backgroundColor = randomColor;
        }
    </script>

function over(){
        document.getElementById("cart").style.backgroundColor="#ffffff";
        document.getElementById("cart").style.zIndex="100";
        document.getElementById("cart").style.borderBottom="none";
        document.getElementById("cartList").style.display="block";
        document.getElementById("cartList").style.position="relative";
        document.getElementById("cartList").style.top="-1px";
}

className属性:

HTML元素.className="样式名称"

function over(){
     document.getElementById("cart").className="cartOver";
     document.getElementById("cartList").className="cartListOver";
     }
function out(){
     document.getElementById("cart").className="cartOut";
     document.getElementById("cartList").className="cartListOut";
     }

获取元素的样式:

HTML元素.style.样式属性;

document.getElementById("titles").style.color="#ff0000"; 
document.getElementById("titles").style.fontSize="25px ";

总结:操作元素属性,内容,样式

方法

说明

getAttribute("属性名")

根据元素名获得元素属性值

setAttribute("属性名","属性值")

设置元素某个属性的值

className

操作元素的class属性()

e.className = "chen";

innerHTML

操作元素内容

li.innerHTML = "孙悟空";

innerText

操作元素文本内容

li.innerText= "孙悟空";

e.style.css

操作css,只能操作行内样式

value

操作表单元素值

赋值:document.getElementById("cityname").value = 103;

注意:checked是boolean值,在单选框和多选框里面经常出现,像这种给checked赋值就就可以等于true或false

//单选框赋值,性别
var sexs = document.getElementsByName("sex");
//默认男
sexs[0].checked = true;

重要例题:表单取值,和表单赋值

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form>
    用户名:<input type="text" id="username"/><br>
    密码:<input type="password" id="userpassword" autocomplete="current-password"><br>
<!--    多选框-->
    爱好:<br>
    <input  class="lovers" value="111" type="checkbox">唱
    <input class="lovers" value="222" type="checkbox">跳
    <input class="lovers" value="333" type="checkbox">RAP
    <br>



<!--    单选框-->
    性别:<br>
         <input name="sex" value="1"  type="radio">男
         <input name="sex" value="0" type="radio">女<br>
<!--    下拉列表-->
    国家:
    <select id="cityname">
        <option value="101">中国</option>
        <option value="102">美国</option>
        <option value="103">鹰国</option>
    </select>
    <br>
</form>
<button onclick="qvZhi()">立即注册</button>
<button onclick="fuZhi()">表单赋值</button>

<script>
    function qvZhi(){
        //用户名
       var user =  document.getElementById("username").value;
       console.log("用户名"+user);
       //密码
        var password =  document.getElementById("userpassword").value;
        console.log("密码"+password);

        //爱好,多选框
        var lovervalue = document.getElementsByClassName("lovers");
        var lovers = new Array();
        for (var i=0;i<lovervalue.length;i++){
            //如果被选中,放到lovers数组中
            if (lovervalue[i].checked){
                lovers.push(lovervalue[i].value);

            }

        }
        console.log("爱好value有:"+lovers)

        //性别单选框
        //当用户选择一个单选框时,它的 checked 属性会变为 true。这意味着该单选框被选中。如果单选框没有被选中,则其 checked 属性为 false
        var sexs = document.getElementsByName("sex");
        var sex = 1;
        for (var i = 0;i <sexs.length;i++){
            //判断boolean值
            if (sexs[i].checked){
                sex = sexs[i].value;
            }
        }
        console.log("性别value为:"+sex);

        //下拉列表,国家
        var city = document.getElementById("cityname").value;
        console.log("国家value为:"+city)

    }
    function fuZhi() {
        //用户名赋值
        document.getElementById("username").value="张三";
        //密码赋值
        document.getElementById("userpassword").value="111222";
        //爱好赋值

        var lovers = document.getElementsByClassName("lovers");
        for (var i=0;i<lovers.length;i++){
            lovers[2].checked = true;
            lovers[0].checked = true;
        }
        //单选框赋值,性别
        var sexs = document.getElementsByName("sex");
            //默认男
            sexs[0].checked = true;


        document.getElementsByName("sex").checked="0";
        //下拉列表赋值,国家
        document.getElementById("cityname").value = 103;

    }

</script>

</body>
</html>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于STM32的智能家居--硬件接线

分配GPIO 1.首先分配串口通讯引脚&#xff0c;该开发板中有三组串口引脚分别分配如图所示。 2.分配SPI。 3.其他为普通GPIO口&#xff0c;B8,B9模拟IIC协议与OLED屏幕进行通讯。

GEE数据集:美国玉米、大豆和冬小麦 QDANN 30m 产量图/数据集

目录 QDANN 30m Yield Map for Corn, Soy, and Winter Wheat in the U.S美国玉米、大豆和冬小麦 QDANN 30m 产量图 简介 数据集预处理 代码 引用 许可 QDANN 30m Yield Map for Corn, Soy, and Winter Wheat in the U.S美国玉米、大豆和冬小麦 QDANN 30m 产量图 简介 …

指针——数组(指针)传参

&#xff08;一&#xff09;前文问题答案解析 1、代码 int(*pa[10])[5] 的解析 某人&#xff1a;嗯&#xff0c;有*pa&#xff0c;这不很明显是个指针嘛&#xff0c;然后 [5] 说明是个数组指针&#xff0c;int类型&#xff0c;[10]。。。。 这这这&#xff0c;很明显不是指针。…

【笔记】Day2.3.3自定义异常+2.3.4resource注入

此项目一共写了两个自定义异常 因为&#xff1a; 1.前后端交互的响应码&#xff08;如200&#xff0c;401&#xff09;大差不差 区别几乎只在于响应结果中的msg和code表达是否成功 2.而微服务的接口之间调用采用restful方式 状态码要使用标准的http状态码 如&#xff1a;200…

【Linux探索学习】第四弹——Linux权限管理详解:理解用户、组和权限之间的关系

前言&#xff1a; 在前面我们已经学习了Linux的基础指令&#xff0c;相信大家对Linux已经有了一定的认识&#xff0c;今天我们来学习Linux权限的相关知识点&#xff0c;Linux权限是Linux初学者必须要掌握的内容 目录 一、Linux下用户类型 二、权限基本概念 三、权限的表示 四…

SpringBoot整合web中使用jsp

1、在pom.xml文件中导入jsp依赖的jar包&#xff0c;一个是jstl标签&#xff0c;一个是jsp的引擎 <dependency><groupId>org.apache.taglibs</groupId><artifactId>taglibs-standard-spec</artifactId><version>1.2.5</version> <…

窗口售票系统1.0版本

本窗口售票系统实现了三个售票窗口的随机售票&#xff0c;实现随机到某一个窗口买票&#xff0c;总票余量都会减少&#xff0c;即三个窗口共享同一个票余量。若票余量小于一次性购票量&#xff0c;则提示报错&#xff1b;若车票售罄&#xff0c;则代码结束运行。 代码实现&…

代码随想录算法训练营第三十天|491. 非递减子序列,46. 全排列,47. 全排列 II,332. 重新安排行程,51. N 皇后,37. 解数独

491. 非递减子序列&#xff0c;46. 全排列&#xff0c;47. 全排列 II&#xff0c;332. 重新安排行程&#xff0c;51. N 皇后&#xff0c;37. 解数独 491. 非递减子序列46. 全排列47. 全排列 II332. 重新安排行程51. N 皇后37. 解数独 491. 非递减子序列 给你一个整数数组 nums…

技术成神之路:设计模式(二十)装饰模式

介绍 装饰模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许在不改变对象自身的情况下&#xff0c;动态地为对象添加额外的职责。这个模式通常用于增强或改变对象的功能。 1.定义 装饰模式通过创建一个装饰类&#xff0c;将功能动态地添加…

网站设计公司怎么评估?2024网站定制公司哪家好

在选择一家网站建设公司时&#xff0c;需要采取一些筛选方法来评估其能力和专业性。可以通过查看公司的案例展示、项目经验、团队规模等方面来评估公司的实力。同时&#xff0c;需要了解公司是否有与自己业务相似的项目经验&#xff0c;以便更好地满足自己的需求。在选择公司时…

win0删除 Windows.old

参考&#xff1a;https://blog.csdn.net/xitongzhijia_abc/article/details/126270452 win10如下所示&#xff1a; 打开 设置–>系统—>存储

Ps:PDF 演示文稿

Ps菜单&#xff1a;文件/自动/PDF 演示文稿 Automate/PDF Presentation PDF 演示文稿 PDF Presentation命令提供了创建 PDF 演示文稿的多种选项&#xff0c;用户可以添加当前打开的文件或手动选择文件&#xff0c;选择背景颜色、字体大小等&#xff0c;设置演示文稿的页面切换间…

哪个牌子充电宝性价比高?2024年精选性价比排行榜充电宝推荐

在数字化生活日益普及的今天&#xff0c;充电宝作为我们移动设备的“能量加油站”&#xff0c;其重要性不言而喻。无论是商务出行、旅行探险还是日常通勤&#xff0c;一款性价比高、安全可靠的充电宝都是不可或缺的伴侣。然而&#xff0c;面对市场上琳琅满目的充电宝品牌与型号…

芯课堂 | Synwit_UI_Creator(μgui)平台之图像处理篇

今天小编给大家介绍的是UI_Creator&#xff08;μgui&#xff09;平台下关于图像处理的选项。 UI_Creator&#xff08;μgui&#xff09;平台图片类控件有图像控件和分级图像控件&#xff0c;均包含以下选项&#xff1a; 1、消除水波纹&#xff1a; 由于16位真彩色&#xff08…

MySQL常用语句(二)

#数据修改 #insert insert语句用于将一行或多行插入到表中。insert语句的语法&#xff1a; 在insert into子句之后的括号内指定表名和逗号分隔列的列表&#xff0c;然后将括号内相应列的逗号分隔值放在values关键字之后。创建一个名为tasks的新表来练习insert语句&#xff1a…

火山引擎边缘智能×扣子,拓展AI Agent物理边界

9月21日&#xff0c; 火山引擎边缘智能扣子技术沙龙在上海圆满落地&#xff0c;沙龙以“探索端智能&#xff0c;加速大模型应用”为主题&#xff0c;边缘智能、扣子、地瓜机器人以及上海交大等多位重磅嘉宾出席&#xff0c;分享 AI 最新趋势及端侧大模型最新探索与应用实践。 …

C++继承深度剖析:从理论到实践的跨越

✨✨小新课堂开课了&#xff0c;欢迎欢迎~✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C&#xff1a;由浅入深篇 小新的主页&#xff1a;编程版小新-CSDN博客 前言&#xff1a; 前面我们已经学了很多有关…

纠删码参数自适应匹配问题ECP-AMP实验方案(中)

6.方法设计 6.1.数据获取 为了收集不同的文件大小和纠删码参数对性能指标的影响&#xff0c;本文在Hadoop平台上进行了模拟实验。Hadoop是一种开源的分布式存储和计算框架&#xff0c;它可以支持不同类型的纠删码&#xff0c;并提供了一些应用程序接口和工具来测试和评估纠删…

Rstudio 绘制elecdaily的时序图与预测

&#xff08;1&#xff09;绘制上述数据的时序图并将温度作为解释变量对日度耗电量建模。为什么是它们之间是正向相关关系&#xff1f; head(elecdaily,20) %>% as.data.frame() %>% ggplot(aes(xTemperature, yDemand)) ylab("电量能耗 %") xlab("温度…