JavaScript

JavaScript

一、什么是JavaScript

1.1 概述

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

1.2 历史

​ 略

二、快速入门

2.1 引入JavaScript

  1. 内部标签

    <script>
        alert("hello world!");
    </script>
  2. 外部引用

    test.js

    alert("hello world");

    test.html

    <script src="test.js"></script>

    测试代码:html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    
    <!--  script标签,写JavaScript代码  -->
    <!--    <script>-->
    <!--        alert("hello world!");-->
    <!--    </script>-->
    
    <!--  外部引用  -->
    <!--  注意:script标签必须成对出现  -->
        <script src="js/js01.js"></script>
    
    <!--  不用显示定义type,也默认就是text/javascript  -->
        <script type="text/javascript"></script>
    
    </head>
    <body>
    
    <!--这里也可以存放JavaScript代码-->
    </body>
    </html>

2.2 基本语法入门

<!--  JavaScript严格区分大小写  -->
<script>
    // 1、定义变量 :变量类型 变量名 = 变量值;
    var num = 1;
var name = "zhangsan";

// 2、条件控制
var score = 66;
if (score >= 60) {
    if (score == 100) {
        alert("满分");
    } else if (score < 100 && score > 90) {
        alert("优秀")
    } else {
        alert("及格")
    }
}
// console.log(变量名) 在浏览器的控制台打印变量!

</script>

2.3 数据类型

变量

​ var 变量名 = 变量值;

var name = "zhangsan";
var age = 2;
  1. number
  • JavaScript不区分小数,统一使用Number
123 // 整数123
123.4 // 浮点数123.4
1.23e3 // 科学计数法
-99 // 负数
NaN // not a number 不是一个数字
Infinity // 表示无限大
  1. 字符串
'abc'
"abc"
  1. 布尔值
true
false
  1. 逻辑运算
&& 两个都为真,结果为真
|| 一个为真,则结果为真
! 取反
  1. 比较运算符
