JavaScript DOM中获取元素、事件基础、操作元素、节点操作

news2024/10/7 4:35:29

目录

JavaScript事件三要素

常见的事件​编辑

2、执行事件的步骤:

1. 获取元素

1.1 方式

1.1.1 根据ID获取 

1.1.2 根据标签名获取

1.1.3 通过html5新增的方法获取

1.1.4 特殊元素获取

2. 事件基础

2.1 事件三要素

2.1.1 事件源

2.1.2 事件类型

2.1.3 事件处理程序

2.2 执行事件的步骤

2.3 常见的鼠标事件

3. 操作元素

3.1 改变元素内容

3.1.1 innerText

3.1.2 innerHTML

3.2 修改图片 src

3.3 表单属性

3.4 样式属性操作

3.5 排他思想

 3.6 自定义属性的操作

4.节点操作 

4.1 父节点

4.2 子节点

4.3 兄弟节点

4.4 创建节点

4.5 删除节点

4.6  复制节点

4.7 动态生成表格

4.8  三种动态创建元素的区别


JavaScript事件三要素

事件三要素:        a.事件源            b.事件类型                 c.事件处理程序。


事件源:要触发的对象 (一般是名词,事件发起者,比如开关按钮)。


事件类型:怎么触发这个事情 (一般是动词,触发事件,比如点击开关)。


事件处理程序:发生了什么事情 (处理结果,比如灯亮了)。

常见的事件

2、执行事件的步骤:

1.获取事件源
2.为事件绑定
3.添加事件处理程序(以函数赋值的方式)

<body>		
	<button id="btn">点击弹窗</button>
		<div>我是元素</div>
		<script type="text/javascript">
		1.获取事件源
			var btn = document.getElementById('btn');
		2.为事件绑定.onclick事件
		3.添加函数(效果为弹窗)
			btn.onclick = function(){
					alert("这时弹出的对话框")
			}	
			var divv = document.querySelector('div')
			console.log(divv)
			divv.onclick = function(){
				console.log("我被选中了")
			}
		</script>
</body>

1. 获取元素

1.1 方式

1.1.1 根据ID获取 

语法:

var element = document.getElementById('id');

参数:

element是一个 Element 对象。

如果当前文档中拥有特定ID的元素不存在则返回null.
id是大小写敏感的字符串,代表了所要查找的元素的唯一ID.

返回值:

返回一个匹配到 ID 的 DOM Element 对象。

若在当前 Document 下没有找到,则返回 null。

1.1.2 根据标签名获取

语法

document.getElementsByTagName('标签名');

返回值:

返回的是获取过来元素对象的集合,以伪数组的形式存储的
想要依次打印里面的元素对象,可以采取遍历的方式

element.getElementsByTagName()
//可以得到这个元素里面的某些标签

1.1.3 通过html5新增的方法获取

语法

getElementsByClassName('类名');
//根据类名获得某些元素

querySelector(‘’);  
//返回指定选择器的第一个元素对象,里面的选择器要加符号, .nav,#list

querySelectorAll(‘’); 
//返回指定选择器的所有元素对象集合

1.1.4 特殊元素获取

//获取body元素

        document.body;

//获取html元素

        document.documentElement;

2. 事件基础

2.1 事件三要素

2.1.1 事件源

事件被触发的对象

2.1.2 事件类型

如何触发?鼠标点击?鼠标经过?

2.1.3 事件处理程序

通过一个函数赋值的方式完成

<body>
    <button id='btn'>123</button>
    <script>
        var btn = document.getElementById('btn');
        btn.onclick = function() {
            alert('456');
        }
    </script>
</body>

2.2 执行事件的步骤

  • 获取事件源
  • 注册事件(绑定事件)
  • 添加事件处理程序(采取函数赋值的形式)

2.3 常见的鼠标事件

3. 操作元素

3.1 改变元素内容

3.1.1 innerText

element.innerText='';

//从起始位置到终止位置的内容,但他取出html标签,同时空格和换行也会去掉

3.1.2 innerHTML

 element.innerHMTL='';

//从起始位置到终止位置的内容,包括html标签,同时保留空格和换行

3.2 修改图片 src

<body>
    <button id='qwe'>logo</button>
    <button id='asd'>7</button><br>
    <img src="img/logo.png" alt="">
    <script>
        var btn1 = document.getElementById('qwe');
        var btn2 = document.getElementById('asd');
        var img = document.querySelector('img');
        btn1.onclick = function() {
            img.src = 'img/logo.png';
        }
        btn2.onclick = function() {
            img.src = 'img/qitian.png';
        }
    </script>
</body>

3.3 表单属性

表单里面的文字内容是通过value来修改的,不能使用innerHTML来修改。

disabled禁用 

type等

3.4 样式属性操作

element.style; 
//行内样式操作,驼峰命名法

