前端入门-javascript

1.什么是Javascript?

1.1概述

javaScript是一门世界上最流行的脚本语言

一个合格的后端人员,必须精通JavaScript

1.2标准

ECMAScript是JavaScript的一个标准

最新版本更新到ES6版本,但是大部分浏览器还只停留在支持ES5

开发环境–线上环境,版本不一致,是常见问题

2.快速入门

2.1引入JavaScript

1.内部标签

<script>
    //...
</script>    

2.外部引入

hello.js

alert("hello world");

test.html

<!--外部引入-->
<!--注意:script必须成对出现-->
<script src="js/hj.js"></script>

<!--不用显示定义type,也默认就是javaScript-->
<script type="text/javascript"></script>

2.2基本语法

<!--JavaScript严格区分大小写-->
<script>
// 1.定义变量   变量类型 变量名=变量值;
    var num =10;
	alert(num);
// 2.条件控制
    if (num>10 && num<20){
        alert("10~20");
    }else if(num>20 && num<30){
        alert("20~30");
    }else{
        alert("other");
    }
</script>

浏览器必会调试须知:

在这里插入图片描述

2.3数据类型

数值,文本,图形,音频,视频…

1.变量

var a = 1
var _1 = 1
var $1 = 1

2.number

js不区分小数和整数

23	//整数
23.3 //浮点数
6.654e3 //科学计数法
-10 //负数
NaN //not a number
Infinity //表示无限大

3.字符串

‘abc "abc’’

4.布尔值

true false

5.逻辑运算符

&&	两个都为真
||	一个为真,结果为真
!	取反

6.比较运算符-重要

=	赋值
==	等于(只判断值,不考虑参数类型)
=== 绝对等于(值和类型同时判断)

这里存在一个js的缺陷,应坚持不适用 ==比较方式

须知:

  • NaN===NaN 这个与所有数值都不相等,包括自己
  • 只能通过isNaN(NaN)来判断这个数是否是NaN

7.浮点数问题

尽量避免使用浮点数进行计算,存在精度问题

console.log((1/3) === (1-2/3))//false
console.log(Math.abs(1/3-(1-2/3))<0.00000001)//true

8.null 和 undefined

null 空

undefined 未定义

9.数组

java中的数组必须是相同类型的对象,而JS中不需要

//保证代码的可读性,尽量使用[]
var arr = [1,2,3,4,5,'hello',null,true];
//第二种定义方法
new Array(1,2,3,4,5,'hello');

取出数组中的数值,如果下标越界了,就会报undefined

10.对象

对象是大括号,数组是中括号

每个属性之间使用逗号隔开,最后一个属性不需要逗号

// Person person = new Person(1,2,3,4,5);

var person = {
	name:"zhangsan",
	age:18,
	tags:['js','java','web','...']
}

取值对象

>person.name
"zhangsan"
>person.age
18

2.4严格检查模式

use strict; 严格检查模式,预防JavaScript的随意性导致产生的一些问题, 必须写在JavaScript的第一行!
局部变量建议都使用let去定义

<!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
        //ES6 let
    </script>
</head>
<body>

</body>
</html>

3.数据类型

3.1字符串

1.正常字符串我们使用 单引号,或者双引号包裹
2.注意转义字符 \

\'
\n
\t
\u233    \u##### Unicode字符
\x66	Ascall字符

3.多行字符串编写

//tab 上面 esc下面 ``
var msg =
   `hello
    world
    你好呀
    nihao
    `

4.模板字符串

//tab 上面 esc下面
let name = 'zhangsan';
var msg = `hello,${name}`
输出
>console.log(msg)
hello,zhangsan

5.字符串长度

str.length

6.字符串的可变性,不可变

在这里插入图片描述

7.大小写转换方法

//注意,这里是方法,不是属性了
student.toUpperCase();
student.toLowerCase();

8.获取字符的下标

>student.indexof(‘t’)

9.截取字符串

[)包含头不包含尾

>student.substring(1)//从下标为1的字符,截取到最后
tudent
>student.substring(1,3)//[1,3)//从下标为1的字符,截取到下标为3的字符
tu

3.2数组

Array可以包含任意的数据类型

var arr = [6,5,4,3,2,1];//通过下标取值和赋值

1.长度

>arr.length

注意:假如给arr.length赋值,数组大小就会发生变化.如果赋值过小,元素就会丢失

2.indexOf,通过元素值获取下标

>arr.indexOf(2)

字符串的"1"和数字1是不同的

3.slice()切片

