JavaScript中的事件和DOM操作

2023-11-12

JavaScript中的document:

在html页面加载时,浏览器会为每一个标签创造一个对象,可以通过dom操作获得这个对象,多级标签只要多进行几次dom操作,就可以访问到对象
JavaScript中有个一个DOM操作,DOM是个英文缩写
DOM的英文全称是Document Object Model,文档对象模型
像如下的代码,通过docunment.getElementById,就是一个DOM操作
通过docunment获得html中的一个对象,就可以说是DOM操作

同理,你也可以通过类似的手法修改元素的css,例如使用如下代码,
可以把目标元素的背景颜色修改成绿色

document.getElementById("").innerHTML = "";

document.getElementById("").style.backgroundColor = "green";
JavaScript中的事件:

以下为一些常用的JavaScript事件,
在需要设置动作的html元素中设置如下属性,
在 " " 设置自定义的JavaScript函数即可,
以下讲解触发条件


//页面加载时触发
onload=""

//鼠标离开时触发
onmouseout=""

//鼠标经过时触发
onmouseover=""

//文本内容改变时触发(不是实时触发,只在输入完毕触发)
onchange=""

//文本内容选中时触发
onselect="" 

//目标元素选中触发
onfocus=""
JavaScript中的句柄使用:

首先句柄的作用是什么?句柄可以用来给元素添加和移除事件,原本利用元素添加例如onclick属性来设置事件的触发,但是这种方法有一种弊端,就是同一个元素同时只能设置一个事件,如果设置新的事件,就会覆盖原来的事件,使用句柄的方式能够设置多个事件

<script>
	/*首先通过getElementById找到元素*/
    var x = document.getElementById("xid");
	
    /*使用addEventListener添加句柄,第一个值表示类型,"click"表示点击,不能加上"on",第二个值为定义的函数,可以是已有函数,也可以是匿名内部函数*/
    x.addEventListener("click", function () {
        alert("1234");
    });
    
    /*添加已有函数时不需要添加(),如添加abcd函数只需要写上abcd*/
    p.addEventListener("click", abcd);
    function abcd() {
        alert("abcd");
    }
	
	/*可以添加句柄,自然也可以移除句柄,使用removeEventListener() 就可以移除,参数同上*/
</script>
JavaScript中的DOM事件处理:

每次触发DOM事件时都会产生一个event对象,event有如下的属性和方法:

两个属性:
type:事件的类型
target:事件的目标(触发事件的html控件的类型)

两个方法:
stopPropagation():阻止事件的冒泡
preventDefault():阻止事件的默认行为

以下为代码演示(type,target):

<div id="divid">
    <p id="pid">123</p>
</div>

</body>
<script>
    document.getElementById("pid").addEventListener("click", function (ev) {
        alert(ev.target); //显示结果:[object HTMLParagraphElement]
        alert(ev.type);//显示结果:click 
    })
</script>

修改JavaScript代码如下(stopPropagation()):

<script>
    document.getElementById("pid").addEventListener("click", function (ev) {
        alert(ev.target);
        alert(ev.type);
        /*
        一般来说,div中的click是不会被点击触发的
        但根据冒泡规则,div元素的内容也会被跟着触发
        这显然不是我们想要的
        使用stopPropagation()可以停止这种冒泡传递
        */
        ev.stopPropagation();
    })
    document.getElementById("divid").addEventListener("click", function (ev) {
        alert("No");
    })
</script>

修改页面代码如下:

<body>
<a id="aid" href="">html</a>

</body>
<script>
    document.getElementById("aid").addEventListener("click", function (ev) {
    	/*一般点击a元素会默认触发跳转的功能,使用preventDefault()就可以阻止这种默认功能*/
        ev.preventDefault();
    })
</script>
JavaScript中事件的兼容:

DOM0级事件处理:使用例如onclick属性直接给元素添加函数,
优点:书写简单,绝大部分浏览器都支持
缺点:只能添加一个事件

DOM2级事件处理:使用addEventListener,(或者兼容IE需要使用attachEvent()、detachEvent()来实现DOM2级事件处理,参数几乎一样,区别是第一个参数要以"on"开头 )给元素添加事件
优点:可以添加多个事件
缺点:书写略复杂,有年代的浏览器可能不支持

总而言之:使用DOM事件处理时需要考虑浏览器兼容问题,可以使用if…else if…else判断浏览器是否支持DOM2的添加方式(还有兼容IE的DOM2),否则使用DOM0的方式添加事件,如下示例():

	/*以下使用点击作为事件的触发条件*/
    var element = document.getElementById("id");
    
    if(element.addEventListener){
    
        element.addEventListener("click",f);
        
    }else if(element.attachEvent){
    
        element.attachEvent("onclick",f);
        
    }else{
    
        element.onclick = f();
        
    }
    function f() {
    
        ...
        
    }
