JavaScript

1. 什么是JavaScript

1.1 概述

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

Java,JavaScript

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

1.2 历史

ECMAScript可以理解为JavaSript的一个标准

最新版本已经到了es6版本

但是大部分浏览器还只停留在支持es5 版本

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

2. 快速入门

2.1 引入JavaScript

  1. 内部标签引用
  2. 外部引用

测试代码

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

    <!--外部引入-->
    <script src="js/qj.js"></script>

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

</body>
</html>
alert("hello,world");

2.2 基本语法入门

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--JavaScript 严格区分大小写-->
<script>
    // 1. 定义变量 变量类型 变量名 = 变量值
    var score = 1;
    var name = "qinjiang";
    // alert(num);

    // 2.条件控制
    if (score > 60 && score < 70)
    {
        alert("60~70");
    } else if (score > 70 && score < 80)
    {
        alert("70~80")
    } else
    {
        alert("other");
    }
    //Console console.log(score) 在浏览器控制台打印变量 sout
    //Sources 打断点 刷新页面 调试代码

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

2.3 数据类型

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

变量

var add = "dwada";

number

js不区分小数和整数,Number

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

字符串

‘abc’ “abc”

布尔值

true,false

逻辑运算

&&
||
!

比较运算符

=
==
=== 绝对等于(类型一样 值一样结果为true)

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

须知:

  • NaN===NaN,false
  • isNan(NaN)true

浮点数问题

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

尽量避免使用浮点数进行运算

 console.log(Math.abs((1 / 3) - (1 - 2 / 3)) < 0.00001)
true

null 和undefined

  • null 空
  • undefined 未定义

数组

//保证代码可读性,尽量使用中括号[]  
var arr = [1,2,3,4,5,"hello",null,true];

new Array(1,2,3,4,'dwa');

取数组下标 越界了就 undefined

对象

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

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

 var person =
            {
                name: "qingjiang",
                age: 3,
                tags: [1, 23, 4,'1221']
            }

取对象的值

person.name

2.4 严格检查模式

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!--  前提:IDEA需要支持ES6语法   -->
    <!--  'use strict' 严格检查模式 预防JavaScript 随意性导致的一些问题  -->
    <!--  必须卸载JavaScript第一行  -->
    <!--  局部变量 建议都使用let定义  -->
    <script>
        'use strict'

        let i = 1;


    </script>
</head>
<body>

</body>
</html>	

3. 数据类型

3.1 字符串

  1. 正常字符串使用’ ’ 或者" "包裹
  2. 注意转义字符
\'
\n
\t
\u4e2d \u####  Unicode字符
Ascll字符

  1. 多行字符串编写
        //tab 上面 Esc下面
        var msg = `
        hello
        world
        你好呀
        `
        console.log(msg);
  1. 模板字符串(ES6新特性)
        let name = "myp";
        let age = 3;

        let msg = `你好呀,${name}`
        console.log(msg);
  1. 字符串长度
str.length
  1. 字符串的可变性,不可变

  2. 大小写转换

//注意,这里是方法,不是属性
console.log(student.toUpperCase())STUDENT
  1. student.indexOf(‘t’);

  2. student.substring(1);

3.2 数组

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

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

注意:假如给array.length赋值,数组的大小就会变化 变大为空 变小元素丢失

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

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

  1. slice() 截取Array的一部分,返回一个新的数组 类似于String 中的subString
arr.slice(3)
(7) [4, empty × 6]
  1. push() , pop()
//push压入到尾部
//pop弹出尾部的一个元素
arr.push('a','b')
12
arr
(12) [1, 2, 3, 4, empty × 6, "a", "b"]

arr.pop()
"b"
arr
(11) [1, 2, 3, 4, empty × 6, "a"]
  1. unshift(), shitf()
//unshift 头部插入
//shift 头部弹出
arr.unshift('a','b')
13
arr
(13) ["a", "b", 1, 2, 3, 4, empty × 6, "a"]

arr.shift()
"a"
arr
(12) ["b", 1, 2, 3, 4, empty × 6, "a"]
  1. 排序 sort
