热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

前端~javascript~webAPI/文档对象模型Dom/Dom树/事件机制/操作元素/实战案例:实现网页计数器

文章目录WebAPI简介DomDom树获取Dom元素事件事件三要素操作dom元素innerHTMLinnerText实战案例:实现网页计数器WebAPI简介什么是AP


文章目录

  • WebAPI简介
    • Dom
    • Dom树
      • 获取Dom元素
        • 事件
          • 事件三要素
      • 操作dom元素
        • innerHTML
        • innerText
    • 实战案例:实现网页计数器


WebAPI简介


什么是API
应用程序接口(API,Application Programming Interface)是基于编程语言构建的结构,使开发人员更容易的创建复杂的功能。API中提供了很多的网络接口供开发者使用。


JS基本上可以分为三大类:


  • ECAMScript:基础的JS语法
  • DOM API:操作网络页面结构
  • BOM API:操作浏览器

本文介绍的webAPI主要包含了DOM 和BOM部分,基础的JS语法在前几篇文章中已经基本介绍了一些,这里就不在介绍。

下面附上API官方参考文档。
https://developer.mozilla.org/zh-CN/docs/Web/API


Dom

什么是Dom


文档对象模型(DOM,全称Document Object Model.)是HTML和XML文档的编程接口。它提供了对文档的结构化表述,并定义了一种方式可以使从程序中对该结构进行访问,从而改变文档的接口,样式和内容。DOM将文档解析为一个由节点和对象(包含属性和方法的对象)组成的集合。


上面是比较复杂 的官方定义,其实就是W3C标准给我们提供了一些已经写好的函数,我们可以直接使用,可以用这些函数来操作网页内容、网页结构、网页样式。


Dom树

当一个新的网页被加载时,浏览器就会创建该页面的文档对象模型(Dom).这个Dom模型会被结构化为一个 存放对象的树结构。这个树结构就是 Dom树。

结构如下:
在这里插入图片描述
Dom树中的一些概念:


  • 文档:一个网络页面就是一个文档,即document表示

  • 元素:页面中的所有标签(tag)都称为元素,即element。

  • 节点:网页中的所有内容都可以称为 节点(像标签节点,文本节点,属性节点,注释节点等),即node.

这些文档在JS源码中就对应了一个个的对象。所以才会称为“文档对象模型”。


获取Dom元素

一个Dom树上面有很多很多的对象,再进行操作之前必须先选中对象。Dom API 中提供了很多能够用来选中对象/元素的函数 在本文中我们只介绍最常用功能最强大的两个。
分别是querySelectorquerySelectAll


只有新版本的浏览器才支持(比如IE9之前并不支持)像主流的 浏览器chrome,firefox,edge都是支持的,没有任何问题。


querySelector

querySelector函数的参数是一个“字符串”,而且这个字符串必须是CSS选择器

当代码中存在多个相同名称的标签时,选择器在进行选择时,会返回被选中元素的第一个(即第一个出现的元素)。
如果想要全部返回,可以使用querySelectAll,会将所有相同名称的标签元素以NodeList(伪数组)的形式,全部返回。


当我们在document上调用这两个方法的时候,相当于从页面对 全局来查找复合要求的元素。
如果是在某个具体的dom对象上调用这两个方法,相当于从这个元素里面来查找复合要求的元素


代码演示:

<!DOCTYPE html>
<html lang&#61;"en">
<head><meta charset&#61;"UTF-8"><title>Title</title>
</head>
<body><!--创建父元素 parent,及三个子元素child1,2,3-->
<div class&#61;"parent"><div class&#61;"child-1">1</div><div class&#61;"child-2">2</div><div class&#61;"child-3">3</div>
</div><script>//选中的结果是一个“元素”&#xff0c;即elemlet elem&#61;document.querySelector(&#39;div&#39;);console.log(elem);
</script>
</body>
</html>

输出结果&#xff1a;
在这里插入图片描述
querySelectAll

和querySelector使用方法类似。

代码演示&#xff1a;