Javascript使用DOM对象控制HTML元素:
<!--以下为示例得body和script代码-->
<body>
<p name="pname" id="pid">a</p>
<p name="pname" id="pid2">a</p>
<p name="pname">a</p>
<p name="pname">a</p>
<p name="pname">a</p>
</body>
<script>
	/*
	通过getElementsByname可以通过name属性来找到元素,由于name不是id需要有唯一性,所以找到得元素也有可能是一组元素,所以统一返回一个数组
	*/
	var plist = document.getElementsByName("pname");
	/*也可以通过元素得名称查找,同理,也会返回一个数组*/
    var plist = document.getElementsByTagName("p");
    
    
    /*可以通过getAttribute获取元素里的属性*/
    var attribute = document.getElementById("pid").getAttribute("name");
    alert(attribute); //输出结果:pname
	
	/*可以获取,自然也可以修改,第二个值为修改后得内容*/
    document.getElementById("pid").setAttribute("name", "no");
	
	/*可以看看有没有修改成功*/
    alert(document.getElementById("pid").getAttribute("name")); 	//输出结果:no
	
	/*document.body可以直接表示body元素,childNodes会找到body得子元素,但是由于各个浏览器之间得差异,所以结果会有所不同*/
    var childNodes = document.body.childNodes;
    alert(childNodes.length); 
    
	/*可以找到元素得子节点,自然也可以找到元素得父节点,使用parentNode可以找到父节点,与找子节点不同,找父节点不会返回一个数组,因为直接的父节点不会有多个*/
	var parentNode = document.getElementById("pid").parentNode;
    alert(parentNode);
    	
    /*
    JSDOM可不仅仅就只能查看页面已有的信息,还可以自己创建一个节点!
    */
	
	/*获取body元素比较简单,不需要使用id去找了,JavaScript直接提供了简单的方法获取body,*/
    var body = document.body;
    	
    /*createElement表示创建节点,参数为节点的类型*/
    var element = document.createElement("h1");
    	
    /*由于我们创建的是一个h1元素,所以需要设置内容才比较号观察*/
    element.innerHTML="123";
	
	/*在body的子节点末尾添加上新元素*/
    body.appendChild(element);
    
    /*也许你并不想直接添加在末尾,不妨试试使用insertBefore,就像它的名字一样,你可以把新元素插在某个旧元素前面,插入之前你需要旧元素的对象*/
    var pid2 = document.getElementById("pid2");
    
    /*参数(新元素,旧元素)*/
    body.insertBefore(element,pid2);
    	
    /*移除元素就比较简单了,只要找到元素的对象就可以了*/
    body.removeChild(element);
	
	/*offserHeight和offsetWidth可以获取屏幕的高度和宽度,不包括滚动条,如果需要的化,只要把offset改成scroll就行了*/
    alert(document.body.offsetHeight);
    alert(document.body.offsetWidth);
</script>

也可以通过使用setAttribute()设置对象属性
通过getAttribute()可以获得对象属性值
设置css的语法:
对象.style.xxx = xxx;
只要获取了对象,可以直接通过使用style属性设置值

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript中的事件和DOM操作 的相关文章

