2021-6-23--------------06javaScript

javaScript框架

Jquery不是框架,是一个库

vue

UI框架:

Ant—Design,ElementUI,BootStrap,AmazeUI

javaScript构建工具

WQebPack:模块打包器,主要作用是打包,压缩,合并及按序加载

Babel:JS编译工具,主要用于浏览器不支持的ES新特性,比如用于编译TypeScript

1.什么是javascript?

1.1概述

javascript是一门最流行的脚本语言

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

特点

跨平台性
基于对象
脚本语言

1.2ECMAscript

他可以理解为javascript的一个标准

最新版本已经到了ES6,但是大部分的浏览器只支持es5代码上,版本不一致

2.入门

引入方式二:

<!--    不能写成自闭标签,否则不能生效-->
    <script type="text/javascript" src="1.js">

    </script>
1.js
alert("a");
    

2.0、js语法-----变量

js中定义变量可以接收任意类型的数据,js是一门弱语言

局部变量和全局变量

局部变量

var 变量名称=初始化值;局部变量(只能在当前范围内生效)

全局变量

变量名称=初始化值----在变量后面所有位置都可以生效

a=1;

2.1内部引用:

<script>
    alert('Hello World');
</script>

2.2外部引用:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>$Title$</title>
</head>
<body>

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

</script>
</body>
</html>
js/jq.js

alert('hello World')

注意:script必须成对出现

2.3基本语法

浏览器使用:
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    <!--javas-->
    var i=1;
    var number='pc';

    //alert('num');
    // 2.条件类型
    if (i>1){
        alert('true')
    }
    console.log("pcy");//在控制台上面输出信息
</script>
</body>
</html>

2.4数据类型

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

js不区分小数和整数

比较运算符

==等于(类型不一样,值一样,判断为true)
===	绝对等于(类型一样,值一样)
例子:
	console.log(null == undefined)
    console.log(null === undefined)

注意

  1. ​ 最好不要用== ,坚持用===
  2. ​ NaN===NaN//结果为false,与所有的值都不相等
  3. ​ 只能通过isNaN(NaN)来判断是否是NaN

浮点数问题

console.log((1/3)===(1-2/3))

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

Math.abs(1/3-(1-2/3))<0.00000001//判断是否等于

null和undefined

null:空

undefined:未定义

数组

js中的数组不需要类型相同

var p=[1,3,'s'];
new Array(1,'w');

对象

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

var people={
    name:'pen',
    age:3,
    tags:['js','html']
}

取对象的值

console.log(people.age)

变量

规范:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    //    "use strict"严格检查模式,预防javascript的随意性导致产生的一些问题,必须写在javascript的第一行
    //局部变量建议度使用let去定义
    //前提设置idea支持ES6语法
    "use strict"
    //全局变量
    var i=1;
    //ES6 let   局部变量
    let i1=1;
</script>

</body>
</html>

3.数据类型

##基本数据类型
Number 数值型、String字符串类型、Boolean布尔型、Undefined未定义类型、Null空类型

字符串

不可变

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        //字符串:单引号和双引号都行
        "use strict"
        console.log("a\"");
        console.log('a\u4e2f');//Unicode字符
        console.log('\x41')//AscII字符
        //多行字符串编写
        //tab上面那个符号
        let msg=`
        hello
        world
        你好
        `
        //模版字符串
        let name="pcy";
        let msg1=`你好呀${name}`
        console.log(msg1)
        //字符串的长度
        let student="student";
        console.log(student.length)
        //字符串的下标
        console.log(student[0])
        //大小写转化,这里是方法
        console.log(student.toUpperCase())
        console.log(student.toLowerCase())
        //获取指定的下标
        console.log(student.indexOf('t'))
        //截取第几个到第几个
        console.log(student.substring(1,3))

    </script>
</head>
<body>

</body>
</html>

复杂数据类型

1.数组

var a=new Array();
    a[0]=1;
    a[99]=11;
    console.log(a);
    //第一种表现方式
    var a1=new Array(11);
    a1[10]=1;
    console.log(a1);
    //第二种表现方式
    var a2=new Array(1,2,"as",true);
    console.log(a2);
    //第三种表现方式
    var arr=[1,2,3,4];
    console.log(arr)
1.长度