[)包含头不包含尾

截取Array的一部分,返回的一个新数组,类似于String中substring

>arr = [1,2,3,4,5,6]
>arr.slice(3)
[4,5,6]
>arr.slice(1,5)
[2,3,4,5]

4.尾部操作–push()和pop()

push():	压入字符,在数组尾部新增字符
pop():	弹出字符,从数组尾部删除一个字符

5.头部操作–unshift()和shift()

unshift(): 压入字符,在数组头部新增字符
shift():   弹出字符,从数组头部删除一个字符

6.排序sore()

(3)["B","C","A"]
>arr.sort()
(3)["A","B","C"]

7.元素反转reverse()

(3)["A","B","C"]
>arr.reverse()
(3)["C","B","A"]

8.临时拼接concat()

(3)["A","B","C"]
>arr.concat([1,2,3])
(6)["A","B","C",1,2,3]
>arr
(3)["A","B","C"]

注意:concat()并没有修改数组,只是会返回一个新的数组

9.连接符join
打印拼接数组,使用特定的字符串连接

(3)["A","B","C"]
>arr.join('-')
"A-B-C"

10.多维数组

>arr = [[9,8],[6,5],[3,2]];
>arr[1][1]
5

数组:存储数据(如何存,如何取,方法都可以自己实现!)

3.3对象

若干个键值对

var 对象名 = {
    属性名: 属性值,
    属性名: 属性值,
    属性名: 属性值
}
//定义了一个person对象,它有四个属性
var person = {
	name:"zhangsan",
	age:18,
	email:"123456@163.com",
	score:81
}

Js中对象,{…}表示一个对象,键值对描述属性xxx:xxx,多个属性之间用逗号隔开,最后一个属性不加逗号!
JavaScript中的所有的键都是字符串,值是任意对象!

1.对象赋值

>person.name = "zhangsan"
"zhangsan"
>person.name
"zhangsan"

2.使用一个不存在的对象属性,不会报错!

报:undefined

>person.abc
undefined

3.动态删除属性,通过delete删除对象的属性

>delete person.name
true
>person
{age:18,email:"123456@163.com",score:81}

4.动态添加,直接给新的属性添加值即可

>person.abc = "abc"
"abc"
>person
{age:18,email:"123456@163.com",score:81,abc:abc}

5.判断属性值是否在这个对象中!xxx in xxx

>'age' in person
true
//继承
>'toString' in person
true

6.判断一个属性是否是这个对象自身拥有的 hasOwnProperty()

>person.hasOwnProperty('toString')
false
>Person.hasOwnPreperty('age')
true

3.4流程控制

1.if判断

var age = 3;
if(age>3){
    alert("大于3");
}else if(age<5){
    alert("小于5");     
}else{
    alert("其他");
}

2.while循环,避免程序死循环

while(age<100){
     age = age + 1;
    console.log(age)
}

do{
    age = age + 1;
    console.log(age);
}while(age<100)

3.for循环

for(let i = 0; i < 100; i++){
    console.log(i)
}

4.forEach循环

var num = [9,6,3,8,5,2,7,4,1];
//js中的函数
num.forEach(function(value)){
    console.log(value)
})

5.for…in循环(获取下标)

//for(var index in object){}
for(var num in age){
    console.log(age)
}

3.5Map和Set

ES6新特性

1.Map

//SE6新特性 Map
//举例:学生姓名和成绩
//["tom","jerry","zhangsan"]
//[90,80,70]
var map = new Map([['tom',90],['jerry',80],['zhangsan',70]]);
var name = map.get('tom');//通过key获取value
console.log(name);
map.set('admin',60);//新增或修改
map.delete("zhangsan");//删除

2.Set

默认去重复元素

var set = new Set([1,2,3,4]);
set.add(5);//添加
set.delete(1);//删除
console.log(set.has(4));//查询是否包含某个元素

3.6遍历

1.遍历数组

//通过for of		/for...in返回下标
var arr = [7,8,9];
for(let x of arr){
    console.log(x)
}

2.遍历Map

var map = new Map([['tom',90],['jerry',80],['zhangsan',70]]);
for(let x of map){
    console.log(x)
}

3.遍历Set

var set = new Set([7,8,9]);
for(let x of set){
    console.log(x)
}

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就可以调用函数!

方式一和方式二是等价的!

调用函数

abs(10)		//10
abs(-10)	//-10

参数问题:JavaScript可以传任意个参数,也可以不传递参数

参数进来是否存在问题?

