JavaScript【狂神笔记】

这篇博客详细介绍了JavaScript的基础知识,包括JavaScript的概述、ECMAScript标准,以及快速入门JavaScript的方法,如引入、语法和数据类型。深入探讨了字符串、数组、对象、流程控制、函数、内部对象如Date和JSON,还涉及了面向对象编程、BOM和DOM操作,特别强调了操作表单和使用jQuery库的重要性。
摘要由CSDN通过智能技术生成

JavaScript

什么是JavaScript

概述

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

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

ECMAScript

可以理解为是JavaScript的一个标准

最新版本已经到es6版本

但是大部分的浏览器还只停留在支持es5代码上

开发环境—线上环境,版本不一致

快速入门

引入JavaScript
  1. 内部标签
<script>
	//......
</script>
  1. 外部引入

abc.js

//...

test.html

<script src="abc.js"></script>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

    <!--script标签内,写JavaScript代码-->
<!--    <script>-->
<!--        alert("Hello,world");-->
<!--    </script>-->

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

    <script type="text/javascript"></script>
</head>
<body>

<!--这里也可以存放-->
</body>
</html>
基本语法
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

    <!--JavaScript严格区分大小写!-->
    <script>
        //定义变量  变量类型(var) 变量名=变量值
        var score=80;
        //条件控制
        if(score>=70&&score<80){
            alert("中等");
        }else if(score>=80<90){
            alert("良好");
        }else{
            alert("其它");
        }
        //console.log() 在浏览器的控制台中打印变量!相当于System.out.print()
        console.log(score);
    </script>

</head>
<body>

</body>
</html>
调试JavaScript程序

打开运行的网页 —> 点击审查元素 —> 打开源代码(Sources)—>在打开的代码中设置断点 —> 刷新页面后进行调试

数据类型

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

变量

var name="daxi";
//变量名不能以数字开头

number

123 //整数
123.1 //浮点数
1.23e3 //科学计数法
-99 //负数
NaN //not a number
Infinity //表示无限大

字符串

‘abc’ “abc”

布尔值

true false

逻辑运算

&& || !

比较运算符

=
==		等于(类型不一样,值一样,也会判断为true)
===		绝对等于(类型一样,值一样,结果true)

这是一个JS的缺陷,坚持不要使用==

须知:

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

浮点数问题:

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

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

Math.abs(1/3-(1-2/3))<0.000000001

null和undefined

  • null 空
  • undefined 未定义

数组

Java的数组必须是相同类型的对象,JS中不是

//保证代码的可行性,尽量使用[]
var arr=[1,2,3,"hello",null,true];
new Array(1,2,3,"hello",null,true);

去数组下标:如果越界了,就会显示undefined

对象

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

    <script>
        //Person person=new Person();
        var person={
            name:"daxi",
            age:2,
            tags:['book','auther','...']
        }
    </script>

</head>
<body>

</body>
</html>

取对象的值

person.name
>"daxi"
person.age
>2
严格检查格式
<!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=10;
        //ES6 let
    </script>

</head>
<body>

</body>
</html>

数据类型

字符串

  1. 正常字符串使用 单引号 或者 双引号 包裹
  2. 注意转义字符
\'
\n
\t
\u####    unicode字符
\x##	  Ascll字符
  1. 多行字符串编写
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
  <script>
      'use strict'
      //单引号:tab上面 esc下面
        let name=`
        hello
        world
        welcome
        `;

  </script>


</head>
<body>

</body>
</html>
  1. 模板字符串
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
  <script>
      'use strict'
      let age=7;
      console.log(`age:${age}`);
  </script>
</head>
<body>

</body>
</html>
  1. 字符串长度
student.length
  1. 字符串的可变性,不可变

7.常用方法

//大小写转换
student.toUpperCase()
student.toLowerCase()
//返回下标
student.indexOf('t')
//截取指定字符串
student.substring(1)//从第一个字符截取到最后一个字符
student.substring(1,3)//[1,3)

数组

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

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

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

  1. 方法
indexOf()//通过元素获得下标索引
//字符串的"1"和数字1是不一样的

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