随机推荐

  • Vue项目环境搭建

    最近想试着自己搭建个简单的接口自动化测试平台 就是前端上传自动化case 后端执行自动化脚本 搭建平台的第一步就是先准备开发环境 后端环境 语言 java 开发工具 IntelliJ IDEA 环境 jdk8 数据库 MySQL 前端 框架
  • TeX,LaTeX和KaTeX简介

    1 TeX TeX 是由著名的计算机科学家 Donald E Knuth 设计和实现的计算机排版系统 TeX 以其高质量的排版输出 特别是数学公式的排版能力而闻名 被广泛用于学术界的科技排版 如果说时间就是生命 那就可以认为 TEX每天都在
  • C语言自增(++)自减(--)运算符原理解析

    关键 自增减 前置 在运算之前改变变量 自增减 后置 在运算之后改变变量 要真正的理解这两句话的内涵 自增减前置在运算之前改变变量 运算时是不变的 即使运算过程中遇到自增减后置时变量也是不变的 因为自增减后置是在运算完成后改变变量 int
  • MySQL 连接(join)介绍

    首先介绍join的用法 以如下两个表为例 博客表 t blog id title typeId 1 aaa 1 2 bbb 2 3 ccc 3 4 ddd 4 5 eee 4 6 fff 3 7 ggg 2
  • php数组的奇数_php数组如何将奇数偶数分开

    PHP如何在不使用循环的情况下将奇数和偶数元素与数组分开 在PHP中 您将获得n个元素的数组 您必须根据元素奇数或偶数将元素与数组分开 也就是说 分别打印奇数数组和偶数数组而不遍历原始数组或使用任何循环 例子 输入 array 2 5 6
  • pandas parse_dates参数

    parse dates 表示将某一列设置为 时间类型 df pd read csv comptagevelo20152 csv sep index col Date parse dates Date parse dates将Date列设置为
  • ubuntu安装 VMware Tools

    1 安装VMware Tools 2 拷贝到 tmp目录下然后解压 cp VMwareTools 10 1 6 5214329 tar gz tmp cd tmp tar xzvf VMwareTools 10 1 6 5214329 ta
  • m3u8 文件格式详解

    简介 M3U8 是 Unicode 版本的 M3U 用 UTF 8 编码 M3U 和 M3U8 文件都是苹果公司使用的 HTTP Live Streaming HLS 协议格式的基础 这种协议格式可以在 iPhone 和 Macbook 等
  • 宏碁电脑开启虚拟化技术_CPU的虚拟化技术有何作用?CPU虚拟化技术如何开启?...

    我们都知道 不管是Intel的CPU 还是AMD的CPU都是支持虚拟化技术的 只要通过搭配主板的BIOS就可以开启虚拟化技术了 因为很多主板出厂时都是默认禁用虚拟化技术的 那么估计很多用户想问 开启CPU的虚拟化技术有什么作用呢 CPU虚拟
  • 紫光同创 FPGA 开发跳坑指南(一)—— 在线 debug

    最近在调试公司一个项目的千兆以太网通信链路 项目用到紫光同创的 FPGA 正好利用空余时间记录一下紫光同创 FPGA 的调试过程 目录 添加 debug core 生成比特流与启动 debug 在线 debug 添加 debug core
  • 机器学习各类算法思路总结二(梯度下降与数据标准化)

    梯度下降 求梯度 实际上 就是求导数 函数在某一个点处求偏导 当函数是一维函数的时候 梯度就是导数 梯度下降 实际上就是在比喻下山的过程 一个人被困在了山上 要下山 从山坡往山的最低点处走 但是山中的浓雾很大 路径无法确定 所以就必须利用自
  • Qt中的QSS Subcontrol

    QSS Subcontrol 普通的 QSS 和 CSS 没什么区别 难度不大 但除此之外 想要使用好 QSS 还必须得掌握好 subcontrol 这个在 CSS 里没有 是 Qt 独有的 什么是 subcontrol 一个复杂的 wid
  • windows安装youcompleteme

    通过vim plug 安装youcompleteme 安装clangd completer python install py clangd completer msvc 16 c系补全需提供编译参数给clangd 两种种方式 安装c 开发
  • windows10安装ubuntu双系统后开机直接进入windows

    windows开机cmd 输入 bcdedit set bootmgr path EFI ubuntu grubx64 efi 重启后 即可出现引导项
  • tkinter绘制组件(39)——滑动控件

    tkinter绘制组件 39 滑动控件 引言 布局 函数结构 响应按钮框架 响应按钮的表示 文本 响应移动 完整函数代码 效果 测试代码 最终效果 github项目 pip下载 结语 引言 swipecontrol直译滑动控件 参考WinU
  • Java实验5

    1 为某研究所编写一个通用程序 用来计算每一种交通工具行驶1000公里所需的时间 已知每种交通工具的参数都是3个整数A B C的表达式 现有两种工具Car007和Plane 其中Car007的速度计算公式为A B C Plane的速度计算公
  • C++:建立文本文件,输入短文放入文件,一行最多80字

    include
  • ddr3仿真遇到的问题

    一 问题现象 一次笔者在承接前任同事项目时 需要对部分功能进行仿真 上电测试时ddr3功能正确 但是仿真时ddr3报错 提示除法操作结果无穷大 如下图 二 解决办法 因为ddr3上电测试功能正常 基本的读写操作应该没有问题 问题大概率在dd
  • Pytorch 使用不同版本的 cuda

    在使用 Pytorch 时 由于 Pytorch 和 cuda 版本的更新 可能出现程序运行时需要特定版本的 cuda 进行运行环境支持的情况 如使用特定版本的 cuda 编译 CUDAExtension 引入的拓展模块等 为了满足应用程序
  • JavaScript中的事件和DOM操作

    JavaScript中的document 在html页面加载时 浏览器会为每一个标签创造一个对象 可以通过dom操作获得这个对象 多级标签只要多进行几次dom操作 就可以访问到对象 JavaScript中有个一个DOM操作 DOM是个英文缩