arr=['b','c']
(2) ["b", "c"]
arr.push('a')
3
arr
(3) ["b", "c", "a"]0: "a"1: "b"2: "c"length: 3__proto__: Array(0)
arr.sort()
(3) ["a", "b", "c"]0: "a"1: "b"2: "c"length: 3__proto__: Array(0)
  1. 元素反转
arr.reverse()
(3) ["c", "b", "a"]
  1. concat()
arr.concat([1,2,3])
(6) ["c", "b", "a", 1, 2, 3]
arr
(3) ["c", "b", "a"]

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

  1. 连接符 join 打印拼接数组,使用特定的字符串连接
var arr=["c","b","a"]
undefined
arr.join('-')
"c-b-a"
  1. 多维数组
arr = [[1,2],[3,4],["5","6"]]
(3) [Array(2), Array(2), Array(2)]0: (2) [1, 2]1: (2) [3, 4]2: (2) ["5", "6"]length: 3__proto__: Array(0)
arr[1][1]
4

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

3.3 对象

若干个键值对

var 对象名={
     属性名;属性值,
     属性名;属性值,
     属性名;属性值,
     属性名;属性值
}
//定义了一个person属性,有四个属性
var person = {
            name:"yoona",
            age:3,
            email:"1040843800@qq.com",
            score:0
        }

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

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

  1. 对象赋值
person.name = "myp"
"myp"
person.name
"myp"
  1. 使用一个不存在的对象属性,不会报错!
person.haha
undefined
  1. 动态删减属性 delete删除对象属性
person
{name: "myp", age: 3, email: "1040843800@qq.com", score: 0}
delete person.name
true
person
{age: 3, email: "1040843800@qq.com", score: 0}
  1. 动态添加 直接给新的属性
person.haha="haha"
"haha"
person
{age: 3, email: "1040843800@qq.com", score: 0, haha: "haha"}
  1. 判断属性值是否在这个对象中 xx in xx!
'age' in person
true
//继承
'toString' in person
true
  1. 判断一个属性是否是这个对象自身拥有的 hasOwnproperty

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

3.4 流程控制

if判断

        var age = 3;
        if (age > 3)
        {
            alert("haha");
        }
        else
        {
            alert("kuwa");
        }

循环 避免死循环

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



for循环

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

forEach 循环

        var age = [12, 214, 24, 32, 3, 4, 5];
        age.forEach(function (value)
        {
            console.log(value)
        })

for …in 打印下标

        //for(var index in object
        for (var num in age)
        {
            if (age.hasOwnProperty(num))
            {
                console.log("存在");
                console.log(age[num]);
            }
        }

for of 打印具体的值

        'use strict'
        var arr = [3, 4, 5];
        for (var x of arr)
        {
            console.log(x);
        }

3.5 Map 和 Set

map

        //定义 就是一个一个的key-value对
        let map=new Map([['a',100],['b',90],['c',80]]);
        let a=map.get('a');//取得key为‘a’的值
        map.set('a',99);//改变key对应的value值,若key不存在,将会新建一个键值对
        map.delete('a');//删除key对应的键值

set

        let s=new Set([9,9,6,4,52,1]);//定义,Set会自动去重
        s.add(2);//添加值,若set里有,则不会改变
        s.has(9);//返回true或者false 判断是否含有元素
        s.delete(2);//删除

set:无序的不重复集合

3.6 iterator

ES6新特性

遍历数组

        var arr = [3, 4, 5];
        for (var x of arr)
        {
            console.log(x);
        }

遍历map

        var map = new Map([["tom", 100], ["jack", 90], ["haha", 80]]);
        for (let x of map)
        {
            console.log(x);
        }

遍历set

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

4. 函数

4.1 定义函数

绝对值函数

箭头+ 空格

定义方式一

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

一旦return 方法结束

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

定义方式二

var abs = function(x){
     if(x >= 0 ){
        return x;
    }else{
        renturn -x;
    }
}
//匿名函数

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

调用函数

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

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

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

arguments

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

代表传递进来的所有数据为一个数组

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

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

rest

以前

        function aaa(a, b)
        {
            console.log("a=>" + a);
            console.log("b=>" + b);
            if (arguments.length > 2)
            {
                for (var i = 2; i < arguments.length; i++)
                {

                }
            }
        }

ES6 新特性,获取除了已经定义的参数之外的所有参数

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

        /*
        * aaa(1,23,543,63,654,645,556)

        * a=>1

        * b=>23

        * (5) [543, 63, 654, 645, 556]
          undefined*/