push()//压入到尾部
pop()//弹出尾部的一个元素

unshift()//压入到头部
shift()//弹出头部的一个元素

sort()//排序

reverse()//元素反转

concat()//数组拼接
arr
(3) ['A', 'B', 'C']
arr.concat(1,2,3)
(6) ['A', 'B', 'C', 1, 2, 3]
//注意:concat()并没有修改数组,只是会返回一个新的数组

join()//连接符
arr.join(".");
'A.B.C'
//打印拼接数组,使用指定的字符串连接
  1. 多维数组
arr1=[[1,2],[3,4],[5,6]]
(3) [Array(2), Array(2), Array(2)]
arr1[1][1]
4

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

对象

若干个键值对

var 对象名={
    属性名:属性值,
    属性名:属性值,
    属性名:属性值
}

//定义了一个person对象,有三个属性
<script>
      'use strict'
      var person={
          name:"daxi",
          age:10,
          score:88
      }
</script>

JS中对象,{……}表示一个对象,键值对描述属性xxxx:xxxx,多个属性之间使用逗号隔开,最后一个属性不加逗号

JavaScript中所有的键都是字符串,值是任意对象

1.对象属性

person.age
10
person.name
'daxi'
person.score
88

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

person.dx
undefined

3.动态的删减属性,通过delete删减属性

delete person. score
true
person
{name: 'daxi', age: 10}

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

person.number=3
3
person
{name: 'daxi', age: 10, number: 3}

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

age in person
VM295:1 Uncaught ReferenceError: age is not defined
    at <anonymous>:1:1
(匿名) @ VM295:1
"age" in person
true
//ji
toString in person
false
"toString" in person
true

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

person.hasOwnProperty('tostring')
false
person.hasOwnProperty('age')
true

流程控制

if 判断

<script>
        'use strict'
        var age=3;
        if(age<3){
          alert("www");
        }else if(age===3){
          alert("hhh");
        }else{
          alert("yyy");
        }
</script>

while循环,避免程序死循环

<script>
        'use strict'
        var age=3;
        while(age<100){
            age=age+1;
            console.log(age);
        }
</script>

<script>
        'use strict'
        var age=3;
        do{
            age=age+1;
            console.log(age);
        }while(age<100);
</script>

for循环

<script>
        'use strict'
        var age=3;
        for(let i=age;i<=100;i++){
            console.log(i);
        }
</script>

forEach循环

<script>
        'use strict'
        var age=[10,20,30,40,50,60,70,80,90];
        //函数
        age.forEach(function (value, index, array){
            console.log(age);
        });
    </script>

for…in 循环

<script>
        'use strict'
        var age=[10,20,30,40,50,60,70,80,90];
        //for(type str:el)
        //for(var index in object{}
        for(var num in age){
            console.log(age[num]);
        }
</script>

for…of 循环

<script>
        'use strict'
        var age=[10,20,30,40,50,60,70,80,90];
        //for(var value of object{}
        for(var num of age){
            console.log(num);
        }
</script>

Map和Set

ES6新特性

map

<script>
        'use strict'
        //ES6
        var map=new Map([['lili',80],['daxi',88],['tom',70]]);
        var score=map.get('daxi');
        console.log(score);
        map.set('lala',75);
		map.delete('lili');
</script>

set:无序不重复的集合

<script>
    'use strict'
    //ES6
    var set=new Set([1,2,3,3,4,4,4,4,5]);
    set.add(6);
    set.delete(3);
    console.log(set.has(4));
</script>

iterator

函数

定义函数

定义方式一

绝对值函数

function abs(x){
    if(x>=0){
        return x;
    }else{
        return -x;
    }
}
/*
input(-11)
11
input()
NaN
*/

一旦执行到return代表函数结束,返回结果

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

定义方式二

<script>
    'use strict'
var abs=function(x){
    if(x>=0){
        return x;
    }else{
        return -x;
    }
}
</script>

function(x){……}这是一个匿名函数,但是可以把值赋给abs,通过abs就可以调用函数