假设不存在参数,如何规避?

var abs = function (x) {
    //手动抛出异常
    if(typeof x!=='number'){
        throw 'not a number';
    }
    if(x>=0){
        return x;
    }else{
        return -x;
    }
}

arguments

代表传递进来的所有参数,是一个数组

var abs = function(x){
    console.log("x="+x);
    for(var i = 0;i < arguments;i++){
        console.log(arguments[i]);
    }
    if(x>=0){
        return x;
    }else{
        return -x;
    }
}

问题:arguments包含所有的参数,我们有时候想使用多余的参数来进行附加操作.需要排除已有参数.

rest 记录传递的额外参数

传统版本:

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);//未定义的被放进一组集合
}

rest参数只能写在最后面,必须用…标识

4.2变量的作用域

在javascript中,var定义变量实际是有作用于的
假设在函数体重声明,则在函数体外不可以使用(需要实现参考闭包)

function xyz() {
    var x = 1;
    x = x+1;
}
x = x + 2;//Uncaught ReferenceError: x is not defined

如果两个函数使用了相同的变量名,只要在函数内部就不冲突,作用域不同

function abc(){
    var x = 1;
    x = x + 1;
}

function cba(){
    var x = 1;
    x = x + 1;
}

内部函数可以访问外部函数的成员,反之则不行

function abc(){
    var x = 1;
    //内部函数可以访问外部函数的成员,反之则不行
    function cba(){
        var y = x + 1;
    }
    var z = y + 1;//Uncaught ReferenceError: x is not defined
}

假设,内部函数变量和外部函数变量重名

function abc(){
    var x = 1;
    function cba(){
        var x = 'a';
        console.log('inner'+x);//innera
    }
    console.log('outer'+x);//outer1
    cba()
}
abc()

假设在JavaScript中,函数查找变量从自身函数开始, 由“内”向“外”查找,优先使用内部的, 假设外部存在这个同名的函数变量,则内部函数会屏蔽外部函数的变量。

提升作用域

function abc(){
    var x = 'x'+y;
    console.log(x);
    var y = 'y';
}

结果: x undefined

说明: js执行引擎,会自动提升y的声明,但是不会提升变量y的赋值;

应按以下方式写:

function abc(){
    var y;
    var x = 'x' + y;
    console.log(x);
    y = 'y';
}

这是在javascript建立之初就存在的特性。 养成规范:所有 的变量定义都放在函数的头部,不要乱放,便于代码维护;

function abc(){
    var x = 1,
        y = x + 1,
        z,a,b;//会报undefined
    //之后随意使用
    var b = 1;
}

全局变量

//全局变量
x = 1;
function f(){
    console.log(x);
}
f();
console.log(x);

全局对象window

var x = 'xxx';
alert(x);
alert(window.x);//默认所有的全局变量,都会自动绑定在window对象下

alert()这个函数本身也是一个window的变量

var x = 'xxx';
window.alert(x);

var new_alert = window.alert;
new_alert(x);

javascript实际上只有一个全局作用域,任何变量(函数也可以视为变量),假设没有在函数作用范围内找到,就会向外查找,如果在全局作用域都没有找到,就会报错 RefrenceError

规范

由于我们的所有变量都会绑定到window上,如果不同的js文件,使用了相同的全局变量,就会产生冲突. 如何减少这样的冲突?

//唯一全局变量
var students = {};
    //定义全局变量
    students.name = 'zhangsan';
    students.add = function(a,b){
        return a + b;
    }

把自己的代码全部放入自己定义的唯一空间名字中,降低全局命名冲突问题

jQuery中就是使用的该方法:jQuery.name,简写:$()

局部作用域 let

在定义函数时,会出现超出作用域的情况

function aaa(){
    for(var i = 0;i < 100;i++){
        console.log(i)
    }
    console.log(i+1);//出现问题,i 出了作用域还可以使用
}

ES6的let关键字,解决了局部作用域冲突的问题

建议使用let去定义局部作用域的变量

function aaa(){
    for(let i = 0;i < 100;i++){
        console.log(i)
    }
    console.log(i+1);//Uncaught ReferenceError: i is not defined
}

常量 const

在ES6之前定义常量的方式:只有用全部大写字母命名的变量就是常量;建议不要修改这样的值.

var PI = '3.14';

console.log(PI);
PI = '123';//可以改变这个值
console.log(PI);

在ES6引入了常量关键字 const

const PI ='3.14';

console.log(PI);
PI = '123';//TypeError:Assignment to constant variable.
console.log(PI);