element.className=''; 
// 类名样式操作,className会直接覆盖原先的类名

3.5 排他思想

如果有同一组元素, 我们想要某一个元素实现某种样式,需要用到循环的排他思想

排他算法基础:

所有元素全部清除样式
给当前元素设置样式
注意顺序不能颠倒

 3.6 自定义属性的操作

element.getAttribute('属性');
//获得属性

element.setAttribute('属性','值');
//设置属性值

element.removeAttribute('属性');
//移除属性

自定义属性以“data-”开头

h5新增的获取自定义属性的方法,dataset是能获取data-开头的自定义属性

<body>
    <div data-index="20" data-time-today="2020"></div>
    <script>
        var div=document.querySelector('div');
        // dataset是一个集合里面存放了所有以data开头的自定义属性
        div.dataset.index;
        // 如果自定义属性名有多个-连接,则获取时采用驼峰命名法
        div.dataset.timeToday;
    </script>
</body>

4.节点操作 


4.1 父节点

element.parentNode

4.2 子节点

element.childNodes 
//集合,得到所有的子节点,包括元素节点,文本节点等,不好用

element.children 
//好用

element.firstElementChild 
 //第一个子元素节点

element.lastElementChild   
//最后一个子元素节点

4.3 兄弟节点

node.nextSibling 
//上一个节点,不好用

node.previousSibling 
//下一个节点,不好用

node.nextElementSibling 
//下一个兄弟元素节点,好用,ie9以上

node.previousElementSibling 
//上一个兄弟元素节点,好用,ie9以上

兼容性问题的解决方法:封装一个兼容性函数

4.4 创建节点

document.createElement(‘tagName’) 
<body>
    <ul>
        <li>123</li>
    </ul>
    <script>
        // 1.创建节点 元素节点
        var li = document.createElement('li');
        // 2.添加节点 node.appendChild(child) node-父级,child-子级
        var ul = document.querySelector('ul');
        ul.appendChild(li);
        // 3. 添加节点 node.insertBefore(child,指定元素) 添加在指定元素的前面
        var li2 = document.createElement('li');
        ul.insertBefore(li2, ul.children[0]);
    </script>
</body>

appendChild(child),在后面添加,不影响原来的元素

4.5 删除节点

node.removeChild(child) 
//node-父级,child-子级

留言板案例:

<body>
    <textarea></textarea>
    <button id='fs'>发送</button>
    <ul></ul>
 
    <script>
        var ul = document.querySelector('ul');
        var btn1 = document.getElementById('fs');
        var txt = document.querySelector('textarea');
        btn1.onclick = function() {
            if (txt.value == '') {
                alert('内容不能为空');
            } else {
                var li = document.createElement('li');
                li.innerHTML = txt.value + '\t' + getDate() + '\t' + "<a href='javascript:;'>删除</a>";
                // ul.appendChild(li);
                txt.value = '';
                ul.insertBefore(li, ul.children[0]);
                var as = document.querySelectorAll('a');
                for (var i = 0; i < as.length; i++) {
                    as[i].onclick = function() {
                        ul.removeChild(this.parentNode);
                    }
                }
            }
        }
 
        function getDate() {
            var date = new Date;
            var s = date.getSeconds();
            var m = date.getMinutes();
            var h = date.getHours();
            if (s < 10) {
                s = '0' + s;
            } else if (m < 10) {
                m = '0' + m;
            } else if (h < 10) {
                h = '0' + h;
            }
            return h + ':' + m + ':' + s;
        }
    </script>
</body>

4.6  复制节点

node.cloneNode();

注:

如果括号里面参数为空或者false,则是浅拷贝,只复制节点本身,不复制里面的内容
如果括号里面参数为true,则是深拷贝,复制节点本身以及里面的内容

4.7 动态生成表格

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        table {
            width: 500px;
            margin: 100px auto;
            border-collapse: collapse;
            text-align: center;
        }
        td,
        th {
            border: 1px solid #333;
        } 
        thead tr {
            height: 40px;
            background-color: #ccc;
        }
    </style>
</head> 
<body>
    <table>
        <thead>
            <tr>
                <th>姓名</th>
                <th>科目</th>
                <th>成绩</th>
                <th>操作</th>
            </tr>
        </thead>
        <tbody>
 
        </tbody>
    </table>
    <script>
        var dataset = [{
            name: '赵钱',
            sunject: 'javaScript',
            score: 100
        }, {
            name: '孙李',
            sunject: 'javaScript',
            score: 96
        }, {
            name: '周吴',
            sunject: 'javaScript',
            score: 86
        }, {
            name: '郑王',
            sunject: 'javaScript',
            score: 98
        }]; 
        var tbody = document.querySelector('tbody');
        for (var i = 0; i < dataset.length; i++) {
            var tr = document.createElement('tr');
            tbody.appendChild(tr);
            for (var k in dataset[i]) {
                var td = document.createElement('td');
                tr.appendChild(td); 
                td.innerHTML = dataset[i][k];
            }
            var td = document.createElement('td');
            td.innerHTML = '<a href="javascript:;">删除</a>';
            tr.appendChild(td);
        }
        var as = document.querySelectorAll('a');
        for (var i = 0; i < as.length; i++) {
            as[i].onclick = function() {
                tbody.removeChild(this.parentNode.parentNode);
            }
        }
    </script>