只要给x.length赋值,就可以改变数组的长度,如果赋值较小,就会丢失一些数据

2.indexOf

通过元素获得下标索引

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

3.slice()

截取Array的一部分

4.push,pop(尾部),shift(),unshift()

push:添加数组元素 arr.push(“a”);
pop:删除数组最后一个元素
shift:删除数组第一个元素
unshift:压入头部

6.sort()

排序

7.元素反转

reverse()

8.concat()

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

9、连接符join

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

arr.join(’-’);

10、多维数组

数组:存储数据(如何存和如何取出)

2、对象

内置对象

内置对象:String,Boolean,Number,Array,Math,Date

标准对象

 typeof 123
"number"
typeof "123"
"string"
typeof NaN
"number"
typeof {}
"object"
typeof Math.abs
"function"
1Date
"use strict"
var date=new Date();

date.getFullYear();//年
date.getMonth();//月
date.getDate();//日
date.getHours();//时
date.getDay();//星期几
date.getSeconds();//秒
date.getMinutes();//分
date.getTime();//时间戳,全世界统一,1970 1.1 0:00:00
new Date(1612326597115);//得到当前时间


date.toLocaleDateString()//转换为本地时间
math
 		//绝对值
        console.log(Math.abs(-1));
        console.log(Math.ceil(2.00001));
        //向上制造型
        console.log(Math.floor(3.9999))
        console.log(Math.round(3.5));
        console.log(Math.random())
global

global.parseInt只输出数字

		console.log(parseInt("1223"))
        console.log(parseInt("123as"))//输出abc

正则对象
//匹配邮箱

自定义对象

对象是由一个大括号和多个键值对组成

无参构造来创建自定义对象
//定义了一个person属性
var person={
            name:"kuangshen",
            age:3,
            say:function () {
                return this.name+"1";
            }
        }
function Person(){
            
 }
有参构造来创建自定义对象
function Person(name,age){
            this.name=name;
            this.age=age;
}
var a=new Person("a",1);
console.log(a)

动态的删减属性

delete person.age

添加属性

person.sex='男'

判断属性值是否在这个对象中

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

判断这个对象是否是自身拥有的

person.hasOwnProperty('age')

3.函数

方法:对象(属性,方法)
函数不能嵌套

3.1、定义函数

方式一基本定义函数:

function f(x) {
    if (x>0){
        return x;
    }
}
f(1)

一旦执行到return就结束

如果没有执行return,函数执行完也会返回结果,结果就是undefined

方式二:直接定义函数形式
匿名函数

let f=function (x) {
    if (x>0){
        return x;
    }
}
f(10)

方式三:动态定义函数

//变量可以接收函数
 let mx=new Function("a","b","return a+b;");
 console.log(mx(1,2))
参数问题

可以传任意的一个参数,也可以传多个参数,但是不报错

如何规避不传参数

function f(x) {
    //手动抛出异常
    if (typeof x!=="number"){
        throw "not is number";
    } 
    if (x>0){
        return x;
    }
}
//arguments可以检测所有传进来的参数
let f=function (x) {
    //拿到传进来的所有的参数
    for(let i=0;i<arguments.length;i++){
        console.log(arguments[i])
    }
    if (x>0){
        return x;
    }
}

问题:arguments会包含所有的参数,我们想要使用多余的参数来进行附加操作,需要排除已有的参数
arguments属性对象可以来接收所有传入参数值,可以遍历这个对象来操作这些值(遍历过程类似数组)

//如果传入的参数小于参数列表的参数个数,会把传入的参数值赋值给参数,剩余参数列表的参数没进行初始化就是undefined
    //拿数值和undefined运算结果是NaN
    
    function f(a,b) {
        console.log(a+b) ;
        for (var i=0;i<arguments.length;i++){
            console.log(arguments[i]);
        }
    }
    f(1);

rest获取除了已经定义的参数之外的参数

function f1(a,b,...rest) {
    console.log(a)
    console.log(b)
    console.log(rest)

}
f1(1,2,3,4,5,6)

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

3.4流程控制

if判断

var age=2;
if (age>1){
    alert('haha')
} 

循环

var age=2;

while (age<100){
    age=age+1;
    console.log(age)
} 
var age=2;
for (let i=2;i<100;i+5){
    console.log(i)
}