4.3方法

定义方法

方法就是把函数放在对象的里面,对象只有两个东西:属性和方法

var student = {
    name:'tom',
    birth:'2000',
    //方法
    age:function () {
        //获取当前年份
        var now = new Date().getFullYear();
        //返回 当前年 - 出生年
        return now-this.birth;
    }
}
//方法一定要带()
>student.age()

把上面的代码拆开后:

function getAge() {
    //获取当前年份
    var now = new Date().getFullYear();
    //返回 当前年 - 出生年
    return now-this.birth;
}
var student = {
    name:'tom',
    birth:'2000',
    age: getAge
}
>student.age() //可以输出

this是无法指向的,是默认指向调用它的那个对象

apply

在js中可以控制this指向

function getAge() {
    //获取当前年份
    var now = new Date().getFullYear();
    //返回 当前年 - 出生年
    return now-this.birth;
}
var student = {
    name:'tom',
    birth:'2000',
    age: getAge
}
//this. 指向了 student,参数为空
getAge.apply(student,[]);

5.内部对象

标准对象

typeof 123
"number"
typeof '123'
"String"
typeof true
"boolean"
typeof NaN
"number"
typeof []
"object"
typeof {}
"object"
typeof Math.abs
"function"
typeof undefined
"undefined"

5.1Date

基本使用

var now = new Date();//完整时间
now.getFullYear();//年
now.getMonth();//月  0~11
now.getDate();//日
now.getDay();//周几
now.getHours();//时
now.getMinutes();//分
now.getSeconds();//秒

now.getTime();//时间戳
console.log(new Date(1618382366845))//时间戳转为完整时间

5.2JSON

json是什么

早期,所有的数据传输习惯使用XML文件!

  • JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式
  • 简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言
  • 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率

在javascript中,一切皆为对象,任何js支持的类型都可以用JSON表示

格式:

  • 对象都用{}
  • 数组都用[]
  • 所有的键值对 都是用key:value

JSON字符串 和 JS对象转化

var user ={
    name :'tom',
    age :10,
    sex :'男'
}

//对象转化为json字符串  {"name":"tom","age":3,"sex":"男"}
var jsonuser = JSON.stringify(user);

//json字符串转化为对象,参数为 json字符串
var obj =JSON.parse('{"name":"tom","age":3,"sex":"男"}');

JSON 和 JS对象的区别

var obj = {a:'hello',b:'world'};
var json = '{"a":"hello","b":"world"}'