调用函数

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

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

参数进来是否存在的问题

假设不存在参数,如果规避

<script>
    'use strict'
var abs=function(x){
    //通过手动抛出异常来判断
    if(typeof x!='number'){
        throw "Not a number";
    }
    if(x>=0){
        return x;
    }else{
        return -x;
    }
}
</script>

arguments

arguments是一个JS免费赠送的关键字

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

<script>
    'use strict'
var abs=function(x){
    //通过手动抛出异常来判断
    if(typeof x!='number'){
        throw "Not a number";
    }
    for(var i=0;i<arguments.length;i++){
        console.log(arguments[i]);
    }
    console.log("x=>"+x);
}
</script>

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

rest

以前…

if(arguments.length>参数个数){
    for(var i=参数个数;i<arguments.length;i++){}
}

ES6引入新特性,获取除了以定义的参数之外的所有参数

function aaa(a,b,...rest){
    consloe.log("a=>"a);
    consloe.log("b=>"b);
    consloe.log(rest);
}

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

变量的作用域

在JavaScript中,var定义变量实际是有作用域的。

假设在函数体中声明,则在函数体外不可以使用(想实现可以使用闭包)

<script>
    'use strict';
function add(){
    var x=1;
    x=x+1;
}
//Uncaught ReferenceError: x is not defined
x=x+1;
</script>

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

<script>
    'use strict';
function add(){
    var x=1;
    x=x+1;
}
function add2(){
    var x='a';
    x=x+'b';
}
</script>

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

//Uncaught ReferenceError: y is not defined
<script>
    'use strict';
function add(){
    var x=1;
    x=x+1;
    function add2(){
        var y='a';
        y=x+'a';
    }
    var z=y+2;
}
</script>

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

<script>
    'use strict';
function add(){
    var x=1;
    function add2(){
        var x='a';
        console.log('inner'+x);
    }
    console.log('outer'+x);
    add2();
}
</script>
outer1
innera

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

提升变量的作用域

<script>
    'use strict';
function df(){
    var x='x'+y;
    console.log(x);
    var y='y';
}
</script>
xundefined

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

<script>
    'use strict';
function df(){
    var y;
    
    var x='x'+y;
    console.log(x);
    var y='y';
}
</script>

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

function df2(){
    var x=1;
    	y=x+1;
    	z,i,a;//undifined
    
    //之后随意用
}

全局函数

<script>
    'use strict';
var x=1;
function f() {
    console.log(x);
}
f();
console.log(x);
</script>

全局对象 window

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

alert() 这个函数本身也是一个全局变量

<script>
    'use strict';
var x='xxx';
window.alert(x);

var old_alert=window.alert;
//old_alert(x);
window.alert=function(){};
window,alert(x);//发现alert失效

//恢复
window.alert=old_alert;
window.alert(x);
</script>

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

规范

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

  <script>
      'use strict';
      //唯一全局变量
      var KJ={};
      
      //定义全局变量
      KJ.name='languaj';
      KJ.add=function (a,b) {
          return a+b;
      }
  </script>

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

jQuery

  <script>
      function a(){
          for (var i = 0; i < 100; i++) {
              console.log(i);
          }
          console.log(i+1);
      };
      a();//问题:i出了这个作用域还可以使用
      function b(){
          for (let i = 0; i < 100; i++) {
              console.log(i);
          }
      console.log(i+1);//Uncaught ReferenceError:i is not defined
      };
      b();
  </script>

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

建议大家都使用 let 去定义局部作用域的变量;

常量

在 ES6 之前,怎么定义常量:只有用全部大写字母命名的变量就是常量,建议不要修改

  <script>
      'user static'
      var PI='3.14';
      console.log(PI);
      PI='23';
      console.log(PI);//可以改变
  </script>

在 ES6 引入了常量关键字const

  <script>
      'user static'
      const PI='3.14';//只读变量
      console.log(PI);
      PI='12';
      console.log(PI);//TypeError: Assignment to constant variable.
  </script>

方法

定义方法

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

<script>
    'user static'