数组循环

var a=[1,2,3,4,5];
//num遍历的是索引
for(var num in a){
    console.log(a[num])
}
//foreach遍历
//函数遍历
a.forEach(function (value) {
    console.log(value)
})

3.5Map和Set

ES6的新特性

let map=new Map([['tom',100],['jack',99]]);
let name=map.get('tom')
console.log(name)
map.set('json',11)
console.log(map)

Set:无序不重复的集合

let a=new Set([1,2,4,5,2,1])
console.log(a)
a.add(6)//添加
console.log(a)
a.delete(1)//删除
console.log(a)
console.log(a.has(1))//是否存在

3.6iterator

//遍历map和set
let map=new Map([['tom',100],['jack',99]]);
for (let i of map){
    console.log(i)
}

let a=new Set([1,2,4,5,2,1])
for (let i of a){
            console.log(i)
        }

4.2变量的作用域

在javascript是有作用域的

假设在函数体中声明,现在函数体外不可以使用(闭包可以解决这个问题)

function f1(a,b,...rest) {
    var a=1;
    a=a+1;
}
a=a+1;

结论:内部函数可以访问外部函数的资源,反之则不行

所有的变量都要放在函数的头部,不要乱放,便于维护

4.3全局函数

//全局函数
var a=1;
alert(a);
alert(window.a);//等于,默认全局变量都会自动绑定在window对象下
window.alert(a)

alert()函数本身也是一个window对象

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

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

<script>
    //字符串:单引号和双引号都行
    "use strict"
    //定义唯一一个一个全局对象
    var pcy={};
    pcy.name='pcy1';
    pcy.age=function (a,b) {
        return a+b;
    }
</script>

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

例子:jQuery

4.4局部作用域:let

function f() {
    for (var i=1;i<100;i++){
        console.log(i)
    } 
    console.log(i+1);//出了这个作用域还能用
}

let关键字:解决作用域冲突问题

function f() {
    for (let i=1;i<100;i++){
        console.log(i)
    }
    console.log(i+1);//出了这个作用域还能用
}

介意使用let去定义局部变量作用域

4.5常量const

如何定义:只要用大写字母命名的变量都是常量,但是可以改变

所以ES6引入了常量关键字const

const i=1;
console.log(i)
//i=111;//报错了 readonly只读不能修改

5.方法

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

调用方法一定要带上();

var pc={
    name:'pcy',
    brithday:2000
    //方法
    age:function () {
        let now=new Date().getFullYear();
        return now - this.brithday;
    }
}
//调方法一定要带()
pc.age()

this代表什么?上诉代码拆开

"use strict"
function getAge() {
    let now=new Date().getFullYear();
    return now - this.brithday;
}
var pc={
    name:'pcy',
    brithday:2000,
    //方法
    age:getAge
}
pc.age();ok
getAge();//不能如此调用

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

apply

在js中可以控制this的指向

"use strict"
function getAge() {
    let now=new Date().getFullYear();
    return now - this.brithday;
}
var pc={
    name:'pcy',
    brithday:2000,
    //方法
    age:getAge
}
pc.age();
getAge.apply(pc,[]);//代表this指向pc这个对象,参数为空

JSON

数据交换格式:BOSN,JSON

json概念

是一种轻量级的数据交换格式

提升网络传输效率

早期左右的数据传输习惯使用XML文件

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

格式:

  1. 对象都用{}
  2. 数组都用[]
  3. 所有的键值对都是用key:value

JSON和JS的转换

var user={
    name:'qinjiang',
    age:3,
    sex:'男'
}
//对象转换为JSON字符串{"name":"qinjiang","age":3,"sex":"男"}
var jsonuser=JSON.stringify(user)
console.log(jsonuser)
//字符串转化为对象
var json1=JSON.parse('{"name":"qinjiang","age":3,"sex":"男"}');
console.log(json1)

区别:

js对象:var obj={name: "qinjiang", age: 3, sex: "男"}
JSON:var json='{"name":"qinjiang","age":3,"sex":"男"}'

5.3AJAX

原生的js写法:xhr异步请求

JQuery封装好的方法 $("#name").ajax("")

axios请求

6.面向对象编程

6.1什么是面向对象