rest 必须写在最后,用…标识

4. 2 变量作用域

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

假设在函数体内定义,在函数体外不可调用(除非闭包)

        'use strict'
        function qj()
        {
            var x = 1;
            x = x + 1;

        }
        x = x + 2;
        //Uncaught ReferenceError: x is not defined

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

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

        'use strict'

        function qj()
        {
            var x = 1;

            function qj2()
            {
                var x = 'a';
                console.log('inner' + x)
            }

            qj2();
            console.log('outer' + x);
        }

        qj();
        //innera
        //outer1

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

提升变量的作用域

结果:xundefined

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

        'use strict'
        function qj()
        {
            var x = 'x' + y;
            console.log(x);
            var y = 'y';
        }
        qj();

所有变量定义放在开头,便于代码维护

全局函数

        x = 1;
        function f()
        {
            console.log(x);
        }

        f();
        console.log(x);

全局对象 window

       var x = "xx";
       alert(x);
       alert(window.x);//默认所有的全局变量,都会自动帮i挡在window对象下

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

        var x = "xx";
        window.alert(x);
        var old_alert = window.alert;
        //old_alert(x);

        window.alert = function ()
        {

        }
        //发现alert() 失效了
        window.alert(123);

        //恢复
        window.alert = old_alert;
        window.alert(456);

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

规范

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

        //唯一全局变量
        var KuangApp = {};

        //定义全局变量
        KuangApp.name = 'kuangshen';
        KuangApp.add = function (a, b)
        {
            return a + b;
        }

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

jQuery

局部作用域 let

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

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

        function aaa()
        {
            for (let i = 0; i < 100; i++)
            {
                console.log(i);
            }
            console.log(i + 1);//Uncaught SyntaxError: Invalid or unexpected token
        }

常量 const

        const PI = '3.14';//只读常量
        console.log(PI);
        PI = '123';//报错

4.3 方法

定义方法

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

    var kuangshen = {
        name: "秦疆",
        birth: 2020,
        //方法
        age: function ()
        {
            let now = new Date().getFullYear();
            return now - this.birth;
        }
    }
//属性
kuangshen.name
//方法,一定要带括号
kuangshen.age()

    function getAge ()
    {
        let now = new Date().getFullYear();
        return now - this.birth;
    }
    var kuangshen = {
        name: "秦疆",
        birth: 2020,
        //方法
        age:getAge()
    }
    //kuangshen.age() ok
    //getAge NaN window

apply

在js中可以控制this指向

    function getAge ()
    {
        let now = new Date().getFullYear();
        return now - this.birth;
    }
    var kuangshen = {
        name: "秦疆",
        birth: 2020,
        //方法
        age:getAge()
    };
    // kuangshen.age() ok

    getAge.apply(kuangshen,[])//this ,指向了狂神这个对象,参数为空

5. 内部对象

标准对象

typeof 123
"number"
typeof "123"
"string"
typeof true
"boolean"
typeof NaN
"number"
typeof []
"object"
typeof {}
"object"

5.1 Date

基本使用

    var now = new Date();//Wed May 26 2021 20:34:24 GMT+0800 (中国标准时间)
    now.getFullYear();//年
    now.getMonth();//月 0~11
    now.getDate();//日
    now.getDay();//星期几
    now.getHours();//时
    now.getMinutes();//分
    now.getSeconds();//秒

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

    //时间戳 转为日期
    console.log(new Date(124124125151));//Fri Dec 07 1973 22:55:25 GMT+0800 (中国标准时间)
    now.toDateString()
    //"Wed May 26 2021"
    now.toLocaleString()
    //"2021/5/26下午8:34:24"

5.2 JSON

JSON是什么

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

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

任何js支持的类型都可以用JSON表示:number,String

格式:

  • 对象都用{}
  • 数组都用[]
  • 键值对都是 key:value
    var user = {
        name: "qingjiang",
        age: 3,
        sex: "男"
    }
    //对象转化为json字符串 {"name":"qingjiang","age":3,"sex":"男"}
    var jsonUser = JSON.stringify(user);

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

JSON 和 js 区别

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

6. 面向对象编程

6.1 什么是面向对象