var people={
    name:'daxi',
    birth:2000,
    age:function(){
        var now=new Date().getFullYear();
        return now-this.birth;
    }
}
</script>
//属性
people.name
//方法,一定要带()
people.age()

this. 代表什么?分解代码观察

<script>
    'user static'
function getAge(){
    var now=new Date().getFullYear();
    return now-this.birth;
}

var people={
    name:'daxi',
    birth:2000,
    age:getAge
}
</script>
/*
people.age()
22
getAge()
NaN
*/

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

apply

在js中可以控制this的指向

getAge.apply(people,[])
//this指向了people,参数为空
22

内部对象

标准对象

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

Date

<script>
    'user strict'
var now=new Date();//Sat Jul 02 2022 17:13:33 GMT+0800 (中国标准时间)
now.getFullYear();//
now.getMonth();//月 0-11 月份
now.getDate();//日
now.getDay();//星期
now.getHours()//时
now.getMinutes();//分
now.getSeconds();//秒

now.getTime();//时间戳 全世界统一 从1970 1.1 0:00:00 毫秒数

console.log(new Date(1656753213360))//时间戳转为时间
</script>

转换

now=new Date(1656753213360)
Sat Jul 02 2022 17:13:33 GMT+0800 (中国标准时间)
now.toLocaleString()//注意:调用的是一个方法,不是一个属性
'2022/7/2 17:13:33'
now.toGMTString()
'Sat, 02 Jul 2022 09:13:33 GMT'

JSON

json是什么

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

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

在 JavaScript 中一切皆为对象,任何 js 支持的类型都可以用json来表示:number,String……

格式:

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

JSON 字符串和 JS 对象的转化

  <script>
      var student={
        name:'daxi',
        age:16,
        sex:'男'
      };
      //对象转化为 JSON字符串 {"name":"daxi","age":16,"sex":"男"}
      var json_s=JSON.stringify(student);
      //json字符串转化为对象,参数为json字符串
      var obj=JSON.parse('{"name":"daxi","age":16,"sex":"男"}');
  </script>

JSON 和 JS 对象的区别

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