类:模版

对象:具体的实例

在javascript需要换思维方式

原型:模版

var user={
    name:'qinjiang',
    age:3,
    run:function () {
        console.log(this.name+"run...")
    }
}
var xiaoming={
    name:"xiaoming",

};
//小明的原型是user
xiaoming.__proto__=user;
xiaoming.run()
function Student(name) {
    this.name=name;
}
//给student新增一个方法
Student.__prototype.hello=function () {

}

class 继承

class关键字、是在ES6引入的

//ES6之后
class Student{
    constructor(name){
        this.name=name;
    }
    hello(){
        alert('Hello World');
    }
    
}
var xiaoming=new Student("xiaoming");
xiaoming.hello();
class Xiaoxue extends Student{
    constructor(name,grade){
        super(name)
        this.grade=grade;
    }
    myGrade(){
        alert('我是小学生')
    }
}

原型链

8、DHTML 动态超文本标记语言

所谓的DHTML就是在HTML原有的内容基础上添加js访问接口,允许js访问页面中HTML内容(HTML和JS在一起使用的技术就是DHTML)

把html里的每个标签都看成是js对象
页面中HTML内容都会变成js文档树,通过DHTML技术来操作js文档树上js对象。实际就是来操作对应的标签

对于js对象的操作可以有增删改查。

7、操作BOM(浏览器对象模型)

浏览器介绍

javascript和浏览器的关系:

javascript是为了让他在浏览器中运行

BOM:浏览器对象模型

  1. Chrome

  2. Safari

  3. FireFox

  4. Opera

window

window代表浏览器窗口

window.innerHeight
633
window.innerWidth
747
window.innerHeight
348
window.alert(1)
undefined
window.outerHeight

Navigator

封装浏览器的信息

navigator.appName
"Netscape"
navigator.appVersion
"5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36 OPR/73.0.3856.344"
navigator.platform
"Win32"

大多数我们不会使用Navigator,因为会被人为修改

不介意使用这些属性和编写代码

screen

代表屏幕尺寸

screen.width
1536
screen.height
<script>
        // window对象
    //    失去焦点
        /*window.οnblur=function () {
            alert("失去焦点");
        };
    //    获取焦点事件
        window.οnfοcus=function () {
            alert("获取焦点事件");
        }
        //文档就绪事件----等待页面加载完成之后触发事件
        window.οnlοad=function () {
            var div=document.getElementById("div1");
        }*/
        //确认对话框
        /*var flag=window.confirm("是否使用高奎华宝典");
        if (flag){
            alert("欲练此功")
        }else {
            alert("不练了")
        }
        //消息提示框
        var password=window.prompt("请输入密码:")
        if ("")*/
        //关闭浏览器
        // window.close();
        //指定毫秒值之后就会执行程序
        /*window.setInterval(function () {
            var div=document.getElementById("div1");
            var d=new Date();
            let s = d.toLocaleString();
            div.innerText=s;
        },1000)
        //指定出现内容的时间,只能执行一次函数内容·
        window.setTimeout(function () {
            console.log("已经过了三秒");
        },3000)*/
        // location----地址栏对象
        /*
        hash        设置获取href属性中在"#"后面的分段

         */
        /*console.log(location.hash)
        console.log(location.host)
        location.hostname
        console.log(location.href)
        console.log(screen.availHeight)//获取屏幕的工作区的高度
        console.log(screen.availWidth)
        //history
        function back(){
            // window.history.back();
                window.history.go(-1)
        }

        //后退到前一个页面
        function forward(){
            window.history.forward();
        }*/
        console.log(window.navigator.appCodeName)
        console.log(window.navigator.appName)
        console.log(window.navigator.appVersion)

    </script>
</head>
<body>
    <div id="div1">div</div>
    <input type="button" value="后退" onclick="back()">
    <input type="button" value="前进" onclick="forward()">
</body>

location

代表当前页面的URL信息

location.assign('www.baidu.com')//可以跳转新的网页
location.reload()//重新刷新网页

document

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

document.title

document.title='pcy'

获取具体的文档树节店

    <script>

        var dl=document.getElementById('el')

    </script>
</head>
<body>
<dl>
    <dt id="el">javase</dt>
    <dd>javaee</dd>
    <dd>HTML</dd>
