JavaScript学习笔记

结构层:html

表现层:css

行为层:javascript

JavaScript:是一种脚本语言,其源代码不需要经过编译,而是由浏览器解释运行,用于控制网页的行为

JQuery 是一个库相当于库

三大框架:

Angular:Google收购的前端框架 模块化开发

React:FaceBook出品的的 提出了新概念虚拟化DOM

Vue:综合了Angular(模块化开发)和React(虚拟化DOM)的优点。

Ant Design 阿里巴巴的出品

ElementUI 、iview、ice 饿了么出品,基于Vue的UI框架

Bootstrap :Twitter推出的一个用于前端开发的开源工具包

AmazeUI:又叫“妹子UI”,一款HTML5的屏障前端框架

1.什么是JavaScript

1.1概述

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

Java与JavaScript没有一点点关系,他俩是完全不同的语言

1.2历史

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

最新的版本已经到6版本了,但是浏览器大部分还只停留在支持5版本的代码上

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

2.快速入门

2.1引入javaScript

1.内部标签

<script>
    //代码
</script>

2.外部引用

<script src="">
    </script>

3.hello,world的源代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!--script标签内写js代码-->
    <!--<script>-->
    <!--alert('hello,world')-->
    <!--</script>-->

    <!--外部引用,注意点是必须是闭合标签-->
    <script src="js/hello.js">

    </script>

</head>
<body>

<!--这里也可以存放script标签-->
</body>
</html>

js 源代码

alert('hellow,orld');
2.2.基本语法入门
 <!--JavaScript严格区分大小写-->
<!DOCTYPE html>
<html lang="en">
<head>
   
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        //1.定义变量  变量类型  变量名  =  变量值;
        var score =73;
        'helloworld'
       // alert(num);
        //2.条件控制

        if(score>60 && score<70){
            alert("60-70");
        }else if (score>=70 && score<80) {
            alert("70-80");
        }else {
            alert("other")
        }
        //console.log(score) 在浏览器的控制台打印变量!  System.out.println()
    </script>
</head>
<body>

</body>
</html>

3数据类型

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

数值类型numberjs不区分小数和整数,Number

前提:IDEA 需要设置支持ES6语法

在这里插入图片描述

严格检查模式'use strict',预防javascript的随意性导致产生的一些问题

必须写在 javascript第一行

局部变量建议都使用let去定义

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        //严格检查模式
        'use strict'
        //ES6 let  定义局部变量
        let i=1;
    </script>

</head>
<body>