Ajax

  • 原生的js写法,xhr 异步请求写法
  • JQuey 封装好的方法 ${“#name”}.ajax{“”}
  • axios请求

面向对象编程

什么是面向对象

javascript,java,c#。。。。。面向对象;javascript有些区别

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

在 JavaScript 中需要转换一下思路

原型:

var student={
    name:'daxi',
    age:16,
    sex:'男',
    run:function(){
        console.log(this.name+'run');
    }
};
var xiaom={
    name:'xiaoming'
}
//原型对象
xiaom.__proto__=student;
function Student(name){
            this.name=name;
        }
        //给Student新增一个方法
        Student.prototype.hello=function (){
            alert('Hello');
        };

class继承

class关键字,是在ES6引入的

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

//定义一个学生的类
class Student{
    constructor(name) {
        this.name=name;
    }
    hello(){
        alert('hello');
    }
}
var xiaoming=new Student("xiaoming");
var xiaohong=new Student("xiaohong");
xiaoming.hello()

2.继承

//定义一个学生的类
class Student{
    constructor(name) {
        this.name=name;
    }
    hello(){
        alert('hello');
    }
}
class pupil extends Student{
    constructor(name,grade) {
        super(name);
        this.grade=grade;
    }
    myGrade(){
        alert('i am a pupil');
    };
}
var xiaoming=new Student("xiaoming");
var xiaohong=new pupil("xiaohong");

本质:查看对象原型

原型链

__ proto __:

操作BOM对象(重点)

浏览器介绍

JavaScript 和 浏览器关系

JavaScript 诞生就是为了能够让它在浏览器中运行

B:浏览器对象模型

  • IE 6-11
  • Chrome
  • Safari
  • FireFox
  • Opera

三方

  • QQ浏览器
  • 360浏览器

window

window 对象代表浏览器窗口

window.alert(1)
undefined
window.innerHeight
767
window.innerWidth
210
window.outerHeight
854
window.outerWidth
974
window.innerWidth
256
//可以调整浏览器窗口观察...

navigator

Navigator,封装了浏览器的信息

navigator.appName
'Netscape'
navigator.appVersion
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.66 Safari/537.36 Edg/103.0.1264.44'
navigator.userAgent
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.66 Safari/537.36 Edg/103.0.1264.44'
navigator.platform
'Win32'

大多数时候,我们不会使用navigetor对象,因为会被人为修改

不建议使用这些属性来判断和编写代码

screen

代表屏幕尺寸

screen.width
1536
screen.height
864

location ( 重要 )

location 代表当前页面的 URL 信息

host: "localhost:63342"
href:"http://localhost:63342/JavaScript/lesson02/7.classu%E5%AF%B9%E8%B1%A1.html?_ijt=36muf8gf2ipl58vqu4fff3qeai&_ij_reload=RELO
protocol: "http:"
reload: ƒ reload()//刷新网页
//设置新的地址
location.assign('https://baike.baidu.com/')

document

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

document.title
'Title'
document.title='hello'
'hello'

获取具体的文档树节点

<dl id="app">
    <dt>Java</dt>
    <dt>JavaSE</dt>
    <dt>JavaEE</dt>
</dl>

<script>
    var dl=document.getElementById('app');
</script>

获取cookie

document.cookie
"BIDUPSID=59E059B72E69AC32138CE769B22F6DF6; PSTM=1604737968; BAIDUID=01A2E69F66A7386462A389A2025BDF51:FG=1; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BDRCVFR[feWj1Vr5u3D]=I67x6TjHwwYf0; delPer=0; PSINO=5; H_PS_PSSID=36545_36721_36454_31660_36413_36692_36167_36694_36698_36074_36773_36745_36760_36769_36764_26350_36467_36711_36651; BA_HECTOR=a1a52404a58gal8h8k1hc1piv15; ZFY=ln:BtsRJRsRTBSdryv:Aoe5YIhP0sVcamFy6INzC1QUKk:C; baikeVisitId=a78bedd8-faed-47d2-8e6c-38dc82965bf5; channel=baidusearch; Hm_lvt_55b574651fcae74b0a9f1cf9c8d7c93a=1656809058; Hm_lpvt_55b574651fcae74b0a9f1cf9c8d7c93a=1656809058; zhishiTopicRequestTime=1656814291918; RT="z=1&dm=baidu.com&si=5m01nzmow9t&ss=l54og9uq&sl=b&tt=sx&bcn=https%3A%2F%2Ffclog.baidu.com%2Flog%2Fweirwood%3Ftype%3Dperf&ld=26zv""

劫持 cookie 原理

www.taobao.com

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

服务器端可以设置 cookie : httpOnly

history

history 代表浏览器的历史记录

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

操作DOM对象(重点)

DOM:文档对象模型

核心

浏览器网页就是一个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 选择器
    var father=document.getElementById('father');
    var h1=document.getElementsByTagNameNS('h1');
    var p1=document.getElementById('p1');
    var p2=document.getElementsByClassName('p2');
    
    var children=father.children;//获取父节点下的所有子节点
    // father.firstChild
    // father.lastChild
</script>

这是原生代码,之后我们尽量都使用jQuery

更新节点

<div id="id1">

</div>

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

操作文本

id1.innerText='123'
'123'
id1.innerText='456'
'456'
id1.innerHTML='<strong>456</strong>'
'<strong>456</strong>'

操作JS,css

id1.style.color='red'//属性使用 字符串 包裹
'red'
id1.style.fontSize='50px'// _ 转 驼峰命名问题
'50px'
id1.style.padding='2em'
'2em'

删除节点

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

<div id="father">
    <h1>标题一</h1>
    <p id="p1">p1</p>
    <p class="p2">p2</p>
</div>

<script>
    //对应 css 选择器
    var father=document.getElementById('father');
    var h1=document.getElementsByTagName('h1');
    var p1=document.getElementById('p1');
    var p2=document.getElementsByClassName('p2');
</script>

	father.removeChild(p2)
	//标签和class是数组格式,删除时可写为
	//father.removeChild(p1[0])

	//删除是一个动态的过程
	father.removeChild(father.children[0]);
	father.removeChild(father.children[1]);
	father.removeChild(father.children[2]);

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

插入节点

我们获得了某个DOM节点,假设这个DOM节点是空的,我们通过 innerHTML 就可以增加一个元素,但是这个DOM节点已经存在元素了,就不能使用这种方法了,会产生覆盖

追加

<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>
    var js=document.getElementById('js');//已经存在的节点
    var list=document.getElementById('list');
</script>
	list.appendChild(js)//追加到后面

创建一个新的标签,实现插入

<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>
    var js=document.getElementById('js');
    var list=document.getElementById('list');
    //通过JS 创建一个新的节点
    var newP=document.createElement('p');//创建一个p标签
    newP.id='newP';
    newP.innerText='Hello,my new world';
    list.appendChild(newP);
    //创建一个标签节点(通过这个节点,可以设置任意的值)
    var myScript = document.createElement('script');
    myScript.setAttribute('type','text/javascript');
</script>

insert

var ee = document.getElementById('ee');
    var js = document.getElementById('js');
    var list = document.getElementById('list');
    list.insertBefore(js,ee);

操作表单(验证)

表单是什么 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="male" id="male">
        <input type="radio" name="sex" value="female" id="female">
    </p>

</form>

<script>
    var input_text = document.getElementById('username');
    var male_radio = document.getElementById('male');
    var female_radio = document.getElementById('female');
    //得到输入框的值
    input_text.value
    //修改输入框的值
    input_text.value='123'
    //对于单选框,多选框等固定的值,radio.value只能获取定义的值
    male_radio.checked;
    //查看返回的结果,如果为true,则被选中
</script>

提交表单

<!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= 绑定一个提交检测的函数,ture,false
将这个结果返回给表单,使用onsubmit接收
οnsubmit="return aaa()"
-->
<form action="3.插入节点.html" method="post" onsubmit="return aaa()">
    <p>
        <span>用户名:</span> <input type="text" id="username" name="username">
        <span>密码:</span> <input type="password" id="password" name="pwd">
    </p>
    <p>
        <button type="submit">提交</button>
    </p>
    <input type="hidden" id="md5-password" name="password">
</form>

<script>
    function aaa(){
        alert(1);
        var uname = document.getElementById('username');
        var pwd = document.getElementById('password');
        var md5pwd = document.getElementById('md5-password');
        //md5加密
        md5pwd.value=md5(md5pwd.value);
        console.log(uname.value);
        console.log(pwd.value);
        console.log(md5pwd.value);
        //可以校验判断表单内容,true就是通过提交,false阻止提交
        return true;
    }
</script>

</body>
</html>

jQuery

JavaScript 和 jQuery库

jQuery库,里面存在大量的JavaScript函数

获取jQuery

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!-- 可在官网下载或使用在线jQuery CDN jQuery -->
    <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
</head>
<body>

<a href="" id="test-jquery">点击测试</a>
<!-- jQuery公式:$(selector).action -->
<script>
    //选择器就是css的选择器
    $('#test-jquery').click(function (){
        alert('hello,jQuery');
    })
</script>

</body>
</html>

选择器

<script>
    //原生选择器,选择器少,麻烦不好记
    //标签
    document.getElementsByTagName();
    //id
    document.getElementById();
    //类
    document.getElementsByClassName();

    //jQuery css中的选择器它全都能用
    $('p').click();//标签选择器
    $('#id1').click()//id选择器
    $('.class1').click()//类选择器
</script>

文档工具站:https://jquery.cuishifeng.cn/

事件

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

<!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>
    <style>
        #divMove{
            width: 500px;
            height: 500px;
            border: blue 1px solid;
        }
    </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

节点文本操作

<ul id="test-ul">
    <li class="js">JavaScript</li>
    <li name="python">python</li>
</ul>

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

css的操作

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

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

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

未来ajax

$.ajax({ url: "test.html", context: document.body, success: function(){
    $(this).addClass("done");
}});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值