</dl>
</body>
</html>

document.cookie//获取cookie
劫持cookie原理
<script src="aa.js"></script>
aa.js里面写上document.cookie可以获取你的cookie

服务器端可以设置cookie:httpOnly//只读

history

代表浏览器历史记录

history
History {length: 1, scrollRestoration: "auto", state: null}
history.back()//后退
undefined
history.forward()//前进
undefined

DOM(文档对象模型)

文档对象模型

<!DOCTYPE HTML>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
	<title>如何通过document获取数据</title>
	<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
	<script type="text/javascript">
		function demo1(){
		var username = document.getElementById("username");
		alert(username.value);
	}
		function demo2(){
			var elements = document.getElementsByName("password");
			for(var i=0;i<elements.length;i++){
				alert(elements[i].value);
			}
		}
		function demo3(){
			var elms = document.getElementsByTagName("input");
			for(var i=0;i<elms.length;i++){
				alert(elms[i].value);
			}
		}
		function demo4(){
			var p = document.getElementById("pid");
			//alert(p.innerHTML);
			//alert(p.innerText);
            //设置对象html内容
			//p.innerHTML = "<font color='green'>真好</font>";
		}
	</script>
	
</head>
<body>

	用户名称:<input type="text" name="username" id="username"/><br />
    用户密码:<input type="password" name="password" id="password" /><br />
    用户密码2<input type="password" name="password" id="password2" /><br />
    
    <hr />
    <input type="button" value="通过ID获取节点的值" onclick="demo1()"/>
    <input type="button" value="通过NAME获取节点的值"  onclick="demo2()" />
    <input type="button" value="通过TAG获取节点的值" onclick="demo3()" />        
    
    <hr  />
    <p id="pid"><font color="red">获取P标签中的文字</font></p>
	<input type="button" value="获取P中文字" onclick="demo4()" />
	
</body>
</html>

浏览器网页就是一个Dom节点

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

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

<div id="father">
    <h1>标题一</h1>
    <p id="p1">p1</p>
    <p class="p2">p2</p>
</div>
<!--注意必须将html写在javascript上面,否则会报错-->
<script>

    var  h1=document.getElementsByTagName('h1')
    var p1=document.getElementById("p1")
    var father=document.getElementById('father')
    var p2=document.getElementsByClassName('p2')
    let children = p2.children;
    p2.firstChild;

</script>

这是原生代码,以后尽量使用jQuery

更新节点

操作文本

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>节点的增删改查</title>
<!--加入样式表-->
<style type="text/css">
div {
	border:#0099FF 1px solid;
	height:60px;
	width:120px;
	margin:20px 0px 20px 20px;
	padding:10px 0px 0px 20px;
	}
	
#div_1{
	background-color:#00FFFF;
	}
	
#div_2{
	background-color:#FF3399;
	}
	
#div_3{
	background-color:#0000FF;
	}
	
#div_4{
	background-color:#FFFF66;
	}

</style>

<script>
    //创建并添加节点
    function addNode() {
        //创建新增节点
        var new_div=document.createElement("div")
        new_div.innerHTML="<font color='#8a2be2'>我的div1</font>";
        // 获取body节点对象
        var parentNode = document.getElementsByTagName("body")[0];
        //把新节点的元素赋值给父节点
        // parentNode.appendChild(new_div);//只能把我们的新节点追加到父节点的末尾
        var div_4 = document.getElementById("div_4");
        parentNode.insertBefore(new_div,div_4);
    }
    function deleteNode() {
        let parentNode = document.getElementsByTagName("body")[0];
        let div_2 = document.getElementById("div_2");
        parentNode.removeChild(div_2);
    }

    function updateNode() {
        let new_div = document.createElement("div");
        new_div.innerHTML="updatediv";
        let parentNode = document.getElementsByTagName("body")[0];
        let div_3 = document.getElementById("div_3");
        parentNode.replaceChild(new_div,div_3)
    }
    function copyNode() {
        let parentNode = document.getElementsByTagName("body")[0];
        let div_1 = document.getElementById("div_1");
        let node = div_1.cloneNode(true);
        parentNode.appendChild(node);
    }

</script>

</head>