<!DOCTYPE html>
<html lang&#61;"en">
<head><meta charset&#61;"UTF-8"><title>Title</title>
</head>
<body><!--创建父元素 parent,及三个子元素child1,2,3-->
<div class&#61;"parent"><div class&#61;"child-1">1</div><div class&#61;"child-2">2</div><div class&#61;"child-3">3</div>
</div><script>//选中的结果是一个“元素”&#xff0c;即elemlet elem&#61;document.querySelectorAll(&#39;div&#39;);console.log(elem);
</script>
</body>
</html>

输出&#xff1a;
在这里插入图片描述

<div class&#61;"box">abc</div>
<div id&#61;"id">def</div>
<script>var elems &#61; document.querySelectorAll(&#39;div&#39;);
console.log(elems);
</script>

事件

一些复杂的程序&#xff0c;往往涉及到组件之间相互通信。
事件机制&#xff08;event&#xff09;就是非常典型的组件通信机制。


事件是用户和程序之间的桥梁。


JS要构建动态页面&#xff0c;就需要感知到用户的行为&#xff0c;当用户对页面进行的一些操作&#xff08;点击&#xff0c;修改&#xff0c;选择额&#xff0c;浏览&#xff09;等都会在浏览器中产生一个个的事件&#xff0c;当JS捕获到这些事件&#xff0c;就会运行该事件对应的程序&#xff0c;从而实现复杂的交互操作。


事件三要素

1.事件源&#xff1a;被触发的对象
2.事件类型&#xff1a;事件触发的方式
3.事件处理程序&#xff1a;事件触发后&#xff0c;执行的程序。


代码举例&#xff1a;

<!DOCTYPE html>
<html lang&#61;"en">
<head><meta charset&#61;"UTF-8"><title>Title</title>
</head>
<body><input type&#61;"button" value&#61;"我是一个按钮"><script>let button&#61;document.querySelector(&#39;input&#39;);button.onclick&#61;function(){alert("hello");}
</script>
</body>
</html>

上面的代码中&#xff0c;button是事件源&#xff08;用户能操作的元素&#xff09;&#xff0c;click就是事件类型&#xff08;点击事件),通过onlick属性 就能关联到一个具体的事件处理函数。当button触发了click事件(当用户点击了这个按钮后)&#xff0c;就会自动调用onclick对应的函数。


操作dom元素

获取/修改元素内容


在CSS的盒模型中&#xff0c;我们已经知道了一个盒子的组成&#xff1a;外边距、边框、内边距、内容。我们要获取和修改的 就是最后的内容。这个内容可能是一个文本&#xff0c;也可能是一个图片&#xff0c;也可能是个链接等&#xff0c;本质上都是一段html代码片段&#xff0c;我们要获取/修改的内容就是这段html片段。



innerHTML

通过element.innerHTML属性就可以设置和获取该元素的内容。

代码演示&#xff1a;

<!DOCTYPE html>
<html lang&#61;"en">
<head><meta charset&#61;"UTF-8"><title>Title</title>
</head>
<body><div class&#61;"parent">hello
</div><button>点击按钮&#xff0c;改变文本</button>
<script>//选中button按钮let button &#61;document.querySelector(&#39;button&#39;);button.onclick&#61;function () {//选中parent元素let parent&#61;document.querySelector(&#39;.parent&#39;);//修改parent的内容parent.innerHTML&#61;&#39;word&#39;;}
</script>
</body>
</html>

运行&#xff1a;
在这里插入图片描述

该属性不仅可以赋值文本&#xff0c;还可以赋值一个html片段。
在这里插入图片描述


innerText

通过element.innerText属性可以设置和修改一个元素及其子元素的文本内容。

// 读操作
var renderedText &#61; HTMLElement.innerText;
// 写操作
HTMLElement.innerText &#61; string;

<div><span>hello world</span><span>hello world</span>
</div>
<script>var div &#61; document.querySelector(&#39;div&#39;);// 读取 div 内部内容console.log(div.innerText);// 修改 div 内部内容, 界面上就会同步修改div.innerText &#61; &#39;hello js hello js&#39;;
</script>

通过上面的代码可知&#xff0c;innerText属性无法获取到div内部 html代码片段&#xff0c;只能得到文本内容。


实战案例&#xff1a;实现网页计数器