原型对象

    var xiaoming = {
        name: "xiaoming"
    };
    var Bird = {
        fly: function ()
        {
            console.log(this.name + "  fly....");
        }
    }
    //原型对象
    xiaoming.__proto__ = Bird;

class 继承

过去

    function Student(name)
    {
        this.name = name;
    }

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

ES6之后

  1. 定义一个类,属性,方法
    //ES6 之后======
    //定义一个学生的类
    class Student
    {
        constructor(name)
        {
            this.name = name;
        }

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

        hello()
        {
            alert('hello');
        }
    }

    class XiaoStudent extends Student
    {
        constructor(name, grade)
        {
            super(name);
            this.grade = grade;
        }

        myGrade()
        {
            alert('我是一名小学生');
        }
    }

    var xiaoming = new Student("xiaoming");

本质:查看对象原型

原型链

7. 操作BOM对象(重点)

浏览器介绍

JavaScript 诞生就是为了让他在浏览器中运行

BOM:浏览器对象模型

  • IE 6~12
  • Chrome
  • Safari
  • FireFox

window

window 代表浏览器窗口

window.innerHeight
150
window.innerHeight
301
window.outerWidth
764

Navigator(不建议使用)

Navigator ,封装了浏览器信息

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

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

screen

screen.width
1500
screen.height
1000

location(重要)

location代表当前页面的url信息

location
Location {ancestorOrigins: DOMStringList, href: "https://www.baidu.com/", origin: "https://www.baidu.com", protocol: "https:", host: "www.baidu.com",}
ancestorOrigins: DOMStringList {length: 0}
assign: ƒ assign()
hash: ""
host: "www.baidu.com"//
hostname: "www.baidu.com"
href: "https://www.baidu.com/"//
origin: "https://www.baidu.com"
pathname: "/"
port: ""
protocol: "https:"//
reload: ƒ reload()//刷新网页
replace: ƒ replace()
search: ""
toString: ƒ toString()
valueOf: ƒ valueOf()
Symbol(Symbol.toPrimitive): undefined
__proto__: Location

document

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

document.title
"Title"
document.title = 'yoona'
"yoona"

获取具体的文档树结点

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

cookie

document.cookie
"PSTM=1621752469; BD_UPN=12314753; BIDUPSID=47155F2B2C90761A8A2C6A6C10BEDB8C; BAIDUID=9A5A518D5AC2A37C9D45FCB6302BA020:FG=1; BAIDU_WISE_UID=wapp_1621777076841_292; BAIDUID_BFESS=662A16D6289E6147E53310C5EA3BDE30:FG=1; MBD_AT=0; __yjs_st=2_ZTAzMGQwZGYzZTdhNGM3NGI2NTcxMWVhYWQzMDk4YjI0YzVjY2VhNWIyOTI0MDBlNTM2OWU4ZjU4MjhjZjlhZTA5MmMwYWIxMWM3Y2Q5YTBiNDYzYmZjMjcyOGQyZWI0NjRmMjJlMjRhMzI2ODUyNWIyNmY1YjdmYmZmNDcwYmI1ODIyZGFlMTgzM2IzZDdhNmI2MTYxOGQ5NGMzN2M4YTFlYWUxMDIxYzhkZWZkMDUxZDk0NTViZmRhZGFkNGZhNDc5MDZkM2QyODY5NTU5MzU4NWRmNWI3ODE0NmY5MTU4MzAzODkzMDEwNjZkMTFjNjNkYzdlYmQ0OTVhZGQxZl83X2Q1ZTc1ZjZj; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; Hm_lvt_aec699bb6442ba076c8981c6dc490771=1620829912,1621292156,1621347609,1622092397; COOKIE_SESSION=69181_3_8_4_4_12_0_0_8_5_0_3_69201_250015_31_0_1622092398_1622023188_1622092367%7C9%23250015_102_1622023186%7C9; BD_HOME=1; H_PS_PSSID=33985_31253_34004_33855_33607_26350_34022; BA_HECTOR=240l0g8h8h2g00ag7n1gaulcu0q"

劫持cookie 原理

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

服务器端可以设置cookie:httpOnly

history(不建议使用)

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

8. 操作DOM对象(重点)

DOM:文档对象模型

