JavaScript【转】

  以下内容转载和参考自:w3school的JavaScript学习内容,HTML JavaScript。

  JavaScript 使 HTML 页面更具动态性和交互性,前面我们都是在代码中一开始就将元素的值、属性、style样式写死,使用JavaScript 的话就可以对这些内容动态的更改设置,如按钮点击的时候对按钮文本进行修改,JavaScript还可以用于表单验证等。

  • HTML 定义网页的内容
  • CSS 规定网页的样式和布局
  • JavaScript 对网页行为进行编程

1、JS使用

  使用JavaScript的getElementById() 方法可以访问拥有特定 id 的元素,如下所示,在按钮点击的时候获得id为"demo"元素,并设置其文本为当前日期:

  <script> 标签用于定义客户端脚本,<script> 元素即可包含脚本语句,也可通过 src 属性指向外部脚本文件。如下所示的脚步内容获得指定的元素后将其文本设置为"Hello JavaScript!":

   脚本内容中可以定义函数方法,如下所示,当点击“改变文本”按钮的时候会调用displayResult()方法,在该方法中通过getElementById(id)获得了标题元素,然后将标题文本修改为"Have a nice day!":

  通过获得元素的style属性可以设置元素的样式:

   除了style属性,还可以JavaScript还可以设置元素的其它属性,如下通过点击“开灯” 、“关灯”按钮设置img的src属性来实现了开灯、关灯图片的变换使用:

   综上可知,JS可以接收和处理用户的交互,比如定义一个JS方法来处理按钮的点击,在JS方法中还可以设置元素的内容、样式、图片等。

  如下所示,我们在coorDiv的onmousemove(鼠标移动)事件中调用showCoordinates()方法,在coorDiv的onmouseout(鼠标移出)事件中调用clearCoordinates()方法。showCoordinates()方法中是设置XYOutDiv的内容来显示鼠标坐标,clearCoordinates()方法是清除坐标的显示,需要注意的是,这里的坐标不是coorDiv的坐标系而是以整个网页左上角为原点。 

   可以看到,因为XYoutDiv没有设置大小,所以其一开始其不会显示,只会显示p段落,当showCoordinates()中设置其内容后才会显示。这里有两个问题,一个是coorDiv上面会有空隙,这是因为右边的p段落显示的时候默认会有上面的空隙,如果我们把p段落的margin设为0的话,那么coorDiv和p段落上面都没有了空隙。另一个问题是,coorDiv设置了float:left后,XYoutDiv本应在新的一行即coorDiv下面展示,但是本例中其却在coorDiv右边显示,个人猜测由于未设置XYoutDiv的大小,所以系统将其作为p段落来对待。

 

  从前面可以看到,JS代码可以放到<head>中,也可以放到<body>中,甚至可以兼而有之。因为脚本编译会拖慢显示,所以可以将JS放置<body>中最底部来改善其它内容的显示速度。JS代码还可以放到外部文件中,如果相同的脚本被用于许多不同网页的话就可以将脚本代码单独放置一个文件。使用外部JS文件的另一个优势是,已缓存的 JavaScript 文件可加速页面加载。如下所示,按钮点击的时候会调用myFunction()方法,而myFunction()方法定义在另一个文件中:

  

 也可以使用外部网站的JS文件,如:

<script src="https://www.w3school.com.cn/demo/myScript.js"></script>

2、JS语法功能

  JS中有四种方式来输出数据,如下所示,在JS中,变量用var定义,没有赋值的变量其值是 undefined,也可以使用undefined对其进行赋值,如person = undefined:

  除了数值,JS中还有其它的类型,typeof运算符可以获得对应的类型,如typeof 3.14返回的是“number”,对对象、数组、null值(var可以赋值为null,null与undefined值相同但类型不同)typeof返回“object”,对undefined值typeof返回"undefined":

