【JavaWeb】了解JavaScript DOM API

目录

1、什么是DOM

1.1、DOM树

1.2、 了解事件

2、常用的DOM API

2.1、选中页面元素

2.2、获取/修改元素内容

2.2.1、innerHTML和innerText

 2.2、获取/修改元素属性

2.3、获取/修改表单元素属性

3、JQuery框架的简单了解和使用

4、代码案例:实现聚合索引功能

5、代码案例:实现表白墙


1、什么是DOM

DOM全称为Document Object Model 。是页面文档模型,html中的每个标签都是可以映射到JS中的一个对象的,标签中的内容都可以通过JS对象感知到,JS对象修改对应的属性能够影响到标签的展示,通过这样的DOM API就可以让JS代码来操作页面元素。

JavaScript主要是由基础语法部分(ECMAScript)、操作页面结构(DOM API)和BOM API(操作浏览器)这三部分组成;我们知道要完成一个程序,光有语法是不够的,对于JS来说,除JS语法外,还需要掌握一些WebAPI,这邪恶API是浏览器对JS代码提供的功能,即DOM和BOM;DOM是页面文档对象模型,可以对页面中的元素进行操作,而BOM是浏览器对象模型,可以对浏览器窗口进行操作。下面我们来了解DOM。


1.1、DOM树

我们在用前端代码完成一个页面的时候,可以感受到,他的代码格式是一个树形结构。

🌈 概念解释:

  • 文档:一个页面就是一个文档,使用document表示
  • 元素:页面中所有的标签都称为元素,使用element表示
  • 结点:网页中所有的聂荣都可以成为结点(标签结点、注释结点、文本结点、属性结点),使用node表示。

1.2、 了解事件

🍂基本概念

JS要构建动态页面,就要感知到用户的行为。用户对于页面的一些操作(点击、选择、修改等)操作都会在浏览器中产生一个个事件,被JS获取到,从而进行更复杂的交互操作。

🍂事件的三要素

  1. 事件源:那个HTML元素触发的
  2. 事件类型:是点击,选中还是修改
  3. 事件处理程序:进一步如何处理,往往是一个回调函数

🍂示例

<body><button id="btn">点我一下</button><script>var btn = document.getElementById('btn');btn.onclick = function(){alert("你好世界");}</script>  
</body>

✨注意:

  • btn按钮就是事件源
  • 点击就是事件类型
  • function这个匿名函数就是事件处理程序
  • 其中btn.onClick = function()这个操作成为注册事件/绑定事件

这个匿名函数就相当于一个回调函数,这个函数不需要程序员主动来调用,而是交给浏览器,由浏览器自动在合适的时机(触发点击操作时)进行调用。


2、常用的DOM API

在DOM中,任何一个页面,都会有一个document对象,是页面的一个全局对象,所有的DOM API都是通过document对象来展开的。

2.1、选中页面元素

这里我们了解三个方法:

1️⃣querySelector函数可以用来选择元素,是通过传入CSS选择器来达到目的的选择的范围是位与之前所存在的选择器,没有找到,返回值为null也可以在任何元素(标签)上使用,不仅仅是文档(document对象)。调用这个方法的元素作为本次查找的根元素

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>document</title>
</head>
<body><div class="one">abc</div><div id= 'id'>efg</div><h3>你好世界</h3><style>.one{width:50px;height:50px;text-align: center;line-height: 50px;background-color: rgb(200, 150, 150);}#id{width:50px;height:50px;text-align: center;line-height:50px;background-color:rgb(0,255,255);}</style><script>var elem1 = document.querySelector('.one');console.log(elem1);var elem2 = document.querySelector('#id');console.log(elem2);var elem3 = document.querySelector('h3');console.log(elem3);</script></body>
</html>

 要注意使用querySelector函数如果符合选择的标签在页面中有多个,就只会选择在页面中第一次出现的标签。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>js demo2</title>