核心

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

  • 更新:更新DOM结点
  • 遍历:得到DOM结点
  • 删除:删除一个DOM结点
  • 添加:添加一个新的结点
  • 要操作一个DOM结点,就必须先获得这个DOM结点
<div id="father">
    <h1>标题一</h1>
    <p id="p1">p1 </p>
    <p class="p2">p2</p>
</div>
<script>
    //对应css选择器
    let h1 = document.getElementsByTagName('h1');
    let p1 = document.getElementById('p1');
    let p2 = document.getElementsByClassName('p2');
    let father = document.getElementById('father');

    let children = father.children;//获取父节点下的所有子节点
    //father.firstChild
    //father.lastChild
</script>

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

更新结点

操作文本

  • id1.innerText = ‘34567’ 修改文本的值
  • id1.innerHTML = ‘123

操作js

id1.style.color = 'red'; //属性使用 字符串 包裹
"red"
id1.style.fontSize = '20px';//驼峰命名问题
"20px"
document.getElementById('su')
<input type="submit" id="su" value="百度一下" class="bg s_btn">var ss = document.getElementById('su')
undefined
ss.style.padding = '20px'
"20px"

删除节点

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

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

    let self = document.getElementById('p1');
    var father =  p1.parentElement;
    father.removeChild(self);

    //删除是一个动态过程
    father.removeChild(father.children[0]);
    father.removeChild(father.children[0]);
    father.removeChild(father.children[0]);
   
</script>

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

插入结点

我们获得了某个DOM结点,假设这个DOM结点是空的,我们通过innerHTML就可以增加一个元素

如果存在则覆盖

追加

<p id="js">JavaScript</p>
<div id="list">
    <p id="se">JavaSE</p>
    <p id="ee">JavaEE</p>
    <p id="me">JavaME</p>
</div>
<script>
    let js = document.getElementById('js');
    let list = document.getElementById('list');
    list.appendChild(js);//追加到后面
</script>

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

<script>
    let js = document.getElementById('js');//已存在的节点
    let list = document.getElementById('list');
    //通过JS 创建一个新的结点
    let newp = document.createElement('p');
    newp.id = 'newp';
    newp.innerText = 'Hello,myp';
    list.appendChild(newp);
    
    //创建一个标签结点(通过这个属性可以设置任意的之值)
    var myScript = document.createElement('script');
    myScript.setAttribute('type', 'text/javascript');
    list.appendChild(myScript);

    //可以创建一个style 标签
    var myStyle = document.createElement('style');//创建了一个空style标签
    myStyle.setAttribute('type', 'text/css');//
    myStyle.innerHTML = 'body{background-color: blue}';//设置标签内容

    document.getElementsByTagName('head')[0].appendChild(myStyle);
</script>

插入前面

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

9. 操作表单(验证)

表单 是什么 form DOM

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

获得要提交的信息

<form action="post">
    <p>
        <span>用户名</span>
        <input type="text" id="username">
    </p>

    <!--多选框的值,就是定义好的value值-->
    <p>
        <span>性别</span>
        <input type="radio" name="sex" value="boy" id="boy"><input type="radio" name="sex" value="girl" id="girl"></p>
</form>
<script>
    let input_text = document.getElementById(`username`);
    let boy_radio = document.getElementById(`boy`);
    let girl_radio = document.getElementById(`girl`);
    //得到输入框的值
    //input_text.value
    //修改输入框的值
    //input_text.value = "123"

    //boy_radio.checked
    //false
    //boy_radio.checked = true
    //true
</script>

提交表单 md5 加密密码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!--MD5工具类-->
    <script src="https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.min.js"></script>
</head>
<body>
<!--表单绑定提交事件-->
<!--onsubmit 绑定一个提交检测的函数 将这个函数返回表单-->
<form action="#" method="post" onsubmit=" return aaa()">
    <p>
        <span>用户名:</span>
        <input type="text" id="username" name="username">
    </p>
    <p>
        <span>密码:</span>
        <input type="password" id="input-password">
    </p>
    <input type="hidden" id="md5-password" name="password">
    <!--绑定事件 onclick 被点击-->
    <button type="submit">提交</button>