</body>
</html>
3.1字符串
1.正常字符串我们使用单引号或者双引号包裹
2.需要注意转义字符 \
\`
\n
\t
\u4e2d  \u#### Unicode 字符
Ascll字符
3.多行字符串编写
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        'use strict'
        console.log('a');
        console.log("a");
        //table键上边  esc键下边
        var str=`
        hello
        world
        你好啊
        你好
        `
    </script>
</head>
<body>
</body>
</html>
4.模板字符串
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        'use strict'
        console.log('a');
        console.log("a");
        //table键上边  esc键下边
     let name =`xiaoming`
        let age=18;
     let msg =`你好呀,${name}`
        console.log(msg)

    </script>
</head>
<body>
</body>
</html>
5.字符串长度

//str.length
var student = 'student';
console.log(student.length)
6.字符串的可变性,不变性
//str[]通过下标打印字符串的每一个元素
console.log(student[2])
 u

通过赋值发现是不可变的。

在这里插入图片描述

7.大小写转换

小写转大写:通过方法

console.log(student.toLocaleUpperCase())
STUDENT

大写转小写:通过方法

console.log(student.toLocaleLowerCase())
student
8.获得指定字符的下标
console.log(student.indexOf(`t`))
1

console.log(student.indexOf(`u`))
 2

9.截取字符串substring[)
console.log(student.substring(0,3))
stu
//从指定的字符截取到指定字符[)[0,3)
console.log(student.substring(1))
//从第一个字符截取到最后一个字符
3.2数组

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

数组的定义

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

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

arr[0]=0
//0
arr[0]
//0
console.log(arr)
 //(6) [0, 2, 3, 4, 5, 6]0: 0 1: 2 2: 3 3: 4 4: 5 5: 6length: 6__proto__: Array(0)

arr.length=10
//10
console.log(arr)
//(10) [0, 2, 3, 4, 5, 6, empty × 4]0: 0 1: 2 2: 3 3: 4 4: 5 5: 6 length: 10__proto__: Array(0)
//empty × 4 4个空的

arr[7]
//undefined

arr.length=2
//2

console.log(arr)

//(2) [0, 2]0: 0 1: 2 length: 2__proto__: Array(0)

2.通过元素获得下标索引
arr.indexOf(2)
//1

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

var arr=[1,2,3,4,5,6,'1','3']
arr.indexOf(1)
//0
arr.indexOf('1')
//6
3.截取Array的一部分,返回一个新的数组
arr.slice(3)
//从下标为3的元素开始截到最后
arr.slice(1,5)
//[1,5)

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

4.向数组的尾部添加一些元素

push()往数组中添加元素

arr.push('a','b')
console.log(arr)
//(10) [1, 2, 3, 4, 5, 6, "1", "3", "a", "b"]

pop() 从数组中弹出元素

arr.pop()
"b"
console.log(arr)
// (9) [1, 2, 3, 4, 5, 6, "1", "3", "a"]
push():将元素压入数组的尾部
pop():弹出尾部的一个元素

5.向数组的头部添加一些元素

unshift():向数组的头部添加一个元素

arr.unshift('a','b')

console.log(arr)
//(11) ["a", "b", 1, 2, 3, 4, 5, 6, "1", "3", "a"]

shift():去掉数组头部的一个元素

arr.shift()
"a"

console.log(arr)
// (10) ["b", 1, 2, 3, 4, 5, 6, "1", "3", "a"]
5.数组排序

arr.sort()

arr=['C','B','A']
//(3) ["C", "B", "A"]
arr.sort()
//(3) ["A", "B", "C"]

6.元素反转

arr.reverse():从数组的中间下标将元素反转


//(3) ["A", "B", "C"]
arr.reverse()
//(3) ["C", "B", "A"]
7.数组拼接

concat():元素拼接,但是并没有修改改变原来的数组,只是返回了一个新的新的数组

arr.concat([1,2,3])
//(8) ["X", "D", "C", "B", "A", 1, 2, 3]
//但是并没有将原来的数组干掉
console.log(arr)
//(5) ["X", "D", "C", "B", "A"]
8.打印数组拼接连接符

join():打印拼接数组,使用特定的字符串拼接


//(5) ["X", "D", "C", "B", "A"]
arr.join('-')
//"X-D-C-B-A"
9.多维数组
arr=[[1,2],[3,4],['a',6]]
//[Array(2), Array(2), Array(2)]
arr[1][1]
//4

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

3.3对象

若干个键值对


var 对象名 ={
    属性名:属性值,
    属性名:属性值,
    属性名:属性值,
    属性名:属性值
    //最后一个属性没有逗号  
}

//示例 :定义了一个person对象拥有四个属性
     var person ={
            name:"张三",
            age: 18,
            email: "123456789",
            score:0
        }

js中对象,{…}表示一个对象,使用键值对来描述属性。键值对书写 xxx:xxx,多个属性之间使用逗号隔开,最后一个属性不加逗号

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

1.给对象的属性赋值
person.name="李四"
"李四"
person.name
//"李四"
2.使用一个不存在的属性不会报错 undefined
person.haha
//undefined
3.动态的删减属性

person
{name: "李四", age: 18, email: "123456789", score: 0}
elete person .score
true
person
{name: "李四", age: 18, email: "123456789"}
4.动态的增加属性
person.haha = "haha"
"haha"
person
{name: "李四", age: 18, email: "123456789", haha: "haha"}
5.判断属性值是否在这个对象中! xxx in xxx
'age' in person
true
// toString 方法是继承父类的
'toString' in person
true

在这里插入图片描述

6.判断一个属性是否是这个对象自身拥有的hasOwnProperty()
person.hasOwnProperty('toString')
false
person.hasOwnProperty('name')
true
3.4流程控制
1.if判断
var age =3;
if(age>3&& age <6){
    alert("haha")
   }else if(age>= 6){  
       alert("play") 
  }else {
        alert("ku") 
  }
2.while循环,避免程序死循环
       var age = 3;
    while (age<100){
        age =age+1;
        console.log(age)
    }
3.for循环
      for (let i = 0; i <100 ; i++) {
            console.log(i)
        }
4.forEach循环
 var arr=[1,2,3,4,5,56,65,42,323,3234,42,24,2];
        arr.forEach(function (value) {
           console.log(value)
        })
3.5map和set集合
Map集合:
  //ES6中新出现的
        //学生的成绩和学生的姓名
        var  map =new Map([["zhangsan",100],["lisi",60],["wangwu",90]]);
        //通过key值获得value
        var score= map.get("lisi");
        console.log(score);
		//新增一个元素
        map.set("zhaoliu",80);
		//通过key值删除一个元素
         map.delete("zhangsan")
//控制台输出map
//map
//Map(4) {"zhangsan" => 100, "lisi" => 60, "wangwu" => 90, "zhaoliu" => 80}
Set:无序不重复的集合

set中有多个一样的元素只会显示一个元素。

        var set =new Set([3,2,2,2,2,2,2,7]);
        //Set(3) {3, 2, 7}
        //往set中添加元素
         set.add(6)
        //Set(4) {3, 2, 7, 6}
        //删除set中的某一个元素
         set.delete(2)
        //Set(3) {3, 7, 6}
        //判断该set中是否包含3
        console.log(set.has(3))
        //true
3.6 iterator迭代

es6的新特性,使用迭代来遍历

1.遍历数组

//通过for in打印数组的下标
//通过for of打印具体的值    

var arr =[3,4,5];
        //打印arr数组具体的值
        for (var x of arr){
            console.log(x)
        }


2.遍历map
    var map =new Map([["zhangsan",100],["lisi",80],["wangwu",60]]);
        for (let x of map){
            console.log(x)
        }
3.遍历set
     var set =new Set([1,2,6,8])
        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就可以调用函数。

2.调用函数

abs(50) //50
abs(-90)//90

**参数问题:**javascript可以传递任意个的参数,也可以不传递参数。

思考:参数是否存在的问题?

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

手动的抛出异常:

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

3.arguments关键字

arguments是javaScript免费赠送的关键字

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

 var  abs =function (x){
        console.log("x==>"+x);
        for (let i = 0; i < arguments.length; i++) {
            console.log(arguments[i]);
        }
        //手动的抛出异常
        if(typeof x!=='number'){
            throw 'not a number';
        }
        if(x>=0){
            return x;
        }else {
            return -x;
        }
    }

控制台运行的结果:

在这里插入图片描述

通过arguments可以获得隐藏参数的值

问题:arguments包含所有的参数,需要使用多余的参数,我么就要排除已有的参数。

rest参数:获得其他的隐藏参数

以前获取多余的参数:

    function  a(x,y){
        console.log(x);
        console.log(y);
        for (let i =2;i<arguments.length;i++){
            console.log(arguments[i]);
        } 
    }

es6引入的新特性,获取除了已经定义的参数之外的所有参数**…rest**

   function  a(x,y,...rest){
        console.log(x);
        console.log(y);
        console.log(rest)
    }

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

4.2变量的作用域

1.在javaScript中,var变量实际是有作用域的,假设在函数体中声明,则在函数体外是不可以使用的。

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

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

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

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

3.内部函数可以访问外部函数的成员,反之外部函数不能访问内部函数的成员。


    function a() {
        var x =1;
        x=x+1;
        //内部函数可以使用外部函数的成员,反之不行
        function b() {
            var  y=x+1;// y=3
            console.log(y)
        }
        var z =y+1;//z没值
        console.log(z)// Uncaught ReferenceError: y is not defined 但是已经定义了y
    }

4.内部类跟外部类同时定义相同名称的变量

        function a() {
            var x = 1;
            function b() {
                var x = "a";
                console.log("innner==>" + x);//innner==>a
            }
            b();
            console.log("outer==>" + x);// outer==>1
        }
        a();

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

所有的变量都定义在函数的头部,不要乱放定义,便于代码的维护。即先定义后赋值

5.全局变量

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

6.全局对象window

  var x="bbbbb";
   //alert(x);
   alert(window.x);//默认所有的全局变量,都会自动的绑定在window上

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

  window.alert(x)

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

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

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

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

7.局部作用域 let

function aaa() {
    for (var i = 0; i <100 ; i++) {
        console.log(i)
    }
    console.log(i+1);//输出i=101 发现问题i出了for循环还能使用
}

为了解决这样的冲突在 ES6中引入了let关键字来解决


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

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

8.常量const

在ES6之前,怎么定义常量的:只有用全部大写字母命名的为常量,不建议去修改这些值

   var PI ='3.14';
   console.log(PI);
PI ='9999';//可以去修改的
console.log(PI)

在ES6中引入常量的关键字const

 const  PI ='3.14';
   console.log(PI);
4.3方法

1.定义方法:
就是把函数放到对象的里边,对象只有两个东西,属性和方法。

   var demo={
       name: 'zhangsan',
       birth:2010,
       age:function () {
          var now = new Date().getFullYear();
          return now-this.birth;
       }
   }
   //调用属性  demo.name
    //调用方法 demo.age()

拆开上面的代码:

   function getAge() {
        var now = new Date().getFullYear();
        return now-this.birth;
    }
   var demo={

       name: 'zhangsan',
       birth:2010,
       age:getAge
   }
   //调用属性  demo.name
    //调用方法 demo.age()
   //getAge()   NaN 代表的是window

this:代表什么?
this始终指向调用它的对象,即是默认只想调用它的那个对象

apply:在js中可以控制this的指向,

    function getAge() {
        var now = new Date().getFullYear();
        return now-this.birth;
    }
   var demo={

       name: 'zhangsan',
       birth:2010,
       age:getAge
   };
   //调用属性  demo.name
    //调用方法 demo.age()
     getAge.apply(demo,[]);//空参this指向demo参数为空

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.1、Date

基本使用:

 var date = new Date();//Mon Nov 09 2020 19:32:19 GMT+0800 (中国标准时间)
    date.getFullYear();//年
    date.getMonth();//月  0-11代表月
    date.getDate();//日
    date.getDay();//星期几
    date.getHours();//时
    date.getMinutes();//分
    date.getSeconds();//秒
    date.getTime();//时间戳  全世界唯一 1970年1月1日  0:00:00 毫秒数
    console.log(new Date(1604921539945));//时间戳转为时间  Mon Nov 09 2020 19:32:19 GMT+0800 (中国标准时间)

转换

date = new Date()
Mon Nov 09 2020 19:41:11 GMT+0800 (中国标准时间)
date.toLocaleString()//调用是一个方法,不是一个属性
"2020/11/9 下午7:41:11"
date.toGMTString()
"Mon, 09 Nov 2020 11:41:11 GMT"
5.2 JSON

早期的数据传输使用xml!

什么是JSON(查自百度百科)

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

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

格式:

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

Json 字符串和js对象的转换 示例:

    var user  ={
        name:"张三",
        age: 18,
        sex: '男'
    };
    //将对象转换为json字符串 {"name":"张三","age":18,"sex":"男"}
    var Jsonuser = JSON.stringify(user);

    //将接送字符串转换为对象  参数是json字符串需要用''包起来  {name: "张三", age: 18, sex: "男"}
     var  obj = JSON.parse('{"name":"张三","age":18,"sex":"男"}');

JSON与js的区别

var obj ={a:"hello",b:"hellob"}//标准的对象
var json={"a":"hello","b":"hellob"}//json字符串

6.面向对象编程

面向对象:类和对象

1.面向对象的原型继承
        var Student ={
            name:"张三",
            age:4,
            run:function () {
                console.log(this.name + "run...")
            }
        };
        var xiaoming ={
            name:"xiaoming"
        };
        //xiaoming的原型是Studnent可以继承student的方法以及属性
        // xiaoming.__proto__ = Student;
        var Bird ={
            fly:function () {
                console.log(this.name + "fly...")
            }
        }
        //xiaoming的原型又变为Bird
        xiaoming.__proto__ = Bird;
2.class 继承

class关键字是在ES6引入的

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

   //定义一个Student类
    class Student {
        constructor(name,age){
            this.name=name;
            this.age=age;
        }
        hello(){
            alert("hello")
        }
    }
    //创建多个对象
     var xiaoming = new Student("xiaoming",4);
    var lisi =new Student("lisi",9);

2.继承

//定义一个Student类
    class Student {
        constructor(name,age){
            this.name=name;
            this.age=age;
        }
        hello(){
            alert("hello")
        }
    }
    class xiaoStudent extends Student{
        constructor(name,age,grade){
            super(name,age)
            this.grade =grade;
        }
        myGrade(){
            alert("我是一名小学生")
        }
    }
  var lisi =new xiaoStudent("lisi",9,1);

本质,还是指向原型

在这里插入图片描述

原型链:

7.操作BOM对象(重点)

javaScript与浏览器的关系?

javaScript的出现是为了在浏览器上使用。

BOM:浏览器对象模型。

1.window

全局变量

window.alert(10)
undefined
window.innerHeight
927
window.outerHeight
1047
window.innerWidth
150
window.outerWidth
974
//大家可以调整浏览器窗口试一试会获得不同的值
2.Navigator

Navigator,封装了浏览器的信息

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

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

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

3.screen

屏幕的信息(尺寸)

screen.width
1920
screen.height
1080
4.location(重要)

location代表当前页面的URL信息

host: "www.baidu.com"//主机
href: "https://www.baidu.com/?tn=62095104_26_oem_dg"//指向
protocol: "https:"//协议
reload: ƒ reload()//重新加载


location.assigm('https://www.bilibili.com/')//跳转到指定的网页 跳转到b站
5.document

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

document.title
"百度一下,你就知道"
document.title='改为我们自己的标题'
"改为我们自己的标题"

获取具体的文档数节点。

<dl id="app">
    <dt>Java</dt>
    <dd>JavaSE</dd>
    <dd>JavaEE</dd>
</dl>
<script>
  var dl= document.getElementById("app")
</script>

document对象可以获得cookie

document.cookie
"BIDUPSID=6DBA1989230DF693DAC3491728A6EEFA; PSTM=1604969635; BAIDUID=6DBA1989230DF69382089972580272FB:FG=1; H_PS_PSSID=; BD_UPN=12314753; delPer=0; BD_CK_SAM=1; PSINO=2; __guid=136081015.1445115290938759000.1604969969216.8213; BDRCVFR[tFA6N9pQGI3]=mk3SLVN4HKm; BD_HOME=1; BDRCVFR[QxxZVyx49rf]=0AuBJa0A3HcfjmznjbdnH0Yg1cvgvq-; H_PS_645EC=855foh%2FaWHLbI0iuFpfaSj35YlP8cCf8xnKHYQj5iLg6MPXvaFE%2BTe7vJ79AahJlPENjTlCGO9vC; BDORZ=FFFB88E999055A3F8A630C64834BD6D0; BA_HECTOR=04aha0a400ag2la6p61fqjtr00p; COOKIE_SESSION=4787_0_2_3_0_20_1_2_0_2_2_9_0_0_0_0_0_0_1604974435%7C3%230_0_1604974435%7C1; __yjsv5_shitong=1.0_7_a2c510e50e4c83d2ab82cec78e763c7ef7b7_300_1604975270635_124.89.2.70_67769414; monitor_count=9"
6.history(不建议使用)

history代表浏览器的历史纪录

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

8.操作DOM对象

DOM:文档对象模型

1.获得DOM节点

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

  • 更新DOM节点‘
  • 遍历DOM节点,得到DOM节点
  • 删除一个DOM节点
  • 添加一个DOM节点

要操作一个DOM节点,首先必须要先获得这个DOM节点

  //对应css选择器
    var h1 =  document.getElementsByTagName('h1');//标签选择器
    var p1= document.getElementById('p1');
    var p2 =document.getElementsByClassName('p2');
    var father= document.getElementById('father');
    var childrens = father.children;//获取父节点下的所有子节点
    //father.firstChild
    //father.lastChild;

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

2.更新节点
<div id = "id1"></div>
<script>
    var id1 = document.getElementById('id1');
</script>

操作文本

id1.innerText ='123' //修改文本的值
"123"
id1.innerHTML = '<strong>abc</strong>'//可以解析HTML中的文本标签
"<strong>abc</strong>"

操作css样式

id1.innerText ='123'
"123"
id1.innerHTML = '<strong>abc</strong>'
"<strong>abc</strong>"
id1.style.color = 'red'
"red"
id1.style.fontSize = '200px'
"200px"
id1.style.padding ='2em'
"2em"
3.删除节点

删除节点需要获取节点。

删除节点的步骤:需要先获得父节点,通过父节点来干掉自己。

在已经知道父节点的情况下删除该节点:

<div id ="father">
    <h1>h1</h1>
    <p id ="p1">p1</p>
    <p class ="p2">p2</p>
</div>
<script>
    var p1 =document.getElementById('p1');
	//获得父亲的元素
	
    var father =document.getElementById('father');
    father.removeChild(p1);
</script>

在未知父节点的情况先获取父节点,然后再删除自己

<div id ="father">
    <h1>h1</h1>
    <p id ="p1">p1</p>
    <p class ="p2">p2</p>
</div>
<script>
	//首先获取父节点
    var fu =p1.parentElement;
    fu.removeChild(p1)

删除是一个动态的过程:数组的第一个是变化的

    //删除是一个动态的过程这是不可以实现的
    father.removeChild(father.children[0]);
    father.removeChild(father.children[1]);
    father.removeChild(father.children[2]);
    father.removeChild(father.children[3])

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

4.插入节点

我们获得了某个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>
        //获得list和js的节点
        var js =document.getElementById('js');
        var list =document.getElementById('list');
        list.appendChild(js)
    </script>

效果:

在这里插入图片描述

通过创建新的标签来实现插入

 <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>
       
        //通过js创建一个新的节点
        var newP =document.createElement('p');
        newP.id = 'newP';
        newP.innerText ="hello";
        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)//将style标签放入head中
    </script>

inserBefer:往前插

        var ee =document.getElementById('ee');
        var list =document.getElementById('list');
        var js =document.getElementById('js');
        //insertBefore(要插入的值,要插入哪个值之前);
        list.insertBefore(js,ee);

9.操作表单

表单是什么?form dom树

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

表单的目的是:提交信息

1.获得提交的信息
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="post">
    <p>
        <span>用户名:</span>
        <input type="text" id="username">
    </p>
    <!--多选框的值就是定义好的value-->
    <p>
        <span>性别:</span>
        <input type="radio" name="sex" value="man" id="boy" ><input type="radio" name="sex" value="woman" id="girl" ></p>
</form>
<script>
   var username = document.getElementById('username');
   var boy_radio =document.getElementById('boy');
   var girl_radio = document.getElementById('girl');
    //得到输入框的值 username.value
    //既然可以得到输入框的值,那么可以修改输入框的值  username.value ="hahfjkdhs";
    //对于多选框和单选框的固定的值 boy_radio/boy_radio只能获得固定的值value
   boy_radio.checked;//查看返回的结果,是否为true 如果为true则被选中
   girl_radio.checked = true;//给赋值,使其被选中
</script>
</body>
</html>
2.提交表单

js前端md5加密

正常提交:

<body>
<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>
    <!--在按钮上绑定事件-->
    <!--onclick点击事件,绑定的是一个函数-->
    <button type="submit" onclick="a()">提交</button>
</form>
<script>
    //通过函数来获取value
function a() {
   var username =document.getElementById('username');
   var pwd     =document.getElementById('password');
   console.log(username.value);
   console.log(pwd.value);
   //通过md5给pwd加密,使其抓包抓不住
    pwd.value =md5(pwd)
}
</script>

隐藏域的提交:

<body>
<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="hidden" id="md5-password" name="md5-password">
    <!--在按钮上绑定事件-->
    <!--onclick点击事件,绑定的是一个函数-->
    <button type="submit" onclick="a()">提交</button>
</form>
<script>
    //通过函数来获取value
function a() {
   var username =document.getElementById('username');
   var pwd     =document.getElementById('password');
   var md5pwd =document.getElementById('md5-password');
   console.log(username.value);
   console.log(pwd.value);
   //通过md5给pwd加密,使其抓包抓不住
    md5pwd.value = md5(pwd.value);
}
</script>

10.jQuery

1.使用在线的cdn

https://www.jq22.com/cdn/#a2

2.将jQuery下载下来导入

https://jquery.com/download/

jQuery的公式:

$(选择器).action()

1.初识jQuery
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
</head>
<body>
<a href="" id="text-jquery">点我</a>
<script>
    //选择器就是css的选择器
    $('#text-jquery').click(function () {
        alert('hello,jquery');
    })
</script>
</body>
</html>
2.选择器
    //js选择器
    //标签
    document.getElementsByTagName();
    //id
    document.getElementById();
    //类
    document.getElementsByClassName();

    //jQuery css中的选择器它都可以使用
    //标签选择器
    $('p').click()
    //id选择器
    $('#id1').click()
    //class选择器
    $('.class1').click()

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

3.事件

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

示例:鼠标移动事件,获的鼠标的具体坐标值

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
    <style>
        #divmove{
            width: 500px;
            height: 500px;
            border: 1px solid #02801a;
        }
    </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>

其他的事件通过查询jQuery文档去实现。

4.操作DOM

测试代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>

</head>
<body>
<ul id="text-ul">
    <li id="javascript">JavaScript</li>
    <li name="python">Python</li>
</ul>
<script>
   // $('#text-ul li[id=javascript]').text();
    //$('#text-ul li[id=javascript]').text('c++');

  // $('#text-ul li[id=javascript]').css("color","red")
   // $('#text-ul li[id=javascript]').show();
   //$('#text-ul li[id=javascript]').hide()
</script>
</body>
</html>

1.修改文本

$('#text-ul li[id=javascript]').text();//获得文本
$('#text-ul li[id=javascript]').text('c++');//修改文本

2.设置css样式

$('#text-ul li[id=javascript]').css("color","red")

3.显示和隐藏文本:本质display: none

$('#text-ul li[id=javascript]').show();//显示
$('#text-ul li[id=javascript]').hide();//隐藏
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值