</head>
<body><ul><li>你好</li><li>世界</li><li>!!!!</li></ul><script>var elem1 = document.querySelector('li');console.log(elem1);</script></body>
</html>

 2️⃣querySelectAll函数的使用方式和上面的类似,如果想把符合选择的元素都选中就可以使用querySelectorAll函数。使用该函数会返回一个类似于数组的对象,用法和数组相同

<body><ul><li>你好</li><li>世界</li><li>!!!!</li></ul><script>var elem1 = document.querySelectorAll('li');console.log(elem1);</script></body>

 将得到的数组对象里面的元素展开查看,会发现很多的属性,这些属性都是DOM原生的一些属性。

 

 3️⃣使用getElementById函数也可以选中页面中的元素。这个方法返回的是一个匹配特定ID的元素(Element对象),若在当前文档(Document对象)下没有找到,则返回null;由于元素ID在大部分情况下要求是独一无二的,这个方法自然而然的成为了一个高效查找特定元素的方法。

<body><img width="200px" height="120px" id="img_logo" src="D:/风景.jpg"><p></p><input onclick="upImg()" type = "button" value="更换图片"><script>function upImg() {var sg_img = "D:/风景2.jpg";document.getElementById("img_logo").src = sg_img;}</script>  
</body>


2.2、获取/修改元素内容

2.2.1、innerHTML和innerText

 在选中元素之后,就可以使用innerHTML属性来获取/修改一个标签里面的内容了。下面我们通过这个简易的猜数字游戏程序来了解innerHTML属性。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>js demo2</title>
</head>
<body><div><h3>猜数字游戏</h3>       玩家输入一个1~10的数字:<input id="input_num" type="text"><p></p><input type="button" value="查看结果" onclick="selectResult()"></div>//用来接收最终结果<div id="result_div"></div><script>function selectResult(){var randomNum = 1+Math.floor(Math.random()*10);var userInputMun = document.getElementById('input_num').value;var msg;if(randomNum == userInputMun){msg ="<h4>恭喜你,猜对了</h4>";}else{msg = "<h4>抱歉,猜错了,正确的数字是:"+randomNum+"</h4>";}//先获取到事件源var name = document.getElementById("result_div");//修改页面内容,将div标签中的内容修改成为msg对象中的内容name.innerHTML = msg;  }</script>  
</body>
</html>

 需要注意的是,通过innerHTML是可以获取到div内部的html结构的,比如下面的代码,会将div标签中的html代码也获取到,而InnerText只能获取文本内容,并不能获取html结构,innerHtml使用的场景比innerText更多。

<body><div><span>hello world</span><span>hello world</span></div><button class="but">点我一下</button><script>var but = document.querySelector(".but");but.onclick = function(){var div = document.querySelector('div');console.log(div.innerHTML);}</script>
</body>

 

 innerText属性的用法和innerHTML相似,他显示的文本内容。还是用猜数字游戏的代码。

name.innerText = msg;  


 2.2、获取/修改元素属性

上面我们介绍了修改元素(标签)中的内容,我们还可以在代码中使用DOM直接获取元素的属性并修改元素的属性,比如我们实现一个点击一张图片就可以切换到另一个图片,然后再点击切换回来。这个案例中我们将点击事件设置为修改图片路径,也就是修改src属性。

<body><style>img{height:200px;}</style><img src="D:/scenery.jpg" alt=""><script !src>var img = document.querySelector('img');console.dir(img);img.onclick = function(){if(img.src.indexOf('wo')!== -1){img.src = 'D:/scenery.jpg';}else{img.src = 'D:/scenery2.jpg';}      }</script>
</body>

一个标签中具体有哪些属性可以修改,可以使用console.dir()函数来显示获取的标签中的所有属性。

 


2.3、获取/修改表单元素属性

这里把表单元素单拎出来是因为,表单中有一些特备的属性是普通标签没有的,主要需要区别的是一些表单元素想要获取其中用户输入的内容的话是不能通过innerHTML拿到的,这是因为input、textarea...这些标签元素都是但标签,是没有内容的,正确的获取/修改的方式应该是通过这写标签的value属性来进行。