<body>
    <div id="div_1">
		
    </div>
    
    <div id="div_2">
    div区域2
    </div>
    
    <div id="div_3">
   	 div区域3
    </div>
    
    <div id="div_4">
    div区域4
    </div>
    
    <hr />
    <input type="button" value="创建并添加节点" onclick="addNode()" />
    <input type="button" value="删除节点" onclick="deleteNode()" />
    <input type="button" value="替换节点" onclick="updateNode()" />
    <input type="button" value="克隆节点" onclick="copyNode()" />

</body>
</html>

<div id="id1">

</div>
<!--注意必须将html写在javascript上面,否则会报错-->
<script>

    let elementById = document.getElementById('id1');
    elementById.innerText='123';//修改文本值
    elementById.innerHTML='<strong>123</strong>'可以解析HTMl标签

操作CSS

elementById.style.color='red';
elementById.style.fontSize='200px'//转驼峰命名问题

删除节点

  1. 先获取父节点
  2. 再通过父节点删除自己
<div id="father">
        <h1>标题一</h1>
        <p id="p1">p1</p>
        <p class="p2">p2</p>
    </div>

    </div>
    <!--注意必须将html写在javascript上面,否则会报错-->
    <script>
        var father=document.getElementById('father')
        //删除是一个动态的过程
        father.removeChild(father.children[0])

    </script>

删除多个节点的时候,children是动态变化的,删除节点的时候一定要注意

插入节点

我们不能覆盖节点,获得了某个Dom节点,假设这个dom节点是空的,我们通过innerHTMl就可以增加一个元素,但是这个DOM已经存在元素了,就会覆盖原来已有的元素

追加

<p id="js">java</p>
    <div id="list">
        <p id="js1">JavaSE</p>
        <p id="js2">JavaEE</p>
        <p id="js3">JavaME</p>
    </div>
    <!--注意必须将html写在javascript上面,否则会报错-->
    <script>
        //第一种方式
        var list1 = document.getElementById('list');
        let js = document.getElementById('js');
        list1.appendChild(js)
        //第二种方式
        let newp = document.createElement('p');
        newp.id='js1';
        newp.innerText='python';
        list1.appendChild(newp);
    </script>
insert
<div id="list">
    <p id="js1">JavaSE</p>
    <p id="js2">JavaEE</p>
    <p id="js3">JavaME</p>
</div>
<!--注意必须将html写在javascript上面,否则会报错-->
<script>
    let js1 = document.getElementById('js1');
    let js = document.getElementById('js');
    let list = document.getElementById('list');
    //插入前面newNode,oldNode
    list.insertBefore(js,js1)
</script>

9、操作表单(验证)

表单是一个DOM树

文本框test,下拉框select,隐藏域hidden,密码框password,单选框radio

表单作用:提交信息

获得要提交的信息

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <form action="">
        <p>
            <span>用户名:</span>
            <input type="text" id="username" value="username">
        </p>
        <p>
            <span>性别:</span>
            <input type="radio" id="girl" name="sex">女
            <input type="radio" id="boy" name="sex">男
        </p>
    </form>
    
    <script>
        let id = document.getElementById('username');
        console.log(id.value)
        id.value='123'
        console.log(id.value)
        //对于多选框,单选框时value只能选择固定的值
        let boy=document.getElementById('boy');
        console.log(boy.checked);//如果为true,则是选中的
    </script>
</head>
<body>

提交表单

MD5加密级别

md5链接:https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.min.js

第一种:

<!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>
    <form action="https://www.baidu.com" method="post">
        <p>
            <span>用户名:</span>
            <input type="text" id="username" value="username"><br>
            <span>密码:</span>
            <input type="password" id="password" value="password">
        </p>
        <p>
            <span>性别:</span>
            <input type="radio" id="girl" name="sex">女
            <input type="radio" id="boy" name="sex">男
        </p>
        <!--绑定时间onclick被点击-->
<p>
    <button type="submit" onclick="a()">提交</button>
</p>
    </form>

    <!--注意必须将html写在javascript上面,否则会报错-->
    <script>

        function a(){
            let username = document.getElementById('username');
            let password=document.getElementById('password');
            console.log(username.value)
            //MD5 算法
            password.value=md5(password.value);
            console.log(password.value)
            return true;
        }

    </script>