</body>

4.8  三种动态创建元素的区别

document.write()
element.innerHTML
document.createElement()


区别:

  1.         document.write是直接将内容写入页面的内容流,但是文档流执行完毕,则它会导致页面全部重绘
  2.         innerHTML 是将内容写入某个DOM节点,不会导致页面重绘;创建多个元素效率更高(不要拼接字符串,采取数组形式拼接),结构稍微复杂
  3.         document.createElement()创建多个元素效率稍低一点点,但是结构更清晰

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

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

相关文章

如何使用Spring Security控制会话

在 Spring 安全教程的这篇文章中&#xff0c;我们将讨论Spring 安全会话管理。我们将讨论 Spring 安全性的独特功能&#xff0c;这有助于我们高效和安全的会话管理。 春季安全会议 本文将讨论安全会话管理以及 spring 安全性如何帮助我们控制 HTTP 会话。Spring 安全性使用以…

1.4_29 Axure RP 9 for mac 高保真原型图 - 案例28【中继器-后台管理系统6】功能-原位修改数据

相关链接 目录Axure中文学习网AxureShopAxureShop-QA 案例目标1. 了解使用中继器&#xff0c;弹窗修改数据的实现方式 一、成品效果 Axure Cloud 案例28【中继器 - 后台管理系统6】功能-原位修改数据 版本更新一、修改功能   1.1 文本框&#xff1a;点击数据位置&#xff…

InternImage

终于有对抗Transformer 的了~~ 来自浦江实验室、清华等机构的研究人员提出了一种新的基于卷积的基础模型&#xff0c;称为 InternImage&#xff0c;与基于 Transformer 的网络不同&#xff0c;InternImage 以可变形卷积作为核心算子&#xff0c;使模型不仅具有检测和分割等下游…

MySQL删除表数据总结(DELETE、TRUNCATE、DROP)

&#xff08;1&#xff09;当我们不再需要该表时&#xff0c;使用DROP&#xff0c;会连表一起删掉&#xff0c;无法找回。速度很快。 DROP TABLE web_tbl_search;&#xff08;2&#xff09;保留表结构&#xff0c;只删除表数据&#xff0c;使用TRUNCATE&#xff0c;数据删除后…

【unCloud】在使用uni-admin时遇到的问题(原uniCloud-admin)

目录一、前言二、遇到的几个小问题问题一&#xff1a;可登录应用解决方法、步骤一、前言 这是我跟着官方的教学视频学习时遇到的一切小问题&#xff0c;由于我是初学&#xff0c;也没什么很多Vue一类的基础&#xff0c;所以学起来可能才会觉得这些是问题&#xff0c;但是也暂做…

得物视频编辑工具优化全指南

一、背景介绍 随着5G网络的推广和网络带宽的提升&#xff0c;视频成为互联网用户主要的消费载体&#xff0c;用户通过短视频来分享和浏览信息。由此视频的编辑功能越来越重要、越来越普遍。视频编辑的APP也如雨后春笋般涌现。 更好地推动得物App社区业务的发展&#xff0c;得…

测试日常工作中需要具备哪些知识和能力,在需求评审时需要考虑哪些方面,在技术方面评审时需要考虑哪些方面,从什么方面进行设计测试用例

前几天同事分享了一波作为测试需要具备哪些能力&#xff0c;测试用例需要从哪些方面进行设计&#xff0c;我把他分享的内容拷贝了一波&#xff0c;作为以后在测试过程中的参考。 首先需求评审、技术方案评审、测试用例评审三者的关系 一开始&#xff0c;我每次设计测试用例都是…

操作系统 | 实验八 文件管理

一、实验目的 掌握文件的存取方法&#xff1b;掌握文件的逻辑结构和物理结构&#xff1b;掌握存储空间的分配和回收&#xff1b;掌握磁盘管理与调度。 二、实验内容 用程序模拟磁盘的调度过程&#xff0c;并计算各磁盘调度算法包括先来先服务算法、最短寻道时间优先算法、扫…

【大根堆 Java】使用优先队列+HashMap 解决前 K 个高频元素问题

一、题目描述 给你一个整数数组 nums 和一个整数 k &#xff0c;请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 示例 二、思路 本题我们主要完成两个步骤&#xff1a; 统计出每个元素出现的次数找出出现次数最多的前 K 个元素 对第一个步骤&#xf…