比如input标签,还是在文本框中实现一下计数功能,同样的要注意拿到的value属性的值也是字符串类型的,要注意进行类型转换。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><input type="text" id="text" value="0"><input type="button" id="btn" value='点我+1'><script>var text = document.querySelector('#text');var btn = document.querySelector('#btn');btn.onclick = function () {var num = +text.value;console.log(num);num++;text.value = num;}  
</script></body>
</html>

  •  input具有一个重要的属性value,这个value决定了表单元素的内容
  • 如果是输入框,value表示输入框的内容,修改这个值会影响到界面显示;在界面上修改这个值也会影响到代码中的属性
  • 如果是按钮,value表示按钮的内容,可以通过这个来实现按钮中文本的替换。

🍂代码示例:全选/取消全选按钮

  1. 点击全选按钮,则选中所有选项
  2. 只要某个选项取消,则自动取消全选按钮的勾选状态。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<input type="checkbox" id="all">我全都要 <br>
<input type="checkbox" class="girl">貂蝉 <br>
<input type="checkbox" class="girl">小乔 <br>
<input type="checkbox" class="girl">安琪拉 <br>
<input type="checkbox" class="girl">妲己 <br>
<script>// 1. 获取到元素var all = document.querySelector('#all');var girls = document.querySelectorAll('.girl');// 2. 给 all 注册点击事件, 选中/取消所有选项all.onclick = function () {for (var i = 0; i < girls.length; i++) {girls[i].checked = all.checked;}}// 3. 给 girl 注册点击事件for (var i = 0; i < girls.length; i++) {girls[i].onclick = function () {// 检测当前是不是所有的 girl 都被选中了. all.checked = checkGirls(girls);}}// 4. 实现 checkGirlsfunction checkGirls(girls) {for (var i = 0; i < girls.length; i++) {if (!girls[i].checked) {// 只要一个 girl 没被选中, 就认为结果是 false(找到了反例)return false;}}// 所有 girl 中都没找到反例, 结果就是全选中return true;}
</script></body>
</html>

3、JQuery框架的简单了解和使用

JQuery是一个JavaScript库,JQuery极大的简化了JavaScript编程。我们将创建的html文件和JQuery框架程序放在一个目录中,也可以通过jQuery的路径来引入。想要使用的时候我们在html文件的head标签内部使用scirpt标签通过它的属性src就可以引用经当前的html文件中。

通过猜数字游戏来了解一下JQuery的使用。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script src="E:\360MoveData\Users\26542\Desktop\jquery.min.js"></script>
</head>
<body><div><h2>猜数字游戏</h2>玩家输入一个1~10的数字: <input id="input_num" type = "text"><p></p><input type="button" value="查看结果" onclick="selectResultJq()"><div id="result_div">456</div></div><script>// jquery猜数字游戏//jquery对JavaScript内置的函数没有处理,还是使用JavaScript原生的函数。//jQuery只是对拿组件的时候(操作DOM树的时候),处理方式和原生的api不同function selectResultJq(){var randomNum = 1+Math.floor(Math.random()*10);//我们可以使用$表示jQuery,也可以直接写jQuery,更建议使用jQuery表示,//因为我们在使用$表示jQuery时,JS的其他框架也会使用$,当我们只是用jQuery一种外部框架的时候//可以表示jQuery,但是当由多个外部的框架的时候,使用$就会出错。//原生的写法:document.getElementById("input num").value;var userInputNum = jQuery("#input_num").val();if(randomNum==userInputNum){msg = "<h4>恭喜你,猜对了</h4>";}else{msg = "<h4>抱歉,猜错了</h4>";}//原生的写法:document.getElementById("result_div").innerHTML = msg;jQuery("#result_div").html(msg);}</script>
</body>
</html>

 上面的代码显示结果使用的是显示html标签内的内容,我们也可以使用jQuerresult_div").text(msg);显示文本内容。

 使用 jQuery("#result_div").html();可以获取内容,使用jQuery("#result_div").html(msg);可以修改内容