var length = true;                             // 布尔类型
var lastName = "Gates";                      // 字符串
var cars = ["Porsche", "Volvo", "BMW"];         // 数组
var x = {firstName:"Bill", lastName:"Gates"};    // 带两个属性的对象

   通过JS可以定义元素的事件处理程序,HTML元素的事件包括元素被点击、元素内容被修改、网页完成加载等, HTML 事件列表可以参见: W3School JavaScript 参考手册 HTML DOM 事件。 

  除了for循环,JS中也可以使用while循环,switch选择,位运算等。ECMAScript 2015(JS的规范,也称 ES6,相当于是JS根据ES进行了实现,但其也包含ES标准规范未定义的一些其它内容,所以有的JS并不是所有浏览器都支持)引入了 JavaScript 类,使用class来声明一个类,使用new来定义一个类对象。JS中除了数组,还有Set、Map。

  如下为通过JSON.parse()将JSON转换为对象,同时,对象的属性也可以进行增删操作:

  JS中回调函数的使用:

  clearTimeout()和clearInterval()用来停止上面的定时器,其参数为setTimeout()和setInterval()的返回值。 

  如下所示,getFile()方法中下载mycar.html完成后会调用传入的回调方法myCallback,在回调方法中对mycar.html中的内容进行展示:

 3、AJAX

  AJAX(Asynchronous JavaScript And XML)可以在不重载整个页面的情况下,实现了对部分网页的更新,即不刷新页面来更新网页。AJAX可以在页面加载后从服务器请求和接收数据,以及在后台向服务器发送数据。

  AJAX是一项技术,它通过浏览器内建的 XMLHttpRequest 对象来从 web 服务器请求数据,然后通过JavaScript 和 HTML DOM来显示或使用数据,如下所示。Ajax 可使用 XML 来传输数据,但将数据作为JSON 文本或纯文本传输也很常见。

   如下使用了AJAX技术,按钮在点击的时候会通过XMLHttpRequest来请求数据,然后通过JS来显示回应的数据:

4、HTML DOM

  HTML DOM就是页面的文档对象模型(Document Object Model),如下所示,HTML DOM 模型被结构化为对象树,它是关于如何获取、更改、添加、删除 HTML 元素(及其属性和样式)以及HTML事件的标准。HTML DOM 能够通过 JavaScript 进行访问。

  在 DOM 中,所有 HTML 元素都被定义为对象,document 文档对象代表整个网页,可以通过其访问 HTML 页面中的任何元素,如document.head获得<head>元素,document.title获得<title>元素,document.URL获得文档的URL。前面我们知道可以通过document.getElementById(id)来获得指定元素,也可以通过document.getElementsByClassName(className)来获得拥有指定class的所有元素(如下所示),document.querySelectorAll("p.intro")用来获得匹配指定 CSS 选择器(id、类名、类型、属性、属性值等等)的所有元素,比如var aryP = document.querySelectorAll("p.intro") 获得了所有类名为intro的<p>标签。

  如下所示,可以通过表单的onsubmit属性来指定一个表单提交前的判断方法,该方法返回false的话就不会执行提交动作,在该方法中可以通过document.forms来获得所有的表单input元素:

 如下所示为节点树之间的关系,其中<head>还可以有<title>等子节点,<body>可以有<h>、<p>等子节点。通过 JavaScript,您可以使用以下节点属性在节点之间导航:

  • parentNode
  • childNodes[nodenumber]
  • firstChild
  • lastChild
  • nextSibling
  • previousSibling

 

 向网页添加和删除元素的方法如下所示: 

    

  如下为获得类型相同元素集合的两种方法:

  除了在定义元素的时候同时设置事件处理程序,还可以通过JS向指定的元素添加事件处理程序,如下所示。当用户进入后及离开页面时,会触发 onload 和 onunload 事件,在onload 事件中可以检测访问者的浏览器类型和浏览器版本,然后基于该信息加载网页的恰当版本,也可以用来处理cookie。onmouseover、onmouseout、onmousedown、onmouseup为 HTML元素上的鼠标事件:

  也可以使用元素的addEventListener()方法向元素添加指定事件的处理程序,如document.getElementById("myBtn").addEventListener("click", func) 。使用addEventListener()的特色是其会向元素额外添加事件处理程序,它不会覆盖原来添加的事件处理程序,比如可以向元素添加两个"click" 事件。可以向任何 DOM 对象添加事件处理程序而非仅仅 HTML 元素,例如HTML 对象、window 对象,以及其他支持事件的对象,比如 xmlHttpRequest 对象。removeEventListener() 用来删除事件监听器。addEventListener()的第三个参数为布尔类型,默认为false, 其指定事件传播的顺序,比如 <div> 元素内有一个 <p>,然后用户点击了这个 <p> 元素,false的话表示消息从内到外处理,即首先处理 <p> 元素的点击事件,然后是 <div> 元素的点击事件,true的话表示消息从外到内处理。使用 addEventListener()添加事件处理程序的另一个好处是使JavaScript 与 HTML 标记分离,即使在不控制 HTML 标记时也允许您添加事件监听器。

