文章目录
1. 什么是JavaScript
1.1 概述
JavaScript 是一门世界上最流行的脚本语言
Java,JavaScript
一个合格的后端人员,必须精通JavaScript
1.2 历史
ECMAScript可以理解为JavaSript的一个标准
最新版本已经到了es6版本
但是大部分浏览器还只停留在支持es5 版本
开发环境–线上环境 版本不一致
2. 快速入门
2.1 引入JavaScript
- 内部标签引用
- 外部引用
测试代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!--script标签内,写JavaScript代码 -->
<!-- <script>-->
<!-- alert("hello,world");-->
<!-- </script>-->
<!--外部引入-->
<script src="js/qj.js"></script>
<!--不用显示定义type,也默认就是-->
<script type="text/javascript"></script>
</head>
<body>
</body>
</html>
alert("hello,world");
2.2 基本语法入门
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!--JavaScript 严格区分大小写-->
<script>
// 1. 定义变量 变量类型 变量名 = 变量值
var score = 1;
var name = "qinjiang";
// alert(num);
// 2.条件控制
if (score > 60 && score < 70)
{
alert("60~70");
} else if (score > 70 && score < 80)
{
alert("70~80")
} else
{
alert("other");
}
//Console console.log(score) 在浏览器控制台打印变量 sout
//Sources 打断点 刷新页面 调试代码
</script>
</body>
</html>
2.3 数据类型
数值,文本,图形,音频,视频…
变量
var add = "dwada";
number
js不区分小数和整数,Number
123//整数123
123.1//浮点数
1.12e3//科学计数法
-99//负数
NaN//not a number
Infinity//表示无限大
字符串
‘abc’ “abc”
布尔值
true,false
逻辑运算
&&
||
!
比较运算符
=
==
=== 绝对等于(类型一样 值一样结果为true)
这是一个JS的缺陷,坚持不要使用==比较
须知:
- NaN===NaN,false
- isNan(NaN)true
浮点数问题
console.log(1 / 3 === 1 - 2 / 3)
false
尽量避免使用浮点数进行运算
console.log(Math.abs((1 / 3) - (1 - 2 / 3)) < 0.00001)
true
null 和undefined
- null 空
- undefined 未定义
数组
//保证代码可读性,尽量使用中括号[]
var arr = [1,2,3,4,5,"hello",null,true];
new Array(1,2,3,4,'dwa');
取数组下标 越界了就 undefined
对象
对象是大括号,数组是中括号
每个属性之间用逗号隔开,最后一个不用加
var person =
{
name: "qingjiang",
age: 3,
tags: [1, 23, 4,'1221']
}
取对象的值
person.name
2.4 严格检查模式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!-- 前提:IDEA需要支持ES6语法 -->
<!-- 'use strict' 严格检查模式 预防JavaScript 随意性导致的一些问题 -->
<!-- 必须卸载JavaScript第一行 -->
<!-- 局部变量 建议都使用let定义 -->
<script>
'use strict'
let i = 1;
</script>
</head>
<body>
</body>
</html>
3. 数据类型
3.1 字符串
- 正常字符串使用’ ’ 或者" "包裹
- 注意转义字符
\'
\n
\t
\u4e2d \u#### Unicode字符
Ascll字符
- 多行字符串编写
//tab 上面 Esc下面
var msg = `
hello
world
你好呀
`
console.log(msg);
- 模板字符串(ES6新特性)
let name = "myp";
let age = 3;
let msg = `你好呀,${name}`
console.log(msg);
- 字符串长度
str.length
-
字符串的可变性,不可变
-
大小写转换
//注意,这里是方法,不是属性
console.log(student.toUpperCase());
STUDENT
-
student.indexOf(‘t’);
-
student.substring(1);
3.2 数组
Array 可以包含任意的数据类型
var arr=[1,2,3,4]//通过下标取值和赋值
- 长度
arr.length
注意:假如给array.length赋值,数组的大小就会变化 变大为空 变小元素丢失
- indexOf() , 通过元素获得下标索引
arr.indexOf(2)
1
字符串的“1” 和数字1是不同的
- slice() 截取Array的一部分,返回一个新的数组 类似于String 中的subString
arr.slice(3)
(7) [4, empty × 6]
- push() , pop()
//push压入到尾部
//pop弹出尾部的一个元素
arr.push('a','b')
12
arr
(12) [1, 2, 3, 4, empty × 6, "a", "b"]
arr.pop()
"b"
arr
(11) [1, 2, 3, 4, empty × 6, "a"]
- unshift(), shitf()
//unshift 头部插入
//shift 头部弹出
arr.unshift('a','b')
13
arr
(13) ["a", "b", 1, 2, 3, 4, empty × 6, "a"]
arr.shift()
"a"
arr
(12) ["b", 1, 2, 3, 4, empty × 6, "a"]
- 排序 sort
arr=['b','c']
(2) ["b", "c"]
arr.push('a')
3
arr
(3) ["b", "c", "a"]0: "a"1: "b"2: "c"length: 3__proto__: Array(0)
arr.sort()
(3) ["a", "b", "c"]0: "a"1: "b"2: "c"length: 3__proto__: Array(0)
- 元素反转
arr.reverse()
(3) ["c", "b", "a"]
- concat()
arr.concat([1,2,3])
(6) ["c", "b", "a", 1, 2, 3]
arr
(3) ["c", "b", "a"]
注意事项:concat()并没有修改数组,只是会返回一个新的数组
- 连接符 join 打印拼接数组,使用特定的字符串连接
var arr=["c","b","a"]
undefined
arr.join('-')
"c-b-a"
- 多维数组
arr = [[1,2],[3,4],["5","6"]]
(3) [Array(2), Array(2), Array(2)]0: (2) [1, 2]1: (2) [3, 4]2: (2) ["5", "6"]length: 3__proto__: Array(0)
arr[1][1]
4
数组:存储数据(如何存,如何取,方法都可以自己实现)
3.3 对象
若干个键值对
var 对象名={
属性名;属性值,
属性名;属性值,
属性名;属性值,
属性名;属性值
}
//定义了一个person属性,有四个属性
var person = {
name:"yoona",
age:3,
email:"1040843800@qq.com",
score:0
}
js中的对象{…}表示一个对象,键值对描述属性:XX: XXX,多个属性之间使用逗号隔开,最后一个属性不加逗号。
JavaScript中的所有键都是字符串,值是任意对象
- 对象赋值
person.name = "myp"
"myp"
person.name
"myp"
- 使用一个不存在的对象属性,不会报错!
person.haha
undefined
- 动态删减属性 delete删除对象属性
person
{name: "myp", age: 3, email: "1040843800@qq.com", score: 0}
delete person.name
true
person
{age: 3, email: "1040843800@qq.com", score: 0}
- 动态添加 直接给新的属性
person.haha="haha"
"haha"
person
{age: 3, email: "1040843800@qq.com", score: 0, haha: "haha"}
- 判断属性值是否在这个对象中 xx in xx!
'age' in person
true
//继承
'toString' in person
true
-
判断一个属性是否是这个对象自身拥有的 hasOwnproperty
person.hasOwnProperty('toString') false person.hasOwnProperty('age') true
3.4 流程控制
if判断
var age = 3;
if (age > 3)
{
alert("haha");
}
else
{
alert("kuwa");
}
循环 避免死循环
'use strict';
var age = 3;
while (age < 100)
{
age = age + 1;
console.log(age);
}
for循环
for (let i = 0; i < 100; i++)
{
console.log(i);
}
forEach 循环
var age = [12, 214, 24, 32, 3, 4, 5];
age.forEach(function (value)
{
console.log(value)
})
for …in 打印下标
//for(var index in object
for (var num in age)
{
if (age.hasOwnProperty(num))
{
console.log("存在");
console.log(age[num]);
}
}
for of 打印具体的值
'use strict'
var arr = [3, 4, 5];
for (var x of arr)
{
console.log(x);
}
3.5 Map 和 Set
map
//定义 就是一个一个的key-value对
let map=new Map([['a',100],['b',90],['c',80]]);
let a=map.get('a');//取得key为‘a’的值
map.set('a',99);//改变key对应的value值,若key不存在,将会新建一个键值对
map.delete('a');//删除key对应的键值
set
let s=new Set([9,9,6,4,52,1]);//定义,Set会自动去重
s.add(2);//添加值,若set里有,则不会改变
s.has(9);//返回true或者false 判断是否含有元素
s.delete(2);//删除
set:无序的不重复集合
3.6 iterator
ES6新特性
遍历数组
var arr = [3, 4, 5];
for (var x of arr)
{
console.log(x);
}
遍历map
var map = new Map([["tom", 100], ["jack", 90], ["haha", 80]]);
for (let x of map)
{
console.log(x);
}
遍历set
var set = new Set([5, 6, 7]);
for (let x of set)
{
console.log(x);
}
4. 函数
4.1 定义函数
绝对值函数
箭头+ 空格
定义方式一
function abs(x){
if(x >= 0 ){
return x;
}else{
renturn -x;
}
}
//abs()
//NaN
一旦return 方法结束
没有执行return ,函数执行完也会返回结果,结果是undefined
定义方式二
var abs = function(x){
if(x >= 0 ){
return x;
}else{
renturn -x;
}
}
//匿名函数
function(x){…}这是一个匿名函数,但是可以把结果赋值给abs,通过abs可以调用函数!
调用函数
abs(10)//10
abs(-10)//10
参数问题:JavaScript可以传递任意参数,也可以不传递参数
function abs(x)
{
//手动抛出异常
if (typeof x !== 'number')
{
throw'Not a Number';
}
if (x >= 0)
{
return x;
}
else
{
return -x;
}
}
arguments
arguments 是一个JS免费赠送的关键词
代表传递进来的所有数据为一个数组
function abs(x)
{
console.log("x=>" + x);
for (var i = 0; i < arguments.length; i++)
{
console.log(arguments[i]);
}
if (x >= 0)
{
return x;
}
else
{
return -x;
}
}
问题:arguments 包含所有的参数,我们有时有使用多余的参数来进行附加操作,需要排除已有的参数
rest
以前
function aaa(a, b)
{
console.log("a=>" + a);
console.log("b=>" + b);
if (arguments.length > 2)
{
for (var i = 2; i < arguments.length; i++)
{
}
}
}
ES6 新特性,获取除了已经定义的参数之外的所有参数
function aaa(a, b, ...rest)
{
console.log("a=>" + a);
console.log("b=>" + b);
console.log(rest);
}
/*
* aaa(1,23,543,63,654,645,556)
* a=>1
* b=>23
* (5) [543, 63, 654, 645, 556]
undefined*/
rest 必须写在最后,用…标识
4. 2 变量作用域
在javascript中,var定义的变量实际是有作用域的
假设在函数体内定义,在函数体外不可调用(除非闭包)
'use strict'
function qj()
{
var x = 1;
x = x + 1;
}
x = x + 2;
//Uncaught ReferenceError: x is not defined
内部函数可以访问外部函数,反之不行
假设内部函数变量和外部函数变量重名
'use strict'
function qj()
{
var x = 1;
function qj2()
{
var x = 'a';
console.log('inner' + x)
}
qj2();
console.log('outer' + x);
}
qj();
//innera
//outer1
假设在JavaScript中函数查找变量从自身函数开始,由内向外查找,假设外部存在这个同名的变量,这内部函数屏蔽外部变量
提升变量的作用域
结果:xundefined
说明js 执行引擎,自动提升了y的声明,但是不会给y赋值
'use strict'
function qj()
{
var x = 'x' + y;
console.log(x);
var y = 'y';
}
qj();
所有变量定义放在开头,便于代码维护
全局函数
x = 1;
function f()
{
console.log(x);
}
f();
console.log(x);
全局对象 window
var x = "xx";
alert(x);
alert(window.x);//默认所有的全局变量,都会自动帮i挡在window对象下
alert()这个函数本身也是一个window对象
var x = "xx";
window.alert(x);
var old_alert = window.alert;
//old_alert(x);
window.alert = function ()
{
}
//发现alert() 失效了
window.alert(123);
//恢复
window.alert = old_alert;
window.alert(456);
javascript只有一个全局作用域,任何变量(函数)也可以视为变量,假设没有在函数作用内找到,就会向外查找,如果在全局作用域都没有找到,报错。
规范
由于我们所有的全局变量都会绑定到我们的window上,如果不同的js文件,使用了相同的全局变量,冲突。
//唯一全局变量
var KuangApp = {};
//定义全局变量
KuangApp.name = 'kuangshen';
KuangApp.add = function (a, b)
{
return a + b;
}
把自己的代码全部放入自己定义的唯一空间名字中,降低全局命名冲突的问题。
jQuery
局部作用域 let
function aaa()
{
for (var i = 0; i < 100; i++)
{
console.log(i);
}
console.log(i + 1);//出了作用域还能使用
}
ES6关键字let ,解决局部作用域的冲突问题
function aaa()
{
for (let i = 0; i < 100; i++)
{
console.log(i);
}
console.log(i + 1);//Uncaught SyntaxError: Invalid or unexpected token
}
常量 const
const PI = '3.14';//只读常量
console.log(PI);
PI = '123';//报错
4.3 方法
定义方法
方法就是把函数放在对象里面,对象只有两个东西:属性和方法
var kuangshen = {
name: "秦疆",
birth: 2020,
//方法
age: function ()
{
let now = new Date().getFullYear();
return now - this.birth;
}
}
//属性
kuangshen.name
//方法,一定要带括号
kuangshen.age()
function getAge ()
{
let now = new Date().getFullYear();
return now - this.birth;
}
var kuangshen = {
name: "秦疆",
birth: 2020,
//方法
age:getAge()
}
//kuangshen.age() ok
//getAge NaN window
apply
在js中可以控制this指向
function getAge ()
{
let now = new Date().getFullYear();
return now - this.birth;
}
var kuangshen = {
name: "秦疆",
birth: 2020,
//方法
age:getAge()
};
// kuangshen.age() ok
getAge.apply(kuangshen,[])//this ,指向了狂神这个对象,参数为空
5. 内部对象
标准对象
typeof 123
"number"
typeof "123"
"string"
typeof true
"boolean"
typeof NaN
"number"
typeof []
"object"
typeof {}
"object"
5.1 Date
基本使用
var now = new Date();//Wed May 26 2021 20:34:24 GMT+0800 (中国标准时间)
now.getFullYear();//年
now.getMonth();//月 0~11
now.getDate();//日
now.getDay();//星期几
now.getHours();//时
now.getMinutes();//分
now.getSeconds();//秒
now.getTime();//时间戳 全世界统一 1970.01.01.0:00:00 毫秒数
//时间戳 转为日期
console.log(new Date(124124125151));//Fri Dec 07 1973 22:55:25 GMT+0800 (中国标准时间)
now.toDateString()
//"Wed May 26 2021"
now.toLocaleString()
//"2021/5/26下午8:34:24"
5.2 JSON
JSON是什么
早期,所有的数据传输习惯使用XML文件
- JSON 是一种轻量级的数据交换格式
- 简洁和清晰的层次结构使得JSON称谓理想的数据交换语言
- 易于人的阅读和编写,同时也已于机器解析和生成,并有效地提升网络传输效率。
任何js支持的类型都可以用JSON表示:number,String
格式:
- 对象都用{}
- 数组都用[]
- 键值对都是 key:value
var user = {
name: "qingjiang",
age: 3,
sex: "男"
}
//对象转化为json字符串 {"name":"qingjiang","age":3,"sex":"男"}
var jsonUser = JSON.stringify(user);
//json 字符串转化为对象 {name: "qingjiang", age: 3, sex: "男"} 变色
var obj = JSON.parse(' {"name":"qingjiang","age":3,"sex":"男"}')
JSON 和 js 区别
var obj = {a: 'hello', b: 'hellob'};
var json = '{"a": "hello","b": "hellob"}'
6. 面向对象编程
6.1 什么是面向对象
原型对象
var xiaoming = {
name: "xiaoming"
};
var Bird = {
fly: function ()
{
console.log(this.name + " fly....");
}
}
//原型对象
xiaoming.__proto__ = Bird;
class 继承
过去
function Student(name)
{
this.name = name;
}
// 给student 新增一个方法
Student.prototype.hello = function ()
{
alert('hello')
}
ES6之后
- 定义一个类,属性,方法
//ES6 之后======
//定义一个学生的类
class Student
{
constructor(name)
{
this.name = name;
}
hello()
{
alert('hello');
}
}
var xiaoming = new Student("xiaoming");
- 继承
//ES6 之后======
//定义一个学生的类
class Student
{
constructor(name)
{
this.name = name;
}
hello()
{
alert('hello');
}
}
class XiaoStudent extends Student
{
constructor(name, grade)
{
super(name);
this.grade = grade;
}
myGrade()
{
alert('我是一名小学生');
}
}
var xiaoming = new Student("xiaoming");
本质:查看对象原型
原型链
7. 操作BOM对象(重点)
浏览器介绍
JavaScript 诞生就是为了让他在浏览器中运行
BOM:浏览器对象模型
- IE 6~12
- Chrome
- Safari
- FireFox
window
window 代表浏览器窗口
window.innerHeight
150
window.innerHeight
301
window.outerWidth
764
Navigator(不建议使用)
Navigator ,封装了浏览器信息
navigator.appName
"Netscape"
navigator.appVersion
"5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36"
navigator.userAgent
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36"
navigator.platform
"Win32"
大多数时候不用navigator对象,因为会被人为修改
screen
screen.width
1500
screen.height
1000
location(重要)
location代表当前页面的url信息
location
Location {ancestorOrigins: DOMStringList, href: "https://www.baidu.com/", origin: "https://www.baidu.com", protocol: "https:", host: "www.baidu.com", …}
ancestorOrigins: DOMStringList {length: 0}
assign: ƒ assign()
hash: ""
host: "www.baidu.com"//
hostname: "www.baidu.com"
href: "https://www.baidu.com/"//
origin: "https://www.baidu.com"
pathname: "/"
port: ""
protocol: "https:"//
reload: ƒ reload()//刷新网页
replace: ƒ replace()
search: ""
toString: ƒ toString()
valueOf: ƒ valueOf()
Symbol(Symbol.toPrimitive): undefined
__proto__: Location
document
document 代表当前页面,HTML DOM文档树
document.title
"Title"
document.title = 'yoona'
"yoona"
获取具体的文档树结点
<dl id="app">
<dt>Java</dt>
<dd>JavaSE</dd>
<dd>JavaSE</dd>
</dl>
<script>
var dl = document.getElementById('app');
</script>
cookie
document.cookie
"PSTM=1621752469; BD_UPN=12314753; BIDUPSID=47155F2B2C90761A8A2C6A6C10BEDB8C; BAIDUID=9A5A518D5AC2A37C9D45FCB6302BA020:FG=1; BAIDU_WISE_UID=wapp_1621777076841_292; BAIDUID_BFESS=662A16D6289E6147E53310C5EA3BDE30:FG=1; MBD_AT=0; __yjs_st=2_ZTAzMGQwZGYzZTdhNGM3NGI2NTcxMWVhYWQzMDk4YjI0YzVjY2VhNWIyOTI0MDBlNTM2OWU4ZjU4MjhjZjlhZTA5MmMwYWIxMWM3Y2Q5YTBiNDYzYmZjMjcyOGQyZWI0NjRmMjJlMjRhMzI2ODUyNWIyNmY1YjdmYmZmNDcwYmI1ODIyZGFlMTgzM2IzZDdhNmI2MTYxOGQ5NGMzN2M4YTFlYWUxMDIxYzhkZWZkMDUxZDk0NTViZmRhZGFkNGZhNDc5MDZkM2QyODY5NTU5MzU4NWRmNWI3ODE0NmY5MTU4MzAzODkzMDEwNjZkMTFjNjNkYzdlYmQ0OTVhZGQxZl83X2Q1ZTc1ZjZj; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; Hm_lvt_aec699bb6442ba076c8981c6dc490771=1620829912,1621292156,1621347609,1622092397; COOKIE_SESSION=69181_3_8_4_4_12_0_0_8_5_0_3_69201_250015_31_0_1622092398_1622023188_1622092367%7C9%23250015_102_1622023186%7C9; BD_HOME=1; H_PS_PSSID=33985_31253_34004_33855_33607_26350_34022; BA_HECTOR=240l0g8h8h2g00ag7n1gaulcu0q"
劫持cookie 原理
<script src = "aa.js"></script>
<!--恶意人员:获取你的cookie上传到他的服务器-->
服务器端可以设置cookie:httpOnly
history(不建议使用)
history
History {length: 1, scrollRestoration: "auto", state: null}length: 1scrollRestoration: "auto"state: null__proto__: History
history.back()//后退
history.forward()//前进
8. 操作DOM对象(重点)
DOM:文档对象模型
核心
浏览器网页就是一个DOM树形结构
- 更新:更新DOM结点
- 遍历:得到DOM结点
- 删除:删除一个DOM结点
- 添加:添加一个新的结点
- 要操作一个DOM结点,就必须先获得这个DOM结点
<div id="father">
<h1>标题一</h1>
<p id="p1">p1 </p>
<p class="p2">p2</p>
</div>
<script>
//对应css选择器
let h1 = document.getElementsByTagName('h1');
let p1 = document.getElementById('p1');
let p2 = document.getElementsByClassName('p2');
let father = document.getElementById('father');
let children = father.children;//获取父节点下的所有子节点
//father.firstChild
//father.lastChild
</script>
这是原生代码,之后我们尽量使用jQuery();
更新结点
操作文本
- id1.innerText = ‘34567’ 修改文本的值
- id1.innerHTML = ‘123’
操作js
id1.style.color = 'red'; //属性使用 字符串 包裹
"red"
id1.style.fontSize = '20px';//驼峰命名问题
"20px"
document.getElementById('su')
<input type="submit" id="su" value="百度一下" class="bg s_btn">
var ss = document.getElementById('su')
undefined
ss.style.padding = '20px'
"20px"
删除节点
删除结点的步骤:先获取父节点,再通过父节点删除自己
<div id="father">
<h1>标题一</h1>
<p id="p1">p1 </p>
<p class="p2">p2</p>
</div>
<script>
let self = document.getElementById('p1');
var father = p1.parentElement;
father.removeChild(self);
//删除是一个动态过程
father.removeChild(father.children[0]);
father.removeChild(father.children[0]);
father.removeChild(father.children[0]);
</script>
注意:删除多个节点的时候,children是时刻变化的,要注意
插入结点
我们获得了某个DOM结点,假设这个DOM结点是空的,我们通过innerHTML就可以增加一个元素
如果存在则覆盖
追加
<p id="js">JavaScript</p>
<div id="list">
<p id="se">JavaSE</p>
<p id="ee">JavaEE</p>
<p id="me">JavaME</p>
</div>
<script>
let js = document.getElementById('js');
let list = document.getElementById('list');
list.appendChild(js);//追加到后面
</script>
创建一个新的标签,实现插入
<script>
let js = document.getElementById('js');//已存在的节点
let list = document.getElementById('list');
//通过JS 创建一个新的结点
let newp = document.createElement('p');
newp.id = 'newp';
newp.innerText = 'Hello,myp';
list.appendChild(newp);
//创建一个标签结点(通过这个属性可以设置任意的之值)
var myScript = document.createElement('script');
myScript.setAttribute('type', 'text/javascript');
list.appendChild(myScript);
//可以创建一个style 标签
var myStyle = document.createElement('style');//创建了一个空style标签
myStyle.setAttribute('type', 'text/css');//
myStyle.innerHTML = 'body{background-color: blue}';//设置标签内容
document.getElementsByTagName('head')[0].appendChild(myStyle);
</script>
插入前面
let ee = document.getElementById('ee');
let js = document.getElementById('js');
let list = document.getElementById('list');
//要包含的结点:insertBefore(newNode,targetNode)
list.insertBefore(js,ee);
9. 操作表单(验证)
表单 是什么 form DOM
- 文本框 text
- 下拉框 select
- 单选框 radio
- 多选框 checkbox
- 隐藏域 hidden
- 密码框 password
获得要提交的信息
<form action="post">
<p>
<span>用户名</span>
<input type="text" id="username">
</p>
<!--多选框的值,就是定义好的value值-->
<p>
<span>性别</span>
<input type="radio" name="sex" value="boy" id="boy">男
<input type="radio" name="sex" value="girl" id="girl">女
</p>
</form>
<script>
let input_text = document.getElementById(`username`);
let boy_radio = document.getElementById(`boy`);
let girl_radio = document.getElementById(`girl`);
//得到输入框的值
//input_text.value
//修改输入框的值
//input_text.value = "123"
//boy_radio.checked
//false
//boy_radio.checked = true
//true
</script>
提交表单 md5 加密密码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!--MD5工具类-->
<script src="https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.min.js"></script>
</head>
<body>
<!--表单绑定提交事件-->
<!--onsubmit 绑定一个提交检测的函数 将这个函数返回表单-->
<form action="#" 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">
<!--绑定事件 onclick 被点击-->
<button type="submit">提交</button>
</form>
<script>
function aaa()
{
let uname = document.getElementById('username');
let pwd = document.getElementById('input-password');
let md5pwd = document.getElementById('md5-password');
md5pwd.value = md5(pwd.value);
//可以校验判断表单内容 true 通过 false 阻止提交
return false;
}
</script>
</body>
</html>
10. jQuery
jQuery 库,里面存在大量的javascript函数
获取jQuery
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js"></script>
<script src=" lib/jquery-3.6.0.js"></script>
</head>
<body>
<!--
公式 :$(selector).action()
-->
<a href="" id="test-jquery">点我</a>
<script>
//选择器就是css选择器
$('#test-jquery').click(function ()
{
alert('hello,jquery');
})
</script>
</body>
</html>
选择器
//标签
document.getElementsByTagName();
//id
document.getElementById();
//类
document.getElementsByClassName();
//jQuery css 中的选择器都能用
$('p').click()//标签选择器
$('#id1').click()//id选择器
$('.class1').click()//类选择器
文档工具站:https://jquery.cuishifeng.cn/
事件
鼠标事件,键盘事件,
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src=" lib/jquery-3.6.0.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 ()
// {
// })
//简写
$(function ()
{
$('#divMove').mousemove(function (e)
{
$('#mouseMove').text('x:' + e.pageX + 'y:' + e.pageY);
}
)
})
</script>
</body>
</html>
操作DOM
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "UTF-8">
<title>Title</title>
<script src=" lib/jquery-3.6.0.js"></script>
</head>
<body>
<ul id = "test-ul">
<li class = "js">JavaScript</li>
<li name = "python">Python</li>
</ul>
<script>
//document.getElementById('')
$('#test-ul li[name = python]').text()
$('#test-ul').html()
</script>
</body>
</html>
节点文本操作
$('#test-ul li[name = python]').text()//获得值
//"Python"
$('#test-ul li[name = python]').text('设置值')//设置值
$('#test-ul').html()
// "\n\n <li class=\"js\">JavaScript</li>\n <li name=\"python\">Python</li>\n \n"
$('#test-ul').html('<strong>123</strong>');//设置值
css操作
ctrl + F 搜索网页中含css的对象
$('#test-ul li[name = python]').css("color","red")
元素的显示和隐藏
$('#test-ul li[name = python]').show()
$('#test-ul li[name = python]').hide()
$('#test-ul li[name = python]').toggle()//轮换
本质:display:none
娱乐测试
$(window).width()
751
$(document).width()
未来ajax
$('from').ajax()
$.ajax({ url: "test.html", context: document.body, success: function(){
$(this).addClass("done");
}});
ouseMove">
操作DOM
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "UTF-8">
<title>Title</title>
<script src=" lib/jquery-3.6.0.js"></script>
</head>
<body>
<ul id = "test-ul">
<li class = "js">JavaScript</li>
<li name = "python">Python</li>
</ul>
<script>
//document.getElementById('')
$('#test-ul li[name = python]').text()
$('#test-ul').html()
</script>
</body>
</html>
节点文本操作
$('#test-ul li[name = python]').text()//获得值
//"Python"
$('#test-ul li[name = python]').text('设置值')//设置值
$('#test-ul').html()
// "\n\n <li class=\"js\">JavaScript</li>\n <li name=\"python\">Python</li>\n \n"
$('#test-ul').html('<strong>123</strong>');//设置值
css操作
ctrl + F 搜索网页中含css的对象
$('#test-ul li[name = python]').css("color","red")
元素的显示和隐藏
$('#test-ul li[name = python]').show()
$('#test-ul li[name = python]').hide()
$('#test-ul li[name = python]').toggle()//轮换
本质:display:none
娱乐测试
$(window).width()
751
$(document).width()
未来ajax
$('from').ajax()
$.ajax({ url: "test.html", context: document.body, success: function(){
$(this).addClass("done");
}});