= 赋值
== 等于(类型不一样,值一样,也会判断为true=== 绝对等于(类型一样,值一样,结果为true

这是js的缺陷,坚持不要使用 == 比较。

须知:

  • NaN 与所有的数值都不相等,包括自己。

    NaN === NaN // false
  • 智能通过 isNaN(NaN) 来判断这个数是否是 NaN

浮点数问题:

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

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

console.log(Math.abs(1/3 - (1-2/3)) < 0.000000001); // true
  1. null 和 undefined
  • null 空
  • undefined 未定义
  1. 数组

    Java的数组必须是一系列相同类型的对象,JavaScript中不需要这样。

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

    取数组下标:如果越界,就会undefined

  2. 对象

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

    • 每个属性之间使用逗号隔开,最后一个属性不需要
var person = {
    name: "zhangsan",
    age: 2,
    tags: ['js', 'java', 'web', '……']
}

取值

person.name
>"zhangsan"
person.age
>2

2.4 严格检查模式

  • ‘use strict’; 严格检查模式,预防JavaScript随意性导致的一些问题

    • 前提:idea 需要支持 ES6 语法

      在这里插入图片描述

    • 必须写在JavaScript的第一行

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

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

<!--
    前提:idea 需要支持 ES6 语法
    'use strict'; 严格检查模式,预防JavaScript随意性导致的一些问题
   必须写在JavaScript的第一行
   局部变量建议都使用 let 去定义
   -->
    <script>
        'use strict';
        // 全局变量
        // i = 1;
        // ES6中,使用let,局部变量
        let i = 1;
    </script>

</head>
<body>

</body>
</html>

三、数据类型

3.1 字符串

  1. 正常的字符串使用单引号或者双引号包裹

  2. 注意转义字符 \

    \' 
    \n
    \t
    \u4e2d  \u#### Unicode字符
    "\x41" ASCII字符
  3. 多行字符串编写

    // Tab 键上面,Esc下面那个键
    var msg = `
    hello
    world
    你好
    `
  4. 模板字符串

    let name = "zhangsan";
    let age = 3;
    
    let msg = `${age}岁的${name},你好!`
  5. 字符串长度

    consloe.log(str.length) 字符串长度
    
  6. 字符串的可变性,不可变

  7. 大小写转换

    // 注意:这里是方法,不是属性
    consloe.log(str.toUpperCase()) 大写
    consloe.log(str.toLowerCase()) 小写
  8. 获取指定元素的下标

    str.indexOf('t');
  9. 截取元素 substring

    str.substring(1); // 从第一个字符串截取到最后一个字符串
    str.substring(1, 3); // 包含前面不包含后面[1, 3)

3.2 数组

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

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

    arr.length

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

  2. indexOf 通过元素获得下标索引

    arr.indexOf(2);
    1

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

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

  4. push,pop 尾部

    arr.push('a', 'b'); // 压入元素到尾部
    arr.pop(); // 弹出尾部的一个元素
  5. unshift(),shift() 头部

    arr.unshift('a', 'b'); // 压入元素到头部
    arr.shift(); // 弹出头部的一个元素
  6. 排序 sort()

    arr.sort()
    [object Array]: [1, 2, 3, 4, 5, "a", "b"]
  7. 元素反转 reverse()

    arr.reverse()
    [object Array]: ["b", "a", 5, 4, 3, 2, 1]
  8. 拼接 concat()

    arr.concat('h', 'o');
    [object Array]: ["b", "a", 5, 4, 3, 2, 1, "h", 'o']
    arr
    [object Array]: ["b", "a", 5, 4, 3, 2, 1]

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

  9. 连接符 join()

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

    arr.join('-');
    "b-a-5-4-3-2-1"
  10. 多维数组

    arr = [[1, 2], [3, 4], ['a', 'b']];
    arr[1][1]
    4

3.3 对象

若干个键值对

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

var person = {
    name: "zhangsan",
    age: 13,
    score: 100,
    email: 'zhangsan@sina.com'
}

JavaScript 中的对象,用 {} 括起来,键值对描述属性,多个属性之间使用逗号隔开,最后一个属性不加逗号。

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

  1. 对象赋值

    person.name = 'lisi';
    "lisi"
    person.name
    "lisi"
  2. 使用一个不存在的对象属性,不会报错!

    person.sex
    undefined
  3. 动态的删减属性 delete

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

    person.name = 'wangwu';
    "wangwu"
  5. 判断属性值是否在这个对象中 xxx in xxx

'age' in person
true
// 继承
'toString' in person
true
  1. 判断一个属性是否是这个对象自身拥有的 hasOwnProperty()

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

3.4 流程控制

  1. if 判断
let age = 3;
if (age > 3) {
    alert('haha')
} else if(age > 2) {
    alert('wawa')
}else {
    alert('~~~')
}
  1. while循环,尽量避免程序死循环

    let age = 3;
    while (age < 100) {
        age += age;
        console.log(age);
    } 
    
    do {
        age += age;
        console.log(age);
    } while(age < 100);
  2. for循环

    let age = 3;
    for (let i = 0; i < 10; i++) {
        age += age;
        console.log(age);
    }

    forEach循环

    var arr = [1, 2, 3, 4, 5];
    // 函数
    arr.forEach(function (value) {
        console.log(value);
    })
    
  3. for … in

    // for (var index in object) {}
    var arr = [1, 2, 3, 4, 5];
    for (var num in arr) {
        console.log(num);
    }

3.5 Map 和 Set

ES6 的新特性

  1. Map

    var map = new Map([['zhangsan', 90], ['lisi', 70], ['wangwu', 100]]);
    var name = map.get('zhangsan');// 通过 key 获得 value
    map.set('admin', 150);// 添加或修改一对key-value
    map.delete('lisi'); // 删除一个元素
    console.log(name);
  2. Set:无序不重复集合

    // Set可以去重
    var set = new Set([1, 2, 3, 3, 3, 3]);
    set.add(4);// 添加
    set.delete(3);// 删除
    console.log(set.has(2));// 判断是否有某个元素
    

3.5 iteration

遍历数组

var arr = [1, 2, 3, 4];
// 通过 for of 实现打印值 / for in 打印下标
for (var num of arr) {
    console.log(num);
}

遍历Map

var map = new Map([['a', 1], ['b', 2], ['c', 3]]);
for (var m of map) {
    console.log(m);
}

遍历Set

var set = new Set([1, 2, 3, 4, 5]);
for (var s of set) {
    console.log(s);
}

四、函数及面向对象

4.1 定义一个函数

定义方式一

绝对值函数

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

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

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

定义方式二

var abs = function(x) {
    if(x >= 0) {
        return x;
    }else {
        return -x;
    }
}

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

调用函数

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

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

参数进来是否存在的问题?

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

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

arguments

arguments是一个JavaScript免费赠送的关键字,代表传递进来的所有的参数,是一个数组!

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:ES6 引入的新特性,获取除了已经定义的参数之外的多有参数

function add(a, b, ...rest) {
    // 以前
    // if (arguments.length > 2) {
    //     for (var i = 2; i < arguments.length; i ++) {
    //         // 具体操作
    //     }
    // } 
    console.log('a = ' + a);
    console.log('b = ' + b);
    console.log(rest);
}

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

4.2 变量的作用域

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

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

function f() {
    var i = 1;
    i += 1;
}

i = i + 1;// ReferenceError: i is not defined

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

function f1() {
    var i = 1;
    i += 1;
}

function f2() {
    var i = 1;
    i += 1;
}

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

假设内部函数变量和外部函数的变量重名,函数查找变量从自身函数开始,由内向外查找,内部函数会屏蔽外部函数的变量。

提升变量的作用域

function f() {
    var x = 'x' + y;
    console.log(x);// 输出结果:undefined
    var y = 'y';
}

结论:JavaScript 执行引擎,自动提升了 y 的声明,但不会提升变量 y 的赋值。

规范:所有的变量定义都放在函数的头部,不要乱放,便于代码的维护。

全局函数

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

全局对象 window

// 默认所有的全局变量,都会自动绑定在 window 对象下
var i = 'hello';
alert(window.i);
window.alert(i);// alert() 这个函数本身也是一个window变量

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

规范:

​ 由于所有的全局变量都会绑定到 window 上,如果不同的 JavaScript 文件使用了相同的全局变量,就会发生全局命名冲突。

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

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

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

局部作用域 let

function f() {
    for (var i = 0; i < 10; i++) {
        console.log(i);
    }
    console.log(i);// 11 问题:i 出了这个作用域还可以使用
}

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

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

建议都是用 let 去定义局部作用域的变量。

常量 const

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

var PI = '3.14';

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

在 ES6 引入了常量关键字 const

const PI = '3.14';// 只读变量
console.log(PI);
// PI = '4.13'; 报错TypeError: invalid assignment to const `PI'

4.3 方法

定义方法

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

var person = {
    name: 'zhangsan',
    birth: 2000,
    age: function () {
        var nowYear = new Date().getFullYear();
        return nowYear - this.birth;
    }
}

调用:
person.name // 属性
person.age() // 方法,一定要带括号

this. 代表什么?

始终指向调用它的对象

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

var person = {
    name: 'zhangsan',
    birth: 2000,
    age: getAge
}

// person.age() 调用成功
// getAge() NaN this指向window

apply

​ 在 JavaScript 中可以控制 this 指定的对象

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

    var person = {
        name: 'zhangsan',
        birth: 2000,
        age: getAge
    };

    // person.age() 调用成功
    // getAge() NaN
    getAge.apply(person, []); // this 指向了 person,参数为空

五、内部对象

标准对象

typeof 123
"number"
typeof 'abc'
"string"
typeof true
"boolean"
typeof NaN
"number"
typeof [1, 2]
"object"
typeof {}
"object"
typeof Math.abs
"function"
typeof undefined
"undefined"

5.1 Date

基本使用

var now = new Date();// Date Fri Mar 20 2020 18:50:14 GMT+0800 (中国标准时间)
now.getFullYear(); // 年
now.getMonth(); // 月 0-11 代表月
now.getDate();// 日
now.getDay();// 星期几
now.getHours();// 时
now.getMinutes();// 分
now.getSeconds();// 秒

now.getTime();// 1584701414219 时间戳 全世界同一 1970-01-01 00:00:00
// 时间戳转时间
console.log(new Date(1584701414219));// Date Fri Mar 20 2020 18:50:14 GMT+0800 (中国标准时间)

转换

now.toLocaleString()
"2020/3/20 下午6:50:14"
now.toGMTString()
"Fri, 20 Mar 2020 10:50:14 GMT"

5.2 JSON

JSON是什么?

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

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

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

格式:

  • 对象都用{}
  • 数组都用[]
  • 所有的键值对都使用 key:value
var person = {
    name: 'zhangsan',
    age: 20,
    sex: '男'
}
// 对象转换为字符串
var jsonPerson = JSON.stringify(person);// "{\"name\":\"zhangsan\",\"age\":20,\"sex\":\"男\"}"

// json 字符串转换为对象,参数为 json 字符串
var  obj = JSON.parse("{\"name\":\"zhangsan\",\"age\":20,\"sex\":\"男\"}");

JSON 和 JavaScript 的区别

// js对象
var obj = {a:'a', b:'b'};
// JSON对象 是一个字符串 key:value
var json = '{\'a\':\'a\', \'b\':\'b\'}';

六、面对对象编程

什么是面向对象

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

原型:

var Student = {
    name: "zhangsan",
    age: 20,
    run : function () {
        console.log(this.name + "会跑")
    }
};

var lisi = {
    name: "lisi"
};

// 原型对象
lisi.__proto__ = Student;

var Bird = {
    name: 'bird',
    fly: function () {
        console.log(this.name + "会飞!!!")
    }
};

// 原型对象
lisi.__proto__ = Bird;
function Studrnt(name) {
    this.name = name;
}

// 给 Studrnt 添加一个方法
Studrnt.prototype.run = function () {
    console.log("run……")
};

class 继承

class 关键字,是在ES6 引入的

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

    // ES6 之后
    class Student {
        constructor(name) {
            this.name = name;
        }
    
        run() {
            console.log("run……");
        }
    }
    
    var zhangsan = new Studrnt("zhangsan");
    var lisi = new Studrnt("lisi");
    
    // 调用
    lisi.run();
  2. 继承

    class Person {
        constructor(name) {
            this.name = name;
        }
    
        run() {
            console.log("run……");
        }
    }
    
    class Student extends Person {
        constructor(name, age) {
            super(name);
            this.age = age;
        }
    
        myAge() {
            console.log("我的年龄是:" + this.age);
        }
    }
    
    var zhangsan = new Person("zhangsan");
    var lisi = new Student("lisi", 20);

本质:查看对象原型

原型链

__proto__

七、操作BOM对象

浏览器介绍

JavaScript 和 浏览器 的关系?

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

BOM:浏览器对象模型

  • IE 6~11
  • Chrome
  • Safari
  • FireFox Linux

三方:

  • QQ浏览器
  • 360浏览器

window

window 代表 浏览器窗口

window.alert(1)
undefined
window.innerHeight
263
window.innerWidth
736
window.outerHeight
616
window.outerWidth

Navigator

Navigator 封装了浏览器的信息

navigator.appName
"Netscape"
navigator.appVersion
"5.0 (Windows)"
navigator.appCodeName
"Mozilla"
navigator.userAgent
"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Firefox/68.0"
navigator.platform
"Win32"

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

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

screen 代表屏幕的尺寸

screen.width
1280
screen.height
720

location

location 代表当前页面的 URL 信息

host: "www.baidu.com"
href: "https://www.baidu.com/index.php?tn=monline_3_dg"
protocol: "https:"
reload: function reload() // 刷新网页
// 设置新的地址
location.assign('https://www.taobao.com/')

document

document 代表当前页面

document.title
"百度一下,你就知道"
document.title = '标题'
"标题"

获取具体的文档树节点

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

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

获取cookie

document.cookie
"BAIDUID=057868A6F7284E0D80EBAAE24B7DD30B:FG=1; BIDUPSID=057868A6F7284E0D19A6E80CDE02EA9E; PSTM=1581751739; BDORZ=FFFB88E999055A3F8A630C64834BD6D0; COOKIE_SESSION=458927_1_3_3_5_2_0_0_2_1_1_0_1543849_0_0_0_1583305048_1583571829_1584702336%7C9%230_1_1583571808%7C1; BDRCVFR[Fc9oatPmwxn]=aeXf-1x8UdYcs; delPer=0; BD_CK_SAM=1; PSINO=7; H_PS_PSSID=30963_1438_21089_30908_31086; BD_HOME=1; BD_UPN=13314752"

history

代表浏览器的历史纪录

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

八、操作DOM对象

DOM:文档对象模型

核心

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

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

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

获得Dom节点:

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

<script>
    var h1 = document.getElementsByTagName('h1');// 通过标签名获取节点
    var p1 = document.getElementById('p1');// 通过id获取节点
    var p2 = document.getElementsByClassName('p2');// 通过class获取节点

    var father = document.getElementById('father');
    var childrens = father.children;// 获取父节点下的所有子节点
    father.firstChild;// 获取父节点下的第一个子节点
    father.lastChild;// 获取父节点下的最后一个子节点

</script>

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

更新节点

<div id="d1">

</div>

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

操作文本

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

操作JavaScript

d1.style.color = 'red';
"red"
d1.style.fontSize = '50px';
"50px"
d1.style.padding = '2px';
"2px"

删除节点

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

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

<script>
    var self = document.getElementsById('p1');
    var father =p1.parentElement;// 获得父节点
    father.removeChild(self);// 移除子节点
    
    // 删除是一个动态的过程
    father.removeChild(father.children[0]);
    father.removeChild(father.children[1]);
    father.removeChild(father.children[2]);
</script>

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

插入节点

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

<p id="js">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 移动到 list 中,追加到最后
    list.appendChild(js);
</script>

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

var newP = document.createElement('p');// 创建一个p标签
newP.id = 'newP';
newP.innerText = 'hello world!';

// 创建一个标签节点,通过setAttribute可以设置任意的值
var myScript = document.createElement('script');
myScript.setAttribute('type', 'text/javascript');
list.appendChild(newP);

// 可以创建一个style标签
    var myStyle = document.createElement('style');// 创建一个空的style标签
    myStyle.setAttribute('style', 'text/css');
    myStyle.innerHTML = 'body{background-color: red}';// 设置标签内容
    document.getElementsByTagName('head')[0].appendChild(myStyle);

insert

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

// 要包含的节点.insertBefore(newNode, targetNode)
list.insertBefore(js, ee);

九、操作表单(验证)

表单是什么? form DOM树

  • 文本框 text
  • 下拉框 < select >
  • 单选框 radion
  • 多选框 checkbox
  • 隐藏框 hidden
  • 密码框 password
  • ……

表单的目的:获得信息

获得要提交的信息

<form action="#" method="post">
    <p></p>
        <span>用户名:</span>
        <input type="text" id="username">
        </p>
    <p>
        <span>性别:</span>
        <input type="radio" name="sex" id="boy"><input type="radio" name="sex" id="girl"></p>
</form>

<script>
    var input_text = document.getElementById('username');
    var boy_radio = document.getElementById('boy');
    var girl_radio = document.getElementById('girl');
    // 得到输入框的值
    input_text.value;
    // 修改输入框的值
    input_text.value = '123';

    // 对于单选框,多选框等固定的值,boy_radio.value只能取到设定的值
    boy_radio.checked;// 查看是否被选中,true为选中
    girl_radio.value = true;// 赋值

</script>

提交表单,md5 加密密码,表单优化

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
<!--  MD5 工具类  -->
    <script src="https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.min.js"></script>
</head>
<body>

<!--
表单绑定事件
οnsubmit= 绑定一个提交检测的函数,true,false
将这个结果返回给表单,使用 onsubmit 接收
-->
<form action="https://www.baidu.com/" method="post" onsubmit="return f();">
    <p>
        <span>用户名:</span>
        <input type="text" id="username" name="username">
    <p>
    <p>
        <span>密码:</span>
        <input type="password" id="input_pwd">
    <p>
    <input type="hidden" id="md5_pwd" name="password">
    <input type="submit" value="提交">

</form>

<script>
    function f() {
        alert('提交');
        var uname = document.getElementById('username');
        var pwd = document.getElementById('input_pwd');
        var md5_pwd = document.getElementById('md5_pwd');
        // MD5 算法
        md5_pwd.value = md5(pwd.value);
        // 可以校验判断表单内容,true是通过提交,false是阻止提交
        return true;
    }
</script>

</body>
</html>

十、jQuery

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

获取jQuery

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
<!--    <script src="https://cdn.bootcss.com/jquery/3.4.1/core.js"></script>-->
<!--导入下载的jquery-->    
    <script src="lib/jquery-3.4.1.js"></script>
</head>/
<body>

<!--
    公式:$(selector).action()
-->
<a href="" id="test_jQuery">点击</a>

<script>
    // 选择器就是css的选择器
    $('#test_jQuery').click(function () {
        alert('hello world!');
    })
</script>

</body>
</html>

选择器

<script>
    // 原生JavaScript 选择器对比
    // 标签
    document.getElementsByTagName();
    // id
    document.getElementById();
    // class
    document.getElementsByClassName()

    // jQuery
    // 标签
    $('p').click();
    // id
    $('#id1').click();
    // class
    $('.class1').click();
</script>

文档工具站

jQuery API 中文文档地址:jquery.cuishifeng.cn/

jQuery 菜鸟教程网址:https://www.runoob.com/jquery/jquery-tutorial.html

事件

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

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="lib/jquery-3.4.1.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>
    // 当网页元素加载完毕之后,相应事件
    $(function () {
        $('#divMove').mousemove(function (e) {
            $('#mouseMove').text('x:' + e.pageX + ' y:' + e.pageY)
        })
    });
</script>

</body>
</html>

操作Dom

节点文本操作

<ul id="test_ul">
    <li name="se">javaSE</li>
    <li name="ee">javaEE</li>
</ul>

<script>
    $('#test_ul li[name=se]').text();// 获得值
    $('#test_ul li[name=se]').text('设置值');// 设置值
    $('#test_ul li[name=se]').html();// 获得值
    $('#test_ul li[name=se]').html('<strong>123</strong>');// 设置值
</script>

css 的操作

<ul id="test_ul">
    <li name="se">javaSE</li>
    <li name="ee">javaEE</li>
</ul>

<script>
    $('#test_ul li[name=se]').css('color', 'red');
</script>

元素的显示和隐藏

$('#test_ul li[name=se]').show();// 显示
$('#test_ul li[name=se]').hide();// 隐藏

entsByTagName();
// id
document.getElementById();
// class
document.getElementsByClassName()

// jQuery
// 标签
$('p').click();
// id
$('#id1').click();
// class
$('.class1').click();
```

文档工具站

jQuery API 中文文档地址:jquery.cuishifeng.cn/

jQuery 菜鸟教程网址:https://www.runoob.com/jquery/jquery-tutorial.html

事件

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

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="lib/jquery-3.4.1.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>
    // 当网页元素加载完毕之后,相应事件
    $(function () {
        $('#divMove').mousemove(function (e) {
            $('#mouseMove').text('x:' + e.pageX + ' y:' + e.pageY)
        })
    });
</script>

</body>
</html>

操作Dom

节点文本操作

<ul id="test_ul">
    <li name="se">javaSE</li>
    <li name="ee">javaEE</li>
</ul>

<script>
    $('#test_ul li[name=se]').text();// 获得值
    $('#test_ul li[name=se]').text('设置值');// 设置值
    $('#test_ul li[name=se]').html();// 获得值
    $('#test_ul li[name=se]').html('<strong>123</strong>');// 设置值
</script>

css 的操作

<ul id="test_ul">
    <li name="se">javaSE</li>
    <li name="ee">javaEE</li>
</ul>

<script>
    $('#test_ul li[name=se]').css('color', 'red');
</script>

元素的显示和隐藏

$('#test_ul li[name=se]').show();// 显示
$('#test_ul li[name=se]').hide();// 隐藏
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值