5、BOM

  BOM(Browser Object Model)即浏览器对象模型,DOM规定了JS与HTML文档的对话,BOM规定了JS与浏览器之间的对话。在DOM中document代表了当前网页,BOM中的window对象代表了浏览器窗口,所有全局 JavaScript 对象,函数和变量自动成为 window 对象的成员(全局变量是 window 对象的属性,全局函数是 window 对象的方法),如document.getElementById("id")其实就是window.document.getElementById("id") 。

  window.open()/window.close()为打开新窗口和关闭窗口。

  window.screen包含当前屏幕的分辨率等信息;

  window.location 对象可用于获取当前页面地址(URL)和把浏览器重定向到新页面;

  window.navigator可以获得浏览器相关信息(名称、代码、版本、是否已设置关闭cookie、引擎、浏览器平台(操作系统)等);

  window.innerWidth、innerHeight为浏览器窗口的宽高,也可以通过文档获得窗口的宽度和高度; 

  window.alert()用来弹出警告框(也可以省略window),window.confirm弹出确认框(带一个确认和取消按钮),window.prompt()弹出一个带输入栏的确认框;  

  window.document.cookie为浏览器cookie。

   如下所示的setCookie()方法用来设置cookie,getCookie()用来获得cookie,当用户打开页面会调用checkCookie()方法,在其中通过cookie判断用户是否首次访问,首次访问会提示输入姓名并将其记录cookie,用户下次访问会弹出"欢迎再次光临,name"的弹窗。删除cookie与添加cookie类似,不过cookie值不用填,只需将过期时间expires设置为一个过去的时间即可,如document.cookie = "cookieName=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;"。

   HTML 页面中执行脚本时,页面在脚本完成之前是无响应的,使用Worker 可以在后台运行JavaScript。如下所示,在startWorker()方法中先判断浏览器是否支持Worker,然后Worker没有开启的话就使用指定的JS文件来启动Worker,该JS文件中为Worker后台执行的代码,其中postMessage()用来向HTML 页面发送消息,可以通过Worker的onmessage来设置消息响应程序:

 

5、jQuery

  jQuery 是一个 JavaScript 函数库,它包含HTML 元素选取、元素操作、事件函数,CSS操作,JS特效和动画,HTML DOM遍历和修改,AJAX等功能。同时JQuery对于不同浏览器有很好的兼容性,比如不同浏览器对 AJAX 的实现并不相同,如果你不想编写额外的测试代码的话,就可以使用jQuery中的AJAX功能。使用JQuery会极大地简化 JavaScript 编程。

  jQuery 库位于一个 JavaScript 文件中,可以像引入Bootstrap JS一样引入它。如下使用了 jQuery 的 hide() 函数:当点击button后会隐藏了 HTML 文档中所有的 <p> 元素:

  可以看到,上面引入js文件的时候添加了type类型,而在上面引入Bootstrap的时候并没有指定type,这是因为上面BootStrap中使用的是HTML5,JavaScript 已经是 HTML5 以及所有现代浏览器中的默认脚本语言。如果不想自己托管jQuery库,那么可以从 Google 或 Microsoft 加载 CDN jQuery 核心文件。

 使用Google的CDN:

<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs
/jquery/1.4.0/jquery.min.js"></script>
</head>

 使用Miscrsoft的CDN:

<head>
<script type="text/javascript" src="http://ajax.microsoft.com/ajax/jquery
/jquery-1.4.min.js"></script>
</head>

   使用谷歌或微软的 jQuery,有一个很大的优势:许多用户在访问其他站点时,已经从谷歌或微软加载过 jQuery,所以JQuery已经被缓存,而且大多数 CDN 都可以确保当用户向其请求文件时,会从离用户最近的缓存服务器上返回响应。

  随着HTML5的到来,jQuery现在已经不流行了,因为HTML5中已经完善了浏览器的兼容问题,jQuery 实现的很多功能现在通过几行新标准的JavaScript也能实现。而后面出现的AngularJS、React、vue这些前端框架进一步简化了JS操作,比如它们使用MVVM结构(Model数据模型、View视图UI组件、ViewModel同步View和Model的对象即二者使用ViewModel进行交互)使得数据与视图分离,通过数据来驱动视图,封装了DOM操作,进而使DOM操作从业务代码中移除, 这样使得jQuery的DOM操作便没有了用武之地。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT癌症治疗“困难重重”,真假混讲难辨真假,准确有待提高

近年来&#xff0c;人工智能在医疗领域的应用逐渐增多&#xff0c;其中自然语言处理模型如ChatGPT在提供医疗建议和信息方面引起了广泛关注。然而&#xff0c;最新的研究表明&#xff0c;尽管ChatGPT在许多领域取得了成功&#xff0c;但它在癌症治疗方案上的准确性仍有待提高。…

简易虚拟培训系统-UI控件的应用1

目录 前言 UI结构总体介绍 建立初步的系统UI结构 Image控件 前言 前面的文章介绍了关于Oculus设备与UI控件的关联&#xff0c;从本文开始采用小示例的方式介绍基本的UI控件在系统中的基本作用&#xff08;仅介绍“基本作用”&#xff0c;详细的API教程可参考官方文档&#x…

中级深入--day15

案例&#xff1a;使用BeautifuSoup4的爬虫 我们以腾讯社招页面来做演示&#xff1a;搜索 | 腾讯招聘 使用BeautifuSoup4解析器&#xff0c;将招聘网页上的职位名称、职位类别、招聘人数、工作地点、发布时间&#xff0c;以及每个职位详情的点击链接存储出来。 # bs4_tencent.p…

VScode远程连接主机

一、前期准备 1、Windows安装VSCode&#xff1b; 2、在VSCode中安装PHP Debug插件&#xff1b; 3、安装好Docker 4、在容器中安装Xdebug ①写一个展现phpinfo的php文件 <?php phpinfo(); ?>②在浏览器上打开该文件 ③复制所有信息丢到Xdebug: Installation instr…

使用php实现微信登录其实并不难,可以简单地分为三步进行

使用php实现微信登录其实并不难&#xff0c;可以简单地分为三步进行。 第一步&#xff1a;用户同意授权&#xff0c;获取code //微信登录public function wxlogin(){$appid "";$secret "";$str"http://***.***.com/getToken";$redirect_uriu…

【Java核心知识】ThreadLocal相关知识

ThreadLocal 什么是ThreadLocal ThreadLoacal类可以为每个线程保存一份独有的变量&#xff0c;该变量对于每个线程都是独占的。实现原理为每个Thread类中包含一个ThreadHashMap&#xff0c;key为变量的name&#xff0c;value为变量的值。 在日常使用中&#xff0c;我们可以通…

【React学习】—React中的事件绑定(八)

【React学习】—React中的事件绑定&#xff08;八&#xff09; 一、原生JS <body><button id"btn1">按钮1</button><button id"btn2">按钮2</button><button onclick"demo()">按钮3</button><scr…

Git——Windows平台创建gitee私有仓库详解

目录 1. 安装git 2. gitbash配置 2.1 设置 2.2 生成key 2.3 项目管理 2.3.1 本地新建 2.3.2 clone远程仓库的工程到本地改文件 1. 安装git 默认安装。 2. gitbash配置 2.1 设置 打开gitbash&#xff0c;设置用户名和邮箱&#xff1a; git config --global user.name …

浅析Linux系统I/O模型

文章目录 概述阻塞式I/O模型非阻塞式I/O模型I/O多路复用模型信号驱动式I/O模型异步I/O模型相关参考 概述 在操作系统中&#xff0c;I/O类操作是相对慢速的&#xff0c;应用发起一个I/O操作&#xff0c;需要等待I/O资源就绪后&#xff0c;才能继续后面的处理。这种简单的请求-响…

详解MES中的四大现场执行管理模式

导 读 ( 文/ 3426 ) 制造业是全球经济中至关重要的一部分&#xff0c;随着市场竞争的加剧和客户需求的多样化&#xff0c;企业需要寻找合适的生产方式来提高生产效率、降低成本并保证产品质量。在这个背景下&#xff0c;制造执行系统&#xff08;MES&#xff09;作为连接管理层…