IPWorks S/MIME Delphi Edition

IPWorks S/MIME是一套用于电子邮件加密和文档安全的综合组件。IPWorks S/MIME使用公钥密码标准&#xff08;PKCS&#xff09;实现加密和解密的S/MIME标准。 IPWorks S/MIME包括通用的S/MIME组件以及支持S/MIME的IPWorks POP3、IMAP、SMTP、FileMailer和HTMLMailer组件版本。还…

【MMDet】提交PR的学习笔记

官方文档 关于如何向MMDet提交PR&#xff0c;请参考mmcv的文档《拉取请求 — mmcv 1.6.1 文档》 1. Fork最新代码库 当第一次提PR时&#xff0c;需要复刻OpenMMLab代码库&#xff0c;点击 GitHub 页面右上角的Fork按钮即可 将复刻的代码库克隆到本地 git clone fork_mmdet…

trunc函数与truncate函数的一点区别

Oracle的trunc函数与truncate函数都可以对数值进行截取操作 -- 首先看对数值进行截取操作 SELECT TRUNCATE(122.123, 4) from dual; # 122.123 SELECT TRUNCATE(122.123, 3) from dual; # 122.123 SELECT TRUNCATE(122.123, 2) from dual; # 122.12 SELECT TRUNCATE(122.123, 1…

vue3中使用element plus

1、先安装node.js node.js的安装_西瓜君的代码的博客-CSDN博客 2、安装vue-cli vue-cli的安装_西瓜君的代码的博客-CSDN博客 3、安装element-plus Element UI 安装_西瓜君的代码的博客-CSDN博客 4、idea中使用vue3 在idea中使用vue3_西瓜君的代码的博客-CSDN博客 5、 加入 impo…

分享从零开始学习网络设备配置--2.5 提高骨干链路带宽(链路聚合)

任务描述 某公司的网络中心为了接入网络稳定性&#xff0c;在汇聚层交换机的连接连路上使用了多条冗余链路&#xff0c;同时&#xff0c;为了增加带宽&#xff0c;多条冗余链路之间实现端口聚合&#xff0c;提高骨干链路的带宽&#xff0c;这样可以实现链路之间的冗余和备份效果…

Node.js v19,它来了。详解 6 大特性

通译自&#xff1a;6 Major Features of Node.js 19. Details of Node.js 19 new features… | by Jennifer Fu | Oct, 2022 | Better Programming Node 19 在 2022-10-18 发布。 我们知道 Node.js 版本分两种&#xff1a;LTS 和 Current 其中&#xff0c;Current 版本通常每 …

C语言第十课(下):优化井字棋游戏

目录 前言&#xff1a; 一、优手着棋判定&#xff1a; 1.防守型着棋优化&#xff1a; 2.进攻型着棋优化&#xff1a; 二、界面格式优化&#xff1a; 1.Sleep休眠语句&#xff1a; 2.system语句&#xff1a; 三、优化后最终全部代码&#xff1a; 1.头文件game.h: 2.函数功能…

MFIF:Deep Regression Pair Learning

DRPL: Deep Regression Pair Learning for Multi-Focus Image Fusion 本文提出了一种用于多焦点图像融合的新型深度网络&#xff0c;称为深度回归对学习 (DRPL)。与现有的深度融合方法将输入图像分割成小的补丁并应用分类器来判断补丁是否聚焦相比&#xff0c;DRPL直接将整个图…

java springboot获取GitLab上的文件内容

这里以最简单的方式获取git上的文件,并读取文件 第一步:获取主域名host 进入网页版的git,链接为:https://gitlab.***.com 第二步:获取access_token 在git网页端登录后的右上角用户头像下拉菜单的settings页面===>再点击settings页面的左侧菜单栏中的Access Tokens选…

Shell 脚本编程(二) —— 条件判断 (test命令) + 多路分支语句(if 、case)

test 命令可以用于判断文件类型以及值的比较&#xff0c;test 判断条件为真&#xff0c;返回 0&#xff1b;条件为假&#xff0c;返回 1。 目录 一、条件判断 (1) 整数判断 (2) 字符串判断 (3) 文件判断 二、if 语句 1、语法结构 2、实际运用 三、case语句 一、条件判断…

【毕业设计】图像识别跌倒检测算法研究与实现 - python 深度学习 机器学习

文章目录0 前言1 简介2 实现方法2.1 传统机器视觉算法2.2 基于机器学习的跌倒检测2.2.1 SVM简介2.2.2 SVM跌倒检测原理2.2.3 算法流程2.2.4 算法效果2.3 深度学习跌倒检测2.3.1 最终效果2.3.2 网络原理3 最后0 前言 &#x1f525; Hi&#xff0c;大家好&#xff0c;这里是丹成…