通过html,css&#xff0c;js目前掌握的知识&#xff0c;我们可以做一个小练习&#xff0c;实现一个简单的计数器&#xff0c;类似的按键功能可以重复添加&#xff0c;所以这里尽量简化&#xff0c;以加减举个例子。


<html lang&#61;"en">
<head><meta charset&#61;"UTF-8"><title>Title</title>
</head><style><!-- 先清除浏览器默认样式 -->*{margin: 0;padding: 0;box-sizing: border-box;}/*设置父元素的样式&#xff1a;长度&#xff0c;宽度&#xff0c;背景色*/.parent {width: 500px;height: 300px;background-color: gray;/*水平位置居中*/margin: 0 auto;}/*子元素screen的样式*/.parent .screen{width: 200px;height: 150px;font-size: 30px;line-height: 150px;color:white;margin: 0 auto;/*位置居中*/text-align: center;}.parent .ctrl{width:360px;height:150px;margin: 0 auto;display: flex;justify-content: space-between;align-items: center;}/*按钮样式*/.parent .ctrl button{width: 100px;height: 50px;font-size: 20px;line-height: 20px;text-align: center;border-radius: 10px;/*去掉自带的黑色边框*/border:none;}.parent .ctrl button:active{color:white;background-color: blue;}
</style>
<body>
<div class&#61;"parent">
<!--通过screen来显示数字--><div class&#61;"screen">0</div><div class&#61;"ctrl"><!-- 子元素按钮--><button id&#61;"plusButton">&#43;</button><button id&#61;"zeroButton">清零</button><button id&#61;"minusButton">-</button></div>
</div><script>// 按钮监听事件
let plusButton&#61;document.querySelector(&#39;#plusButton&#39;);plusButton.onclick&#61;function(){//1.选中screen 元素let screen&#61;document.querySelector(&#39;.screen&#39;);//2. 取出其中的元素let content&#61;screen.innerHTML;//3.将内容&#43;1let result&#61;parseInt(content)&#43;1;//4.重新写入内容screen.innerHTML&#61;result;}let minusButton&#61;document.querySelector(&#39;#minusButton&#39;);
minusButton.onclick&#61;function() {//1.选中screen 元素let screen &#61; document.querySelector(&#39;.screen&#39;);//2. 取出其中的元素let content &#61; screen.innerHTML;//3.将内容-1let result &#61; parseInt(content) - 1;//4.重新写入内容screen.innerHTML &#61; result;
}let zeroButton&#61;document.querySelector(&#39;#zeroButton&#39;);
zeroButton.onclick&#61;function() {//1.选中screen 元素let screen &#61; document.querySelector(&#39;.screen&#39;);//2. 取出其中的元素let content &#61; screen.innerHTML;//3.将内容-1let result &#61; parseInt(content) *0;//4.重新写入内容screen.innerHTML &#61; result;
}</script>
</body>
</html>

效果如下&#xff1a;
在这里插入图片描述


推荐阅读
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • JavaScript和HTML之间的交互是经由过程事宜完成的。事宜:文档或浏览器窗口中发作的一些特定的交互霎时。能够运用侦听器(或处置惩罚递次来预订事宜),以便事宜发作时实行相应的 ... [详细]
  • React基础篇一 - JSX语法扩展与使用
    本文介绍了React基础篇一中的JSX语法扩展与使用。JSX是一种JavaScript的语法扩展,用于描述React中的用户界面。文章详细介绍了在JSX中使用表达式的方法,并给出了一个示例代码。最后,提到了JSX在编译后会被转化为普通的JavaScript对象。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • 本文由编程笔记小编整理,主要介绍了使用Junit和黄瓜进行自动化测试中步骤缺失的问题。文章首先介绍了使用cucumber和Junit创建Runner类的代码,然后详细说明了黄瓜功能中的步骤和Steps类的实现。本文对于需要使用Junit和黄瓜进行自动化测试的开发者具有一定的参考价值。摘要长度:187字。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • 本文介绍了响应式页面的概念和实现方式,包括针对不同终端制作特定页面和制作一个页面适应不同终端的显示。分析了两种实现方式的优缺点,提出了选择方案的建议。同时,对于响应式页面的需求和背景进行了讨论,解释了为什么需要响应式页面。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有