文章目录
1、什么是JavaScript
1.1、概述
JavaScript是一本世界上最流行的脚本语言
一个合格的后端人员,必须要精通JavaScript
1.2、历史
ECMAScript它可以理解是JavaScript的一个标准
目前最新的版本是es6
但是大部分浏览器还是只停留在了支持es5代码上
问题:开发环境与线上环境的版本不一致
2、快速入门
2.1、引入JavaScript
1、内部标签
<script>
alert("hello world1");
</script>
2、外部引入
abc.js
alert("hello world2")
index.html
<script src="abc.js"></script>
2.2、基本语法入门
演示代码:
<script>
//数据类型 数据变量名 = 数据变量;
var num = 3;
if (num > 2) {
alert("数字大于2")
} else {
alert("数字不大于2")
}
//控制台打印数据
console.log(num)
</script>
运行效果:
浏览器必备调试须知:
2.3、数据类型
数值、文本、图形、音频、视频
1、变量
var //仅仅不能以数字开头
2、number**
js不区分小数和整数
123 //整数123
123.1 // 浮点数123.1
123e3 //科学计数法
-99 //复数
NaN //not a number
Infinity //表示无限大
3、字符串
‘abc’ “abc”
4、布尔值
true false
5、逻辑运算
&& 两个都为真,结果为真
|| 一个为真,结果为真
! 非
6、比较运算符!!!!重要
=
== //等于(类型不一样,值一样,也会判断为true)
=== //绝对相等(类型一样,值一样,结果为true)
这是一个JS得一个缺陷,坚持使用===
须知:
- NaN===NaN,这个与所有得数值都不相等,包括自己
- 只能同福哦isNaN(NaN)来判断这个数是否是NaN
7、浮点数得问题
console.log((1/3) === (1-2/3))
尽量避免使用浮点数进行运算,因为存在精度问题
使用方式:
console.log(Math.abs(1/3 - (1 - 2/3) < 0.000000001)
8、null和undefined
- null 空
- undefined 未定义
9、数组
//定义一个数组,数组的各个组成成分可以不相同,当出现数组越界的时候,出现的是未定义的提示
var arr = [1, 1, 2, "pan", null, true];
10、对象
//对象封装数据,每个属性之间使用逗号分隔
var pan = {
name: "pan",
age: 123,
sex: "boy",
hobby: ["跑步", "唱歌"],
王者荣耀: "星耀"//在java里面可以使用中文当作变量名
}
测试代码:
<script>
//数组类型
var num = 4;
var arr = [1, 1, 2, "pan", null, true];
//对象封装数据
var pan = {
name: "pan",
age: 123,
sex: "boy",
hobby: ["跑步", "唱歌"],
王者荣耀: "星耀"//在java里面可以使用中文当作变量名
}
效果演示:
2.4、严格检查模式
//此方法定义变量不会出错,但是此时的i变量是全局变量,不要使用
<script>
i =1;
//可以使用该方法定义局部变量
var i = 1;
//推荐用这种方式定义局部变量,局部变量都建议使用let定义
let i = 1;
</script>
<script>
//前提是,IDEA需要使用ES6
//该语句是严格检查模式,用来方式JavaScript的随意性。严格检查模式,此语句应放在第一行,否则不起作用
'use strict'
i = 1;
</script>
3、数据类型
3.1、字符串
1、正常的字符串我们用单引号或者双引号包裹
2、注意转义字符 、
\'
\n
\t
\u4e2d Unicode编码
\x42 ASCLL字符'
3、多行字符串编写
<script>
'use strict'
//此处是一个多行的字符串
let pan = `
pan zhong
qiu
`
</script>
4、模板字符串
//模板字符串
let name = "pan";
let age = 4;
let a = `
你好呀${name}
`;
console.log(a);
5、字符串长度
//可以直接在控制台调用字符串的长度
str.length
6、字符串的可变性。不可变性
7、大小写转换
let name = "pan";
let name1 = "PAN"
//转化成大写
name.toUpperCase()
//转化成小写
name1.toLowerCase()
8、根据字符串进行索引
变量名.indexOf(“索引字符”)//返回的数字是索引字符的序列号
9、截取字符串片段
name
"pan"
name.indexOf("n")
2
name.substring(1)//截取字符串一后面的所有字符串
"an"
name.substring(1,1)
""
name.substring(1,2)//截取字符串包括1,不包括2的字符串
"a"
name.substring(1,3)
"an"
3.2、数组
Array可以包换任意的数据类型
var arr = [1,2,3,4,5,6]
arr[0]
arr[0] = 1
1、长度
arr.length
注意:加入给arr.length赋值,数组大小就会发生变化,如果赋值过小,数组就会被剪切,继而丢失
2、indexOf,通过元素获得下标索引
//获取arr数组中的元素为2的索引值
arr.indexOf(2)
1
字符串的“1” 和数字的1是不一样的
3、slice() 截取Array的一部分,返回新的数组,类似于String中的substring
4、push(),pop() 尾部
//pop:弹出尾部的一个元素
//push:压入到尾部
arr
(7) [1, 2, 4, 5, 6, "s", "12"]
arr.push("df")
8//返回新得数组得长度
arr.pop()
"df"//显示弹出的元素
arr
(7) [1, 2, 4, 5, 6, "s", "12"]
arr.pop()
"12"
arr
(6) [1, 2, 4, 5, 6, "s"]
5、unshift() ,shift() 头部
//unshift:压入到头部
//shift:弹出头部的一个元素
arr
(7) [99, 1, 2, 4, 5, 6, "s"]
arr.unshift("pp")
8//将字符串"pp"压到头部,返回数组的长度
arr
(8) ["pp", 99, 1, 2, 4, 5, 6, "s"]
arr.shift()
"pp"//将头部的元素弹出,并返回被弹出的数据
arr.shift()
99//将头部的元素弹出,并返回被弹出的数据
6、排序sort()
arr= ["e","a","f"]
(3) ["e", "a", "f"]
arr.sort()
(3) ["a", "e", "f"]
7、元素反转reverse()
arr = ["o","h","t"]
(3) ["o", "h", "t"]
arr.sort()
(3) ["h", "o", "t"]
8、拼接数组concat()
arr
(3) ["a", "e", "f"]
arr.concat([1,1,"y"])
(6) ["a", "e", "f", 1, 1, "y"]
注意:concat()并不会修改数组,只是会返回一个新的数组
9、连接符join
arr.join("--")
"a--e--f"
打印拼接数组,使用特定的字符进行连接
10、多维数组
arr = [[1,2],[3,3],["w","df"]]
(3) [Array(2), Array(2), Array(2)]
arr[2][1]
"df"
数组:存储数据(如何存与取,方法都可以自己实现)
3.3、对象
1、js中的对象,{…},键值对描述属性XXX:XXXX,多个属性之间使用逗号隔开,最后一个属性不加逗号!
测试代码:
// var 对象名 = {
// 对象属性变量名:对象属性变量值,
// 对象属性变量名:对象属性变量值,
// 对象属性变量名:对象属性变量值
// }
var person = {
name: "pan zhongqiu ",
age: 21,
hobby: "跑步"
}
测试结果:
person.age
21
person.name
"pan zhongqiu "
person.name = "haha"
"haha"
person.name
"haha"
2、使用一个不存在的对象属性时,不会报错!只是会出现一个未定义的提示
person
{name: "haha", age: 21, hobby: "跑步"}
person.sex
undefined
3、动态的删减属性,通过delete删除对象的属性
person
{name: "haha", age: 21, hobby: "跑步"}
delete person.name
true
person
{age: 21, hobby: "跑步"}
4、动态的添加对象的属性,直接赋值即可
person
{age: 21, hobby: "跑步"}
person.agename = "panzhong qiu "
"panzhong qiu "
person
{age: 21, hobby: "跑步", agename: "panzhong qiu "}
5、判断属性值是否在这个对象中,使用方法:xxx in xxx
person
{age: 21, hobby: "跑步", agename: "panzhong qiu "}
toString in person
false
"toString" in person
true
person.hasOwnProperty("toString")//类似于java中默认实现的toString方法
false
"age" in person
true
6、判断一个属性是否是这个对象自身拥有得hasOwnProperty()
//接5的代码
person.hasOwnProperty("toString")
false
person.hasOwnProperty("age")
true
3.4、流程控制
1、if判断
2、while循环,避免死循环,以及do{}while()
3、for循环
4、forEach循环
5.1的引入的特性
arr.forEach(function (num) {
console.log(num);
})
1
14
5
hh
dfsf
5、for…in循环
var arr = [1, 14, 5, "hh", "dfsf"];
//for in只能用来打印下标
for (let num in arr) {
console.log(arr[num]);
}
1
14
5
hh
dfsf
3.5、Map和Set
ES6 的新特性
Map:
var map = new Map([["pan",100],["zhong",22],["qiu",88]]);
var name = map.get("pan");//获取键的值
map.set("sex","boy");//新添加或者修改元素
map.delete("pan");//根据键删除该元素
map
Map(3) {"zhong" => 22, "qiu" => 88, "sex" => "boy"}
map.set("zhong",00)
Map(3) {"zhong" => 0, "qiu" => 88, "sex" => "boy"}
//使用该方式,可以直接打map集合的所有信息,并且打印的出来的直接是键值对
for(let a of map){
console.log(a);
}
Set:无序不重复的集合
var set = new Set([1,2,2,21,1,4]);
console.log(set)
console.log(set.has(1))
set.delete(1);
console.log(set.has(1))
Set(4) {1, 2, 21, 4}
true
false
3.6、iterator
1、数组遍历:
var arr = [1, 14, 5, "hh", "dfsf"];
//通过for of也可以实现打印
for (let num of arr) {
console.log(num);
}
2、map集合遍历
var map = new Map([["pan",100],["zhong",22],["qiu",88]]);
//通过for of也可以实现打印
for (let num of map) {
console.log(num);
}
3、set集合遍历
var set = new Set([1,2,2,21,1,4]);
//通过for of也可以实现打印
for (let num of set) {
console.log(num);
}
4、函数
4.1、定义函数
定义方式一:
function abs(x) {
if(x >= 0) {
return x;
} else {
return -x;
}
}
一旦执行到了return代表函数结束,返回结果!
如果没有执行return,函数执行完全也会返回结果,结果就是undefined
var abs = function (x) {
if(x >= 0) {
return x;
} else {
return -x;
}
}
function(x){…}这是一个匿名内部类。但是可以把结果复制给abs,通过abs就可以调用函数。两种方法等效
参数问题:JavaScript可以传递任意个参数,也可以不传递参数
问:参数进来是否存在问题?假如不存在参数,如何规避?
答:会出现长度与参数数量不匹配也不会报错。可以在代码里面添加判断语句,继而通过返回异常的方式进行处理
var abs = function (x) {
if (typeof x !== 'number') {
//返回异常处理
throw 'Not a number';
}
if (x >= 0) {
return x;
} else {
return -x;
}
}
arguments
他是JS的一个关键字;
代表,传递进来的所有的参数,是一个数组!
var abs = function (x) {
console.log(x);
//利用关键字arguments对数组进行打印
for (var i = 0; i < arguments.length; i++) {
console.log(arguments[i])
}
}
rest ,ES6引入的新特性,获取除了已经定义的参数之外的所有参数…
//使用...reset的形式定义参数列表,reset只能写在最后面,且必须用...进行标识
function a(a,b,...reset) {
console.log(a);
console.log(b);
//打印出除了a,b以外的剩余的参数列表
console.log(reset);
}
4.2、变量的作用域
1、在JavaScript中,var定义变量实际是有作用域的。
假设在函数体中声明,则在函数体外不可以使用,会主动报错。(非要想实现,则需要使用闭包)
2、如果两个函数使用了相同的变量名,内部函数可以访问外部成员的函数,反之则不行
3、若内部函数变量和外部函数的同名,则会自动屏蔽外部的变量
4、假设在JavaScript中,函数查找变量从自身函数开始,由内向外查找,假设外部存在这个同名的函数变量,则内部函数会屏蔽外部函数的变量
代码演示:
<script>
function pan() {
//等价于自动添加了var y;
var x="x" + y;
console.log(x);
var y = "y";
}
pan()
</script>
结果:
xundefined
说明:js执行引擎,自动提升了y的声明,但是不会提升变量y的赋值
这是在JavaScript建立之初就存在的一个特性。规范,所有的函数定义都放在函数头部,不要乱放,便于代码维护
5、全局变量
6、全局对象window
var x = 1;
//两句效果等价
alert(x);
window.alert(x);
alert(window.x);
var x = "xxx";
window.alert(x);
var old_alert = window.alert;
//此语句也能打印出来
//old_alert(x);
window.alert = function () {
}
//失效
window.alert(123);
//恢复
window.alert = old_alert;
window.alert(345);
JavaScript实际上只有一个全局作用域,任何变量(函数也可以视为变量),假如没有在函数作用范围内找到,就会向外查找,如果在全局作用域没有找到,就会报错RefrenceError
7、唯一全局变量
//唯一全局变量
var pan = {};
//定义全局变量,这样定义的变量就不会自动得绑定到window上了
pan.name = "pan";
pan.age = 11;
pan.sub = function () {
//方法体
}
把自己得代码全部放入自己定义得唯一空间名字中,降低全局命名冲突的问题
8、局部作用域
function pan() {
//let 是ES6出现的关键字,解决局部作用域冲突的问题
//如果使用了var,那么后面的两个语句都会打印
for (let i = 0; i < 10; i++) {
console.log(i);
}
console.log(i)
}
9、常量
在ES6以前,定义常量:只要全部使用的是大写 ,那么我么就约定它是一个常量,建议不要去修改它(程序员之间的约定)
在ES6引入了关键字const,用来定义常量
4.3、方法
在对象内部定义方法的两种方式:
//第一种在对象内部定义方法
var pan = {
name: "zhongqiu ",
birth: 2000,
age: function () {
var now = new Date().getFullYear();
//this默认绑定的是他的上一级,会出现绑定在window上
return now - this.birth;
}
}
//第二种在对象内部定义方法
var getAge = function () {
var now = new Date().getFullYear();
return now - this.birth;
}
var pan = {
name: "zhongqiu ",
birth: 2000,
age: getAge
}
补充关键字 apply
var getAge = function () {
var now = new Date().getFullYear();
return now - this.birth;
}
var pan = {
name: "zhongqiu ",
birth: 2000,
age: getAge
}
var mobian = {
name: "pan mobian ",
birth: 1999,
age: getAge
}
//此句让getAge中的this指向的是pan
//(对象的名字,参数列表([]代表的是空参列表))
getAge.apply(pan, []);
//直接换后面的对象名字就可以了
getAge.apply(mobian, []);
5、内部对象
5.1、Date
标注你对象
typeof 123
"number"
typeof "mobian"
"string"
typeof NaN
"number"
typeof []
"object"
typeof {}
"object"
typeof Math.abs
"function"
typeof undefined
"undefined"
5.1、Date
//基本使用
<script>
var now = new Date();
now.getFullYear();
now.getMonth();
now.getDate();//日
now.getDay();//星期几
now.getHours();
now.getMinutes();
now.getSeconds();//秒
now.getTime();//1578560917912
</script>
let now = new Date(0)
Thu Jan 01 1970 08:00:00 GMT+0800 (中国标准时间)
//传入毫秒数
let now = new Date(1578560917912);
//打印日期
now.toLocaleDateString()
"2020/1/9"
//打印时间
now.toLocaleTimeString()
"下午5:08:37"
//打印全部时间戳
now.toGMTString()
"Thu, 09 Jan 2020 09:08:37 GMT"
5.2、JSON
在JS中一切皆对象,任何js支持的类型都可以用JSON来标识;number,string…
格式:
- 对象使用 {}
- 数组使用 []
- 多有的键值对使用 key:value
JSON字符串和JS对象的转化
var mobian = {
name: "pan mobian",
age: 11,
hobby: "sing"
}
var mobianJSON = JSON.stringify(mobian);
var stringmobian = JSON.parse(mobianJSON);
//执行结果
mobian
{name: "pan mobian", age: 11, hobby: "sing"}
mobianJSON
"{"name":"pan mobian","age":11,"hobby":"sing"}"
stringmobian
{name: "pan mobian", age: 11, hobby: "sing"}
JSON 和JS的区别:
//JSON数据格式,属性与属性值都被双引号包含,且最外层也含有双引号
"{"name":"pan mobian","age":11,"hobby":"sing"}"
//JS数据格式,是以对象的形式显示的
{name: "pan mobian", age: 11, hobby: "sing"}
6、面向对象
ES6之前的写法:
var Student = {
name: "mobian",
age: 11,
run: function () {
console.log(" i can run ")
}
}
var pan = {
name: "panzhongqiu"
}
//类似于继承的思想,pan继承student
pan.__proto__ = student;
function Student(name) {
this.name = name;
}
Student.prototype.hello = function () {
alert("hello")
}
ES6之后的写法:
class Student {
constructor(name) {
this.name = name;
}
hello() {
alert("你好")
}
}
class XiaoXuesheng extends Student {
constructor(name, age) {
super(name);
this.age = age;
}
myGrade() {
alert("我是一个小学生")
}
}
var xiaoxuesheng = new XiaoXuesheng("mobian", 1);
var stu = new Student("pan");
调用方式:
//进行相应的语句,打印结果
xiaoxuesheng.myGrade()
stu.hello()
总结:、
第二种调用方法的本质还是第一种的原型调用,但是书写的方式更加的友好了。
原型链
该术语的意思是,一个类的原型类最终会到达一个循环,Object–>Object
7、操作BOM(Browser Object Model)对象(重点)
1、浏览器的讲解
内核:
- IE6~11
- Chrome
- Safari
- FireFox
三方:
- QQ浏览器
- 360浏览器
2、window
window 代表浏览器窗口
window.innerHeight
625
window.innerWidth
559
window.outerWidth
1366
window.outerHeight
728
alert(1)
//窗口直接打印弹窗
3、Navigator
Navigator封装了浏览器的信息(代表浏览器信息),不建议使用,(容易被人修改)
navigator.appName
"Netscape"
navigator.appVersion
"5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"//内核信息
navigator.userAgent
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"
navigator.platform
"Win32"
4、screen
//电脑屏幕的尺寸
screen.height
768
screen.width
1366
5、location(重要)
//本地地址
location.host
"localhost:63342"
//当前网页的链接
location.href
"http://localhost:63342/pan/day07_js_03/JavaScript/12class%E7%BB%A7%E6%89%BF/index.html?_ijt=vtobgqfijl6a9okepnrua8av82"
//当前网络使用的协议
location.protocol
"http:"
//当前网页想要进行的一个跳转,参数填写目标网址
location.assign(XXX)
//刷新当前的页面
location.reload()
6、document
document待变当前的页面,HTML DOM文档树
//打印当前网页名字,即title标签的内容
document.title
"12class继承"
//将当前页面的名字进行相应的赋值
document.title = "mobian"
"mobian"
其他用法:
<dl id = "app">
<dt>java</dt>
<dd>java</dd>
<dd>java</dd>
</dl>
//获取具体的文档树节点
<script>
var dl = document.getElementById("app")
</script>
获取cookie
document.cookie
//获取到的相对应的cookie值
XXXXXXXX
劫持cookie的原理
//插入一段恶意的JS代码,再根据获取到的cookie值,上传到它自己的服务器
<script sc = "a.js"> </script>
服务器可以将cookie的值设置为:httpOnly
7、history(不建议使用)
history代表浏览器的历史记录
history.back()//后退
history.foeward()//前进
8、操作DOM(Document Object Model)对象(重点)
核心
浏览器网页就hi是DOM树形结构!
- 更新:更新DOM节点
- 遍历DOM节点:得到DOM节点
- 删除:删除一个DOM节点
- 添加:添加一个新的节点
要操作一个DOM节点,就必须要先获得这个DOM节点
1、获取DOM节点(原生代码)
<div>
<h2>标题</h2>
<p id="p1">ID选择器</p>
<p class="p2">类选择器</p>
</div>
<script>
//根据ID获取节点
var one = document.getElementById("p1");
//根据类名获取
var two = document.getElementsByClassName("p2");
//根据标题名获取
var three = document.getElementsByTagName("h2");
</script>
效果展示:
one
<p id="p1">ID选择器</p>
two
HTMLCollection [p.p2]0: p.p2length: 1__proto__: HTMLCollection
three
HTMLCollection [h2]
2、更新节点
操作文本:
//修改文本的值
one.innerText = "456"
//可以动态的插入html语言(自己测试的,只能使用在id选择器上面)
one.innerHTML = '<strong>123</strong>>'
操作JS
one.style.color = "yellow";//属性使用 字符串 包裹
one.style.fontSize = "20px";//如果输入的字符里面包含-,则转换为驼峰命名法
one.style.padding = "2em";
3、删除DOM节点
删除节点的步骤:先获取父节点,再通过父节点,删除自己
//获取想要删除的节点的父节点,并赋值给father
var father = one.parentElement
undefined
father
<div id="parent">…</div>
//根据父节点的标记,对指定的子节点进行删除(方法一)
father.removeChild(father.children[0])
<h2>标题</h2>
father.removeChild(father.children[0])
<p id="p1">ID选择器</p>
father.removeChild(father.children[0])
<p class="p2">类选择器</p>
//查找到想要的id,赋值给一个变量(方法二)
var self = document.getElementById("p1");
//查找到想要的id的父节点
var father = p1.parentElement;
//根据父节点,对之前查找到的子节点进行删除
father.removeChid(self);
整个删除过程是一个动态的,children是在不断的变化的。
4、添加节点
添加一个简单的标签:
//设置新添加的是什么类型的标签
var newp = document.createElement("p");
//给新的标签赋值一个id
newp.id = "p3";
//给新设置的标签设置一段文本内容
newp.innerText = "Hello ,mobian";
//在什么标签的基础上进行添加新建的标签
parent.appendChild(newp);
给添加一个css样式的标签:
var color = document.createElement("style");
color.setAttribute("type", "text/css");
color.innerHTML = "body{background-color:pink;}";
document.getElementsByTagName("head")[0].appendChild(color);
问:还有两个没有解决的问题:这种方法怎么解决?
body = document.getElementById("body");
body.setAttribute("background-color","pink");
body.setAttribute("style", "background-color:pink");
在指定的节点前面进行添加:
var parent = document.getElementById("parent");
var one = document.getElementById("p0");
var two = document.getElementById("p1");
var three = document.getElementById("p2");
//在父节点的基础上,把three插到two的前面
//要包含的节点.insertBefore(新节点,旧节点)
parent.insertBefore(three,two);
9、操作表单(验证)
测试代码:
<form action="post">
<span>用户名:</span><input type="text" id="username"><br/>
<input type="radio" name="sex" value="man" id="man">男
<input type="radio" name="sex" value="women" id="women">女
</form>
<script>
//获取需要的指定的id,并且赋值给一个变量
var usertext_text = document.getElementById("username");
//能够动态的获取到在浏览器界面输入的内容
usertext_text.value
//直接修改浏览器命令行的内容
usertext_text.value = "mobian"
//获取到指定的id值标签
var man_radio = document.getElementById("man");
var women_radio = document.getElementById("women");
//该命令可以查看这个标签是否被选中,如果被选中了,就会提示true,否则就是false
women_radio.checked;
//给标签进行一个赋值,可以直接标签被选中
women_radio.checked = true;
</script>
提交表单验证:
<form action="#" method="post">
<p><span>用户名:</span><input type="text" id="username" name="username"></p>
<p><span>密 码:</span><input type="password" id="password" name="password"></p>
<!--<input type="submit">-->
<button type="submit" onclick="aaa()">提交表单</button>
</form>
//需要引入md5,这是一个特殊的算法,用来对输入的内容进行加密
<script src="https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.min.js"></script>
<script>
var user_text = document.getElementById("username");
var user_password = document.getElementById("password");
function aaa() {
//console.log(user_text.value);
//console.log(user_password.value);
//将输入的密码,使用md5算法以后,再次赋值给密码变量,继而达到加密的效果
user_password.value = md5(user_password.value);
//console.log(user_password.value);
}
</script>
用更加安全的方法提交表单验证(不熟,多理解):
<body>
<form action="https://www.baidu.com" method="post" onsubmit="return aaa()">
<p><span>用户名:</span><input type="text" id="username" name="username"></p>
<p><span>密 码:</span><input type="password" id="input-password"></p>
//新添加一个隐藏表单域,用于隐藏标签
<input type="hidden" id="md5-password" name="password">
<button type="submit">提交表单</button>
</form>
<script src="https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.min.js"></script>
<script>
function aaa() {
var username = document.getElementById("username");
var pwd = document.getElementById("password");
var md5pwd = document.getElementById("md5-password");
md5pwd.value = md5(pwd.value);
alert(1);
//返回true,让这个表单能够实现跳转
return true;
}
</script>
</body>
10.jQuery
jQuery库,里面存在大量的JavaScript函数
1、基础入门
使用格式:
公式:$(selector).action()
selector:选择器代表的就是css中的选择器类型
action:代表想要使用的操作
引入jQuery的两种方式:
<!--引入方式一:直接使用在线的cdn的方法-->
<script src="https://cdn.bootcss.com/jquery/3.4.1/core.js"></script>
<!--引入方法二:下载jQuery在导入文件-->
<script src="../lib/jquery-3.4.1.js"></script>
测试代码:
<body>
<a href="#" id="click">点我</a>
<script>
$('#click').click(function () {
alert('点了');
})
</script>
</body>
2、原生JS于jQuery的区别
//标签选择器
document.getElementsByTagName()
$('p').click()
//id选择器
document.getElementById()
$('#id1').click()
//类选择器
document.getElementsByClassName()
$('.class1').click()
补充一个资源学习的网站:http://jquery.cuishifeng.cn/
3、事件
鼠标事件、键盘事件、其他事件
鼠标点击事件,代码示例:
<head>
<meta charset="UTF-8">
<title>18获取鼠标的点击事件</title>
<script src="../lib/jquery-3.4.1.js"></script>
<style>
#divMove{
width: 500px;
height: 500px;
border: 1px solid red;
}
</style>
</head>
<body>
mouse : <span id="mouseMove"></span>
<div id="divMove"></div>
<script>
$(document).ready(function () {
$('#divMove').mousemove(function (e) {
$('#mouseMove').text('x:'+e.pageX +'与'+ 'y:'+e.pageY)
})
})
</script>
</body>
效果演示:
4、DOM的操作
1、节点文本操作
$('#test-ul li[name=python]').text();//获取值
$('#test-ul li[name=python]').text('设置值');//设置值
$('#test-ul').html();//获取值
$('#test-ul').html(‘<strong>111</strong>’);//设置值
2、css操作
$('#test-ul li[name=python]').css({"color":"red"})
3、元素的显示和隐藏:本质 display:none
$('#test-ul li[name=python]').show()//显示指定的元素
$('#test-ul li[name=python]').hide()//隐藏指定的元素
4、娱乐测试
$(window).width()
$(window).height()
$('#test-ul li[name=python]').toggle()//隐藏就变成显示,显示变成隐藏
5、未来ajax()
$('#from').ajax()
标签:总结,arr,知识,name,age,JavaScript,var,document,pan
From: https://blog.51cto.com/u_15942107/6017187