</head>
<body>
</body>
</html>

第二种:(最优)

<!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>
    <!--表单级别-->
    <form action="https://www.baidu.com" method="post" onsubmit="return a()">
        <p>
            <span>用户名:</span>
            <input type="text" id="username" value="username"><br>
            <span>密码:</span>
            <input type="password" id="password" value="input-password">
            <input type="hidden" id="pwd">
        </p>
        <p>
            <span>性别:</span>
            <input type="radio" id="girl" name="sex">女
            <input type="radio" id="boy" name="sex">男
        </p>
        <!--绑定时间onclick被点击,按钮级别-->
<p>
    <button type="submit" onclick="a()">提交</button>
</p>
    </form>

    <!--注意必须将html写在javascript上面,否则会报错-->
    <script>

        function a(){
            let username = document.getElementById('username');
            let password=document.getElementById('input-password');
            let password1=document.getElementById('pwd');
            console.log(username.value)
            //MD5 算法
            password1.value=md5(password.value);
            console.log(password1.value)
            //true是提交表单,false是阻止提交
            return true;
        }

    </script>
</head>
<body>


</body>
</html>

10、避免问题

/*if (a==1){
    console.log("买东西");
}else {
    console.log("不买东西")
}*/
if (1==a){
    console.log("买东西");
}else {
    console.log("不买东西")
}

11、JQuery

javascript和jQuery

JQuery是一个库,里面存在大量的javascript函数

获取JQuery?https://jquery.com

文档:

  • https://www.w3school.com.cn/r.asp

  • https://www.runoob.com/jquery/jquery-tutorial.html

  • https://jquery.cuishifeng.cn

  • CDN jQuery

  • https://www.jq22.com/cdn/

    如何使用jquery?

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script src="lib/jquery-3.5.1.min.js"></script>
<!--
公式: $(selector).action()
-->
</body>
</html>
<script src="lib/jquery-3.5.1.min.js"></script>
<!--
公式: $(selector).action()
-->
<a href="" id="test-jqery">点我试试</a>
<script>
    document.getElementById('test-jqery')
    //选择器就是CSS的选择器
    $('#test-jqery').click(
        function () {
            alert('Hello World')
        }
    )

</script>

选择器

<a href="" id="test-jqery">点我试试</a>
<script>
    document.getElementById('test-jqery')
    //选择器就是CSS的选择器
    //id选择器
    $('#test-jqery').click(
        function () {
            alert('Hello World')
        }
    )
    //标签选择器
    $('a').click(
        function () {
            alert('Hello World')
        }
    )
    //class选择器
    $('.class').click(
        function () {
            alert('Hello World')
        }
    )
</script>

事件

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

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script src="lib/jquery-3.5.1.min.js"></script>
<!--
公式: $(selector).action()
-->
<style>
    #divMove{
        width: 1000px;
        height: 1000px;
        border: 1px solid red;
    }
</style>
<!--获取鼠标的坐标-->
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>
</head>
<body>
<script src="lib/jquery-3.5.1.min.js"></script>
<!--
公式: $(selector).action()
-->
<ul class="test-ui">
    <li name='python'>javascript</li>
    <li>java</li>
</ul>
<!--属性选择器-->
<script>
    //获得值
    $('.test-ui li[name=python]').text()
    //设置值
    $('.test-ui li[name=python]').text('python')

    $('.test-ui li[name=python]').html()

</script>
</body>
</html>

css操作

$('.test-ui li[name=python]').css({"color":"red"})

元素的显示和隐藏

//$('.test-ui li[name=python]').show()//显示
$('.test-ui li[name=python]').hide()//隐藏

扩展

$(window).width()
747
$(window).height()
634

巩固JS(看游戏源码)

Layui

https://element.eleme.cn/#/zh-CN/component/layout

let和var的区别

  1. 作用域不同
    var的作用域作用在函数上,let作用域作用在块上,块作用域要比函数作用域小一些,但是如果两者既没在函数中也没再函数上,那么两者都是全局作用域
  2. 被let声明的变量不会作为全局对象window的属性,而被var声明的变量却可以
  3. 在块作用域中,let只能在for()循环上可用,而var整个函数体内都是可见的
  4. let可以允许在同一作用域中声明同名的变量,而let不可以
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值