前端基础3——JavaScript基础用法

文章目录 一、基本使用1.1 内部方式1.2 外部导入方式1.3 css标签调用js脚本&#xff08;触发事件&#xff09; 二、Windows对象2.1 对象属性2.2 对象方法 三、数据类型3.1 字符串处理3.2 数组处理3.3 对象处理 四、流程控制4.1 操作符4.2 if判断语句4.3 for循环语句4.4 continu…

2018ECCV Can 3D Pose be Learned from2D Projections Alone?

摘要 在计算机视觉中&#xff0c;从单个图像的三维姿态估计是一个具有挑战性的任务。我们提出了一种弱监督的方法来估计3D姿态点&#xff0c;仅给出2D姿态地标。我们的方法不需要2D和3D点之间的对应关系来建立明确的3D先验。我们利用一个对抗性的框架&#xff0c;强加在3D结构…

【链表OJ 10】环形链表Ⅱ(求入环节点)

前言: &#x1f4a5;&#x1f388;个人主页:​​​​​​Dream_Chaser&#xff5e; &#x1f388;&#x1f4a5; ✨✨刷题专栏:http://t.csdn.cn/UlvTc ⛳⛳本篇内容:力扣上链表OJ题目 目录 leetcode142. 环形链表 II 1.问题描述 2.代码思路 3.问题分析 leetcode142. 环形链…

安全开发-JS应用NodeJS指南原型链污染Express框架功能实现审计WebPack打包器第三方库JQuery安装使用安全检测

文章内容 环境搭建-NodeJS-解析安装&库安装安全问题-NodeJS-注入&RCE&原型链案例分析-NodeJS-CTF题目&源码审计打包器-WebPack-使用&安全第三方库-JQuery-使用&安全 环境搭建-NodeJS-解析安装&库安装 Node.js是运行在服务端的JavaScript 文档参考…

Java 大厂八股文面试专题-设计模式 工厂方法模式、策略模式、责任链模式

面试专题-设计模式 前言 在平时的开发中&#xff0c;涉及到设计模式的有两块内容&#xff0c;第一个是我们平时使用的框架&#xff08;比如spring、mybatis等&#xff09;&#xff0c;第二个是我们自己开发业务使用的设计模式。 面试官一般比较关心的是你在开发过程中&#xff…

javaee之黑马乐优商城2

简单分析一下商品分类表的结构 先来说一下分类表与品牌表之间的关系 再来说一下分类表和品牌表与商品表之间的关系 面我们要开始就要创建sql语句了嘛&#xff0c;这里我们分析一下字段 用到的数据库是heima->tb_category这个表 现在去数据库里面创建好这张表 下面我们再去编…

剑指 Offer 44. 数字序列中某一位的数字(中等)

题目&#xff1a; class Solution { //本题单纯找规律&#xff0c;要注意通过n%digits来判断有几个位数为digits的数 public:int findNthDigit(int n) {long base 9, digits 1; //digits代表位数while(n-base*digits>0){ //该循环是为了确定目标数字所在…

JZ12 矩阵中的路径

剑指Offer编程链接&#xff1a;JZ12 题目描述&#xff1a; 思路&#xff1a;递归回溯的方法&#xff0c;总结一下什么情况需要使用递归&#xff1a; 递归在解决问题时&#xff0c;通常涉及以下情况&#xff1a; 问题可被分解为较小的相似子问题。子问题与原问题具有相同的结…

记录--前端使用a链接下载内容增加loading效果

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 问题描述&#xff1a;最近工作中出现一个需求&#xff0c;纯前端下载 Excel 数据&#xff0c;并且有的下载内容很多&#xff0c;这时需要给下载增加一个 loading 效果。 代码如下&#xff1a; // util…

[dasctf]misc3 chrchrchr.pcapng

webshell 流量分析 php代码部分没啥看的&#xff0c;主要在标黄的部分&#xff0c;裁剪掉前面的字符可base解码 能看到在向a.txt中写入数据 wp # tshark.exe -r chrchrchr.pcapng -T fields -e urlencoded-form.value -Y "urlencoded-form.keyzd2ebbfb26dd" >…
最新文章