5.3Ajax

  • 原生的js写法 xhr 异步请求
  • jQuery封装好的方法 $(#name).ajax("")
  • axios请求

6.面向对象编程

原型对象

javascript、java、c#------面向对象;但是javascript有些区别!

  • 类:模板
  • 对象:具体实例

在javascript中,需要转换一下思维方式
js传统原型:

var Student = {
    name:"tom",
    age:10,
    run:function(){
        console.log(this.name+"jump...");
    }
};

var jerry = {
    name:"jerry"
};
//原型对象
jerry._proto_= Student;

var Teacher = {
    teach:function(){
        console.log(this.name+"teach...");
    }
}
//jerry的原型为Student
jerry_proto_=Teacher;//原型错误,竟然此处还可以实现

js传统类:

function Student(name){
    this.name=name;
}
//给Student新增一个方法
Student.prototype.hello = function(){
    alert('hello')
};

class 继承

class关键字,是ES6引入的

1.定义一个类, 属性, 方法

构造器,关键字constructor(){}

//定义一个学生类
class Student{
    constructor(name){
        this.name=name;
    }
    hello(){
        alert('hello')
    }
}
//实例化对象
var tom = new Student("tom");
var jerry = new Student("jerry");

2.继承

//ES6之后========================
//定义一个学生的类
class Student{
    constructor(name){
        this.name = name;
    }
    hello(){
        alert('hello');
    }
}
//定义子类,定义一个小学生类继承学生类
class LitteStudent extends Student{
    constructor(name,grade){
        super(name);//引用父类方法
        this.grade = grade;
    }
    myGrade(){
        alert('我是一名小学生');
    }
}
var xiaoming = new Student("xiaoming");
var xiaohong = new LitteStudent("xiaohong",1);

继承的本质,查看对象原型

在这里插入图片描述

原型链

_proto_:

在这里插入图片描述

7.操作BOM对象(重点)

JavaScript 和 浏览器的关系:

JavaScript诞生就是为了能够让嵌入式脚本语言在浏览器中运行

BOM :(Browser Object Model)浏览器对象模型 ,提供了独立于内容而与浏览器窗口进行交互的对象

window(重要)

window代表浏览器窗口

>window.alert(1)
undefined
>window.innerHeight//内部高度
900
>window.innerwidth//内部宽度
900
>window,outerHeight//外部高度
950
>window.outerwidth//外部宽度
950

Navigator(不建议使用)

Navigator封装了浏览器信息

>navigator.appName
"Netscape"
>navigator.appVersion
"5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36"
>navigator.userAgent
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36"
>navigator.platform
"Win32"

大多数时候,我们不会使用navigator对象,因为会被认为修改!
不建议使用这些属性来判断和编写代码

screen

代表屏幕尺寸

>screen.width
1920
>screen.height
1080

location(重要)

location代表当前页面的URL信息

host:"www.csdn.net"
href:"https://www.csdn.net"
protocol:"https:"
reload: ƒ reload()//刷新网页
//设置网页的地址,重定向
location.assign("www.baidu,com")

document (内容DOM)

document代表当前的页面,HTML DOM文档树

>document.title
"百度一下,你就知道"
>docunment.title='csdn'
"csdn"

获取具体的文档树节点:

<dl id="app">
    <dt>java</dt>
    <dd>javaME</dd>
    <dd>javaSE</dd>
    <dd>javaEE</dd>
</dl>
<script>
    var dl = document.getElementById('app');
</script>

获取cookie

>document.cookie

劫持cookie原理

//恶意人员,获取你的cookie上传到他的服务器
<script src="abc.js"></script>

服务器端可以设置cookie为httpOnly

history(不建议使用)

history代表浏览器的历史记录

>history.back()//后退
>history.forward()//前进

8.操作DOM对象(重点)

DOM:文档对象模型

核心

浏览器网页就是一个Dom树形结构!

  • 更新:更新Dom节点
  • 遍历Dom节点:得到Dom节点
  • 删除:删除一个Dom节点
  • 添加:添加一个新的节点

要操作一个Dom节点,就必须要先获得这个Dom节点

获取DOM节点

//对应css选择器
var h1 = document.getElementsByName('h1');
var p1 = document.getElementById('p1');
var p2 = document.getElementsByClassName('p2');
var father = document.getElementById('fath');

var childrenS = father.children;//获取父节点下的所有子节点
// father.firstChild
// father.lastChild

这是原生代码,之后会尽量都使用jQuery();

更新节点

<div id="id01">
</div>

<script>
    var di = document.getElementById('id01');
</script>

操作文本

id01.innerText = '456' //修改文本的值
id01.innerHTML = '<strong>123</strong>' //可以解析HTML文本标签

操作CSS

id01.style.color = 'blue'; //属性使用 字符串包裹
id01.style.fontSize = '20px'; // -拼接 转 驼峰命名问题
id01.style.padding = '2em';

删除节点

删除节点的步骤:先获取父节点,再通过父节点删除自己

<div id="fath">
    <h1>标题一</h1>
    <p id="p1"></p>
    <p class="p2"></p>
</div>
<script>
    var self = document.getElementById('p1');
    var father = document.parentElement;//成为父节点默认获取子类对象
    father.removeChild(self);//删除子节点

    //删除节点是一个动态的过程,删除了下标考前的值,后边的会补充上来,所以这种方式有问题
    father.removeChild(father.children[0]);
    father.removeChild(father.children[1]);
    father.removeChild(father.children[2]);
</script>

注意:删除多个节点的时候,children是在时刻变化的,删除节点的时候一定要注意

插入节点

我们获得了某个Dom节点,假设这个dom节点是空的,我们通过innerHTML就可以增加一个元素了,但是这个Dom节点已经存在元素了,我们就不能这么干了!会产生覆盖

追加

<p id="js">javascrpit</p>
<div id="list">
    <p id="se">javase</p>
    <p id="ee">javaee</p>
    <p id="me">javame</p>
</div>
<script>
    var js = document.getElementById('js');
    var list = document.getElementById('list');
    list.appendChild(js);//追加到后面
</script>

追加效果:

在这里插入图片描述

创建一个新的标签

<script>
	var js = document.getElementById('js');//已经存在的节点
    var list = document.getElementById('list');
    //通过JS创建一个新的节点
    var newP = document.creatElement('p');//创建一个p标签
    newP.id = 'newP';
    newP.innerText = 'Helloworld';

    //创建一个标签节点,script标签
    var myScript = document.creatElement('script');
    myScript.setAttribute('type','text/javascript');
    
    //可以创建一个style标签
    var myStyle = document.creatElement('style');//创建了一个空style标签
    myStyle.setAttribute('type','text/css');//定义格式
    myStyle.innerHTML = 'body{background-color:chartreuse;}';//设置标签内容
    //实现myStyle
    document.getElementByTagName('head')[0].appendChild(myStyle);
</script>

insertBefore 插到前面

var ee = document.getElementById('ee');
var js = document.getElementById('js');
var list = document.getElementById('list');
//要包含的节点 .insertBefore(newNode,targetNode)
list.insertBefore(js,ee);

9.操作表单

表单是什么? from DOM树

  • 文本框—text
  • 下拉框—select
  • 单选框–radio
  • 多选框—checkbox
  • 隐藏域—hidden
  • 密码框—password

表单的目的:提交信息

获取要提交的信息

<from action="post">
    <p>
        <span>用户名:</span><input type="text" id="username">
    </p>
    <p>
        <span>性别:</span>
        <input type="radio" name="sex" value="man" id="boy"><input type="radio" name="sex" value="woman" id="gril"></p>
</from>

<script>
    var input_text=document.getElementById('username');
    var boy_radio=document.getElementById('boy');
    var girl_radio=document.getElementById('gril');

    //得到输入框的内容
    input_text.value
    //修改输入框的值
    input_text.value ='132456';

    //对于单选框,多选框等等固定的值,boy_radio.value只能获取当前的值
    boy_radio.checked;//查看返回结果,是否为true,如果为true,则被选中
    girl_radio.checked = 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>
<!--表单绑定提交事件
οnsubmit= 绑定一个提交检测的函数,truefalse
将这个结果返回给表单,使用onsubmit接收
onsubmit = "return aaa()"
-->
<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 = "password" />
    </p>
    <input type = "hidden" id = "md5-password" name = "password">             
	<!--绑定事件 onclick 被点击-->
    <button type = "submit">提交</button>            
</form>        
<script>
   function aaa(){
       alert(1);
       var username = document.getElementById("username");
       var pwd = document.getElementById("password");
       var md5pwd = document.getElementById("md5-password");
       //pwd.value = md5(pwd,value);
       md5pwd.value = mad5(pwd.value);
       //可以校验判断表单内容,true就是通过提交,false就是阻止提交
       return false;
   }
</script>        
</body>
</html>

10.jQuery

获取jQuery

公式:$(selector).action()

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    //在线jQuery库
    <script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
    //本地jQuery库
    <script src="lib/jquery-3.4.1.js"></script>
</head>
<body>
<a href="" id="text-jquery">点击测试</a>
<script>
    //选择器就是css的选择器
    $('#text-jquery').click(function () {
        alert('hello,jquery')
    })
</script>
</body>
</html>

事件

鼠标事件、键盘事件,其他事件

mousedown()(jQuery)---点击未放松
mouseenter()(jQuery)---悬停,指针穿过被选元素时
mouseleave()(jQuery)---离开,指针离开被选元素时
mousemove()(jQuery)---移动,指针在指定的元素中移动时
mouseout()(jQuery)---离开,指针离开被选元素或其子元素
mouseover()(jQuery)---悬停,指针穿过被选元素或其子元素
mouseup()(jQuery)---放松按钮

获取鼠标当前的一个坐标

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!--在线jQuery库-->
    <script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
    <style>
        #divMove{
            width: 600px;
            height: 600px;
            border: 1px solid deeppink;
        }
    </style>
</head>
<body>
<!--要求获取鼠标当前坐标-->
mouse:<span id="mouseMove"></span>
<div id="divMove"></div>

<script>
    //当网页元素加载完毕之后,相应事件
    $(function () {
        $('#divMove').mousemove(function (e) {
            $('#mouseMove').text('x轴:'+e.pageX+'y轴:'+e.pageY)
        })
    });
</script>

</body>
</html>

操作DOM

节点文本操作

$('#test-ul li[name=python]').text();//获得值
$('#test-ul li[name=python]').text('设置值');//设置值
$('#test-ul').html();//获得值
$('#test-ul').html('<strong>123</strong>');//设置值

css操作

$('#test-ul li[name=python]').css({"color","red"});

元素的显示和隐藏:本质display:none

$('#test-ul li[name=python]').show();
$('#test-ul li[name=python]').hide();

其他测试

$(window).width()
$(window).height()
$('#test-ul li[name=python]').toggle();
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值