</form>
<script>
    function aaa()
    {
        let uname = document.getElementById('username');
        let pwd = document.getElementById('input-password');
        let md5pwd = document.getElementById('md5-password');

        md5pwd.value = md5(pwd.value);
        //可以校验判断表单内容 true 通过 false 阻止提交
        return false;
    }
</script>
</body>
</html>

10. jQuery

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

获取jQuery

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js"></script>
    <script src=" lib/jquery-3.6.0.js"></script>
</head>
<body>

<!--
公式 :$(selector).action()
-->
<a href="" id="test-jquery">点我</a>
<script>

    //选择器就是css选择器
    $('#test-jquery').click(function ()
    {
        alert('hello,jquery');
    })
</script>
</body>
</html>

选择器

  //标签
  document.getElementsByTagName();
  //id
  document.getElementById();
  //类
  document.getElementsByClassName();

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

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

事件

鼠标事件,键盘事件,

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src=" lib/jquery-3.6.0.js"></script>
    <style>
        #divMove {
            width: 500px;
            height: 500px;
            border: 1px solid red;
        }
    </style>
</head>
<body>
<!--要求:获取鼠标当前的一个坐标-->
mouse: <span id="mouseMove"></span>
<div id="divMove">
    在这里移动鼠标试试
</div>
<script>
    //当网页元素加载完毕之后,响应事件
    // $(document).ready(function ()
    // {
    // })
    //简写
    $(function ()
    {
        $('#divMove').mousemove(function (e)
            {
                $('#mouseMove').text('x:' + e.pageX + 'y:' + e.pageY);
            }
        )
    })
</script>
</body>
</html>

操作DOM


<!DOCTYPE html>
<html lang = "en">
<head>
    <meta charset = "UTF-8">
    <title>Title</title>
    <script src=" lib/jquery-3.6.0.js"></script>
</head>
<body>
<ul id = "test-ul">

    <li class = "js">JavaScript</li>
    <li name = "python">Python</li>

</ul>
<script>
    //document.getElementById('')

    $('#test-ul li[name = python]').text()
    $('#test-ul').html()
</script>
</body>
</html>

节点文本操作

  $('#test-ul li[name = python]').text()//获得值
  //"Python"
  $('#test-ul li[name = python]').text('设置值')//设置值

  $('#test-ul').html()
  // "\n\n    <li class=\"js\">JavaScript</li>\n    <li name=\"python\">Python</li>\n  \n"
  $('#test-ul').html('<strong>123</strong>');//设置值

css操作

ctrl + F 搜索网页中含css的对象

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

元素的显示和隐藏

   $('#test-ul li[name = python]').show()
   $('#test-ul li[name = python]').hide()
   $('#test-ul li[name = python]').toggle()//轮换

本质:display:none

娱乐测试

$(window).width()
751
$(document).width()

未来ajax

$('from').ajax()
$.ajax({ url: "test.html", context: document.body, success: function(){
    $(this).addClass("done");
}});

ouseMove">

在这里移动鼠标试试
```

操作DOM


<!DOCTYPE html>
<html lang = "en">
<head>
    <meta charset = "UTF-8">
    <title>Title</title>
    <script src=" lib/jquery-3.6.0.js"></script>
</head>
<body>
<ul id = "test-ul">

    <li class = "js">JavaScript</li>
    <li name = "python">Python</li>

</ul>
<script>
    //document.getElementById('')

    $('#test-ul li[name = python]').text()
    $('#test-ul').html()
</script>
</body>
</html>

节点文本操作

  $('#test-ul li[name = python]').text()//获得值
  //"Python"
  $('#test-ul li[name = python]').text('设置值')//设置值

  $('#test-ul').html()
  // "\n\n    <li class=\"js\">JavaScript</li>\n    <li name=\"python\">Python</li>\n  \n"
  $('#test-ul').html('<strong>123</strong>');//设置值

css操作

ctrl + F 搜索网页中含css的对象

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

元素的显示和隐藏

   $('#test-ul li[name = python]').show()
   $('#test-ul li[name = python]').hide()
   $('#test-ul li[name = python]').toggle()//轮换

本质:display:none

娱乐测试

$(window).width()
751
$(document).width()

未来ajax

$('from').ajax()
$.ajax({ url: "test.html", context: document.body, success: function(){
    $(this).addClass("done");
}});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追寻远方的人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值