4、代码案例:实现聚合索引功能

在实现这个代码之前,我们需要了解一下,前面博客中没有说到的iframe标签。他是HTML内联框架元素,表示嵌套上下文浏览(浏览器展示文档的环境),他能将另一个HTML页面嵌套到当前的页面中。

🌈代码示例

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>聚合搜索</title><script src="E:\360MoveData\Users\26542\Desktop\jquery.min.js"></script>
</head>
<body><div style="width:100% ;text-align: center;"><input type="button" value="必应" onclick="upSearch('https:www.bing.com/')">&nbsp;&nbsp;&nbsp;<input type="button" value="搜狗" onclick="upSearch('https:www.sogou.com/')">&nbsp;&nbsp;&nbsp;<input type="button" value="360" onclick="upSearch('https:www.so.com/')">&nbsp;&nbsp;&nbsp;</div><hr><iframe id="ifm" style="width:100%;height:600px" src="https://www.bing.com" ></iframe><script>function upSearch(url){//先是通过jQuery()拿到组件,然后使用attr来设置属性,将src属性设置成传过来的urljQuery('#ifm').attr("src",url);}</script>
</body>
</html>

​​​​​​​

 


5、代码案例:实现表白墙

代码示例:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>表白墙</title><script src="E:\360MoveData\Users\26542\Desktop\jquery.min.js"></script>
</head>
<body><div><h2>表白墙</h2>谁&nbsp;&nbsp;&nbsp;&nbsp;:<input id="username"><p></p>对谁&nbsp;&nbsp;:<input id="tousername"><p></p>说什么:<input id="msg"><p></p><input type="button" value="提 交" onclick="mysub()"><p></p><div id="div_allmsg"></div></div><script>function mysub(){var iptUserName = jQuery("#username");var iptToUserName = jQuery("#tousername");var iptMsg = jQuery("#msg");//1 、非空校验if(iptUserName.val().trim()==""){//tirm函数用来去除空格,这句代码的意思就是将输入框中的没有输入或者输入空格的情况选出来并给出提示。alert("请先输入你的名字!")//focus函数的作用就是聚焦,当iptUserName对应的输入框中,没有输入内容的时候,点击提交光标会回到第一个输入框中。iptUserName.focus();return;}if(iptToUserName.val().trim()==""){alert("请先输入对方的名字!")iptToUserName.focus();return;}if(iptMsg.val().trim()==""){alert("请先输入信息!")iptMsg.focus();return;}//2、将内容展示在表白墙jQuery('#div_allmsg').append(iptUserName.val()+"对"+iptToUserName.val()+"说:"+iptMsg.val()+'<p></p>');//3、清空输入的内容iptUserName.val("");iptToUserName.val("");iptMsg.val("");}</script></body>
</html>

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ruoyi单体项目与Echarts4.2.1地图集成时的思路及解决办法

目录 背景 一、相关数据 1、湖南省2021全省地区生产总值 2、湖南Geojson数据 二、Ruoyi集成设计与实现 1、自定义地图注册 2、湖南地图引用 3、图表初始化及数据绑定 4、实际效果 总结 背景 在之前博客中&#xff0c;介绍了Echarts和Ruoyi集成的一些博客基于Echarts2.X的…

味尚食品 味尚拉面半干面是一种非常经典的中式面食

尊敬的客户&#xff0c;您好&#xff01;感谢您对我们电商平台的关注&#xff0c;我们很高兴为您介绍我们平台上的一款热销产品——味尚拉面半干面。 味尚拉面半干面是一种非常经典的中式面食&#xff0c;其主要特点体现在面条的口感和味道方面&#xff0c;让人感觉仿佛在享受正…

密码学学习笔记(八):Public-Key Encryption - 公钥加密1

简介 公钥加密也被称为非对称加密。下面是一个例子&#xff1a; Bob生成一个密钥对&#xff0c;发布他的公钥&#x1d443;&#x1d43e;&#x1d435;, 保管密钥&#x1d446;&#x1d43e;&#x1d435; 私有的Alice使用&#x1d443;&#x1d43e;&#x1d435; 加密明文M…

Windows系统中将markdown文件批量转化为PDF

需要将一个文件夹下的多个md文件转化为PDF 下载安装pandoc 官网下载地址&#xff1a;Pandoc &#xff0c;下载位置如下图。 下载后按照默认文件路径安装完成 使用everything软件查找pandoc.exe文件路径&#xff0c;如下图&#xff1a; 安装完成之后就可以在cmd窗口或Window…

深度学习技巧应用22-构建万能数据生成类的技巧,适用于CNN,RNN,GNN模型的调试与训练贯通

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下深度学习技巧应用22-构建万能数据生成类的技巧&#xff0c;适用于CNN,RNN,GNN模型的调试与训练贯通。本文将实现了一个万能数据生成类的编写&#xff0c;并使用PyTorch框架训练CNN、RNN和GNN模型。 目录&#xff1…

Jupyter Notebook的内核添加新的虚拟环境

最近&#xff0c;在搭建环境的时候发现 Jupyter Notebook 的内核只有基础的python和pytorch&#xff0c;现在我想要在 Jupyter Notebook 中使用新的虚拟环境。 下面是解决的方法&#xff1a; &#xff08;1&#xff09;首先在Anaconda Prompt中激活虚拟环境&#xff0c;比如我…

LIN总线与RS485总线

LIN&#xff08;Local Interconnect Network&#xff0c;局部互连网络&#xff09;总线和RS485都是用于设备间通信的串行通信协议。下面我将分别列出它们的优势和劣势。 LIN总线的优势&#xff1a; 简单性&#xff1a;LIN总线的硬件和协议简单&#xff0c;易于实现和维护。成…

设计模式之装饰者模式-TS中装饰器介绍

装饰器的基本介绍 装饰器是一种特殊类型的声明&#xff0c;它能够被附加到类声明&#xff0c;方法&#xff0c;访问符&#xff0c;属性或参数上。 装饰器使用expression这种形式&#xff0c;expression求值后必须为一个函数&#xff0c;它会在运行时被调用&#xff0c;被装饰的…

SQL专家云回溯某时间段内的阻塞

背景 SQL专家云像“摄像头”一样&#xff0c;对环境、参数配置、服务器性能指标、活动会话、慢语句、磁盘空间、数据库文件、索引、作业、日志等几十个运行指标进行不同频率的实时采集&#xff0c;保存到SQL专家云自己的数据库中。因此可以随时对任何一个时间段进行回溯。 趋势…

vue项目打包并配置到iOS工程中

一、修改vue项目的配置文件 将config文件夹里面的index.js中的 assetsPublicPath的值修改为“./” Webpack.prod.conf.js 中output添加参数publicPath:./ 在webpack.base.conf.js里 publicPath: process.env.NODE_ENV 生产 &#xff1f;./ config.build.assetsPublicPath :…

flutter聊天界面-Text富文本表情emoji、url、号码展示

flutter聊天界面-Text富文本表情emoji、url、号码展示 Text富文本表情emoji展示&#xff0c;主要通过实现Text.rich展示文本、emoji、自定义表情、URL等 一、Text及TextSpan Text用于显示简单样式文本 TextSpan它代表文本的一个“片段”&#xff0c;不同“片段”可按照不同的…

web-html的基本用法

web前端代码基本用法 <html> <head><meta charset"utf-8"><!-- charset 属性规定 HTML 文档的字符编码。要是没有规定字符编码的话是有可能乱码的 -->待到秋来九月八&#xff08;head&#xff09;<!-- 头部就是直接写在最上面的文字&…