JavaScript

  • 1. What
    • 1.1 概述
    • 1.2 历史 [(知乎链接)](https://zhuanlan.zhihu.com/p/81271098)
  • 2. 快速入门
    • 2.1 引入JavaScript
    • 2.2 基础语法入门
    • 2.3 数据类型
    • 2.4 严格检查模式
  • 3. 数据类型
    • 3.1 字符串
    • 3.2 数组
    • 3.3 对象
    • 3.4 流程控制
    • 3.5 Map & Set(ES6的新特性)
    • 3.6 iterator
  • 4. 函数
    • 4.1 定义函数
    • 4.2 变量的作用域
    • 4.3 方法
  • 5. 内部对象
    • 5.1 Date
    • 5.2 JSON
    • 5.3 Ajax
  • 6. 面向对象编程
    • 6.1 原型对象
    • 6.2 class继承(ES6引入class关键字)
    • 6.3 原型链
  • 7. 操作BOM对象(重点)
  • 8. 操作DOM对象(重要 | 核心)
    • 8.1 获得Dom节点
    • 8.2 更新Dom节点
    • 8.3 删除Dom节点
    • 8.4 插入Dom节点
  • 9. 操作表单(验证)
    • 9.1 表单目的
    • 9.2 提交表单
  • 10. jQuery
    • 10.1 jQuery公式
    • 10.2 jQuery选择器
    • 10.3 jQuery事件
    • 10.4 jQuery操作DOM
  • 11. 总结

1. What

JavaScript(简称“JS”) 是一种具有函数优先的轻量级、解释型或即时编译型的编程语言。虽然它是作为开发Web页面的脚本语言而出名,但是它也被用到了很多非浏览器环境中,JavaScript 是基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式、声明式、函数式编程范式。JavaScript的标准是ECMAScript 。

1.1 概述

JavaScript是一门世界上最流行的脚本语言,一个合格的后端程序员,必须精通javaScript

1.2 历史 (知乎链接)

ECMAScript可以理解为是javaScript的一个标准,目前已经到es6版本;但是大部分浏览器还只停留在支持es5代码上,这就导致开发环境与线上环境版本不一致~

2. 快速入门

2.1 引入JavaScript

  1. 内部标签

    <!--script标签内写JavaScript代码;标签放在head标签内或body标签内皆可-->
    <script>alert("hello world");
    </script><!--不用显式定义type,默认即为javascript-->
    <script type="text/javascript">alert("hello world");
    </script>
    
  2. 外部引入
    test.js

    alert("hello,world!");
    

    test.html

    <!--注意:script标签必须成对出现!-->
    <script src="js/test.js"></script>
    

2.2 基础语法入门

<!--JavaScript严格区分大小写-->
<script>//1.定义变量  变量类型 变量名 = 变量值;var score = 71;//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.print();
</script>

2.3 数据类型

数值、文本、图形、音频、视频
变量

var temp = 'test';

number(JS不区分小数和整数)

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

字符串

'abc'
"abc"

布尔值

true
false

逻辑运算

&&   // 两个都为真,结果为真
||      // 一个为真,结果为真
!       // 取反

比较运算符(重要)

=       // 赋值符号
==        // 等于(类型不一样,值一样,也会判断为true;不推荐使用)
===  // 绝对等于(类型一样,值一样,结果为true)

须知:NaN === 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数组中的数值必须是相同类型的对象,JavaScript中则不需要

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

取数组下标越界则会返回undefined

对象
对象是大括号{ },数组是中括号[ ];每个属性之间使用逗号隔开,最后一个不需要添加

//Person person=new Peson();
var person = {name: "wang",age: 3,tags: ['js','java','web','...']
}

取对象的值

> person.name
> person.age

2.4 严格检查模式

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

3. 数据类型

3.1 字符串

  1. 正常字符串我们使用单引号’ ’ 或者双引号" "包裹;
  2. 个别字符需要使用转义字符输出
    \'               字符串
    \n              换行
    \t              制表符
    \u4e2d          Unicode字符   \u####
    \x41            Ascll字符
    
  3. 多行字符串编写
    // tab上面 esc下面的 `键
    var msg = `abc
    `;
    
  4. 模板字符串
    //tab上面 esc键下面 `键
    let name = "wang";
    let age = 3;
    let msg = `你好啊,${name}`;
    
  5. 字符串长度
    var str = 'wang';
    console.log(str.length);
    
  6. 字符串的可变性——不可变
  7. 大小写转换
    // 注意,此处的toUpperCase()以及toLowtoLowerCase()是方法而非属性
    var str = 'wang';
    console.log(str.toUpperCase());
    console.log(str.toLowerCase());
    
  8. 获取下标索引
    var str = 'wang'
    str.indexOf('t');
    
  9. 截取字符串
    // [)包含左边数字 不包含右边数字
    var str = 'wang'
    str.substring(1,3);  // [1,3) 从第1个字符截取到第3个字符,不包含第3个
    

3.2 数组

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

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

    console.log(arr.length);
    

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

  2. 通过元素获得下标索引(indexOf方法)

    // 参数中字符串的“1”和数字1是不同的
    console.log(arr.indexOf(2));   // 输出1
    
  3. slice()截取Array的一部分,返回一个新数组,类似于String中的substring方法

    arr.slice(3);   // 输出[4,5,6]
    arr.slice(1,3);   // 输出[2,3]
    
  4. push() & pop() (对尾部的操作)

    • push:压入到尾部
    • pop:弹出尾部的一个元素
  5. unshift() & shift() (对头部的操作)

    • unshift:压入到头部
    • shift:弹出头部的一个元素
  6. 元素排序 sort()

    arr.sort();
    
  7. 元素反转 reverse()

    arr.reverse();
    
  8. 拼接方法 concat() (拼接到尾部)

    //concat()并没有修改数组,只是会返回一个新的数组
    arr.concat([1,2,3])
    
  9. 连接符 join

    // 打印拼接数组,使用特定的字符串拼接
    arr.join('-');   // "1-2-3-4-5-6"
    
  10. 多维数组

    arr=[[1,2,3],[4,5,6],["7","8"]];
    arr[1][1];   // 输出为5
    

3.3 对象

若干个键值对

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

javascript中的 {…}表示一个对象,键值对描述属性xxxx: xxxx,多个属性之间使用逗号隔开,最后一个属性不加逗号!其中的所有的键都是字符串,值是任意对象!

  1. 对象赋值

    person.name = "wang";
    
  2. 使用一个不存在的对象属性,不会报错!
    person.sex   // 无sex属性,返回undefined
    
  3. 动态删减属性,通过delete删除对象的属性
    delete person.name;
    true   // 此时对象person中已删除掉name属性
    
  4. 动态添加属性,直接给新的属性添加值即可
    person.sex = "man";
    "man"   // 此时对象person中已添加上sex属性
    
  5. 判断属性值是否在这个对象中
    'sex' in person;
    true// 继承父类的方法
    'toString' in person
    true
    
  6. 判断一个属性是否是这个对象自身拥有的 hasOwnProperty()
    person.hasOwnProperty('toString');
    false
    person.hasOwnProperty('age');
    true
    

3.4 流程控制

if判断

var age = 3;
if(age > 3){}
else if(age < 5){}
else{}

while循环

while(age < 100){age = age + 1;console.log(age);
}do{}while()

for循环

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

forEach循环

var age = [11, 22, 33, 44, 55, 66, 77, 88, 99];
// 函数
age.forEach(function(value){console.log(value);
})

for…in得到的是下标 | for…of得到的是元素值

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

3.5 Map & Set(ES6的新特性)

Map

//es6
var map = new Map([['tom',100],['jack',90]]);
var name = map.get('tom');   // 通过key获得value
map.set('admin',100);
map.delete('tom');

Set:无序不重复集合

var set = new Set([1, 2, 3, 3, 2, 1]);   // set可以去重
set.add(7);
set.delete(1);
console.log(set.has(3));   // true

3.6 iterator

iterator用来遍历迭代Map和Set

// 通过for of遍历得到的是元素;for in得到的是下标
var arr = [3,4,5];
for(let x of arr){console.log(x);
}var map = new Map([["tom", 100], ["jack", 90], ["wang", 80]]);
for(let x of map){console.log(x);
}var set = new Set([6, 7, 8]);
for(let x of set){console.log(x);
}

4. 函数

4.1 定义函数

绝对值函数(两种定义方式等价)

// 定义方式一
function abs(x){if(x >= 0){return x;}else{return -x;}
}// 定义方式二
var abs = function(x){if(x >= 0){return x;}else{return -x;}
}
  • 执行至return代表函数结束并返回结果,若没有执行至return,函数执行完也会返回undefined;
  • function(x){…} 这是一个匿名函数,执行结束后会将结果赋值给abs,通过abs就可以调用函数!

调用函数

abs(10);
abs(-10);

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

参数进来是否存在问题?假设不存在参数,如何规避? 通过typeof关键字来解决

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

  arguments是一个JavaScript免费赠送的关键字,代表传递进来的所有参数(以数组方式存在);而arguments包含了所有的参数,当需要用其中部分未定义的参数来进行附加操作就需要排查已定义参数。
  因此引入rest作为ES6的新特性之一,用于获取未定义的参数。

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

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

4.2 变量的作用域

  • 在JavaScript中,var定义的变量实际是有作用域的;假设在函数体中声明,则在函数体外不可以使用 (非要想实现的话,可以使用闭包);
  • 如果两个函数使用了相同的变量名,只要在不同函数内部就不冲突;
  • 内部函数可以访问外部函数的成员,反之则不行;
  • 内部函数变量和外部函数变量重名时,函数查找变量会从自身函数开始由内向外查找,倘若内外部同时存在这个同名函数变量,则内部函数会屏蔽外部函数的变量~
function fun(){var x = 1;x = x + 1;
}x = x + 2;   // Uncaught ReferenceError: x is not definedfunction fun1(){   // 无事发生,不会冲突报错var x = 'W';x = x + 1;
}function fun2(){  var x = 1;function fun3(){var y = x + 1;   // 输出2}var z = y + 1;   // Uncaught ReferenceError: y is not defined
}

提升变量的作用域

/**
* JavaScript执行引擎会自动提前y的声明,但是不会提前变量y的赋值;
* 这个是在JavaScript建立之初就存在的特性;
* 因此以后要养成规范:所有的变量定义都放在函数的头部以便于后期维护
*/
function fun(){   // 运行函数会返回xundefinedvar x = "x" + y;console.log(x);var y = 'y';
}// 等同于
function fun2(){var y;var x = "x" + y;console.log(x);y = 'y';
}

全局变量

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

测试:上面最后四行语句等价且输出结果相同。

/**
* JavaScript实际上只有一个全局作用域,
* 任何变量(函数也可以视为变量)假设没有在函数作用范围内找到就会向外查找
* 如果在全局作用域里都没有找到,报错RefrenceError
*/
var x = 'xxx';
window.alert(x);
var old_alert = window.alert;
old_alert(x);// 用全局函数覆盖
window.alert = function(){};
// 发现alert()失效了
window.alert(123);
// 发现alert()恢复了
window.alert = old_alert;
window.alert(456);

规范
由于所有全局变量都会绑定到window上,如果不同的JavaScript文件使用了相同的全局变量,就会产生冲突 ===> 如何能减少冲突?

<script>/*** 把自己的代码全部放入自己定义的唯一空间名字中,降低全局命名冲突的问题~ * 因此出现了JQuery */// 唯一全局变量var WangApp = {};// 定义全局变量WangApp.name = 'Wang';WangApp.add = function(a, b){return a + b;}</script>

局部作用域 let(建议局部作用域变量都用let定义)

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

常量 const(ES6引入的新特性)

const PI='3.14';   // 只读变量
console.log(PI);
PI='123';   // TypeError: Assignment to constant variable.

4.3 方法

定义方法:方法就是把函数放在对象里面(对象由两个东西组成:属性和方法)

let wang = {name: 'Wang',birth: 1999,age: function(){// 当前年份 - 出生年份let now = new Date().getFullYear();return now - this.birth;   // this是无法指向的,只能默认指向调用他的对象}
}//属性
wang.name
//方法,一定要带()
wang.age()
function getAge(){let now = new Date().getFullYear();return now - this.birth;
}
let wang = {name: 'Wang',birth: 1999,age: getAge
}/**
* wang.age()   返回结果正常
* getAge()   返回NaN   this此时指向window
*/

apply(在JavaScript中可以控制this的指向)

function getAge(){// 当前年份 - 出生年份let now = new Date().getFullYear();return now - this.birth;
}
let wang = {name: 'Wang',birth: 1999,age:getAge
}getAge.apply(wang, []);   // this指向了wang并且参数为空

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 now = new Date();
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(now.getTime()));   // 将时间戳转为时间
now.toLocaleString();   // 当前时间

转换时区

now = new Date(now.getTime());
now.toLocaleString();   // 注意调用的是一个方式,不是一个属性
now.toGMTString();

5.2 JSON

早期数据传输使用的是XML文件,后来出现了JSON文件

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

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

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

JSON字符串和JavaScript对象的转换

var user = {name: "wang",age: 23,sex: '男'
}// 对象转换为JSON字符串  {"name":"wang", "age":23, "sex":"男"}var jsonUser = JSON.stringify(user);// JSON字符转换为对象,参数为JSON字符串var object = JSON.parse('{"name":"wang", "age":23, "sex":"男"}');

JavaScript对象和JSON字符串的区别

// JavaScript对象和JSON字符串的区别
var object = {a:'hello', b:'world'};
var json = '{"a":"hello", "b":"world"}';

5.3 Ajax

  • 原生的js写法——xhr异步请求
  • jQuery封装好的方法 $(“#name”).ajax(" ")
  • axios 请求

6. 面向对象编程

6.1 原型对象

面向对象的编程语言:Java、JavaScript、C#…但其中JavaScript略有不同

  • 类:模板 原型对象
  • 对象:具体的实例
<script>let student = {name: "wang",age: 23,run: function(){    console.log(this.name + "run...");}};let chen = {name: "chen"};// 原型对象 __proto__chen.__proto__ = student;chen.run();let bird = {fly: function(){console.log(this.name + " fly.....");}}chen.__proto__ = bird;chen.fly();
</script>

6.2 class继承(ES6引入class关键字)

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

    <script>// 定义一个学生类class student{constructor(name){   // 构造器this.name = name;}hello(){   // 方法alert('hello');}}var wang = new student("王");wang.hello();
    </script>
    
  2. 继承
    <script>
    //定义一个学生的类
    class student{constructor(name){this.name = name;}hello(){alert('hello');}
    }class xiaoStudent extends student{constructor(name, grade){super(name);this.grade = grade;}myGrade(){alert("我是一名满分小学生");}
    }let wang = new xiaoStudent("wang", 1);
    </script>
    

本质:查看对象原型

6.3 原型链

_proto_:

7. 操作BOM对象(重点)

BOM(Browser Object Model) 是指浏览器对象模型,是用于描述对象与对象之间层次关系的模型。浏览器对象模型提供了独立于内容的、可以与浏览器窗口进行互动的对象结构。其本身由多个对象组成,其中代表浏览器窗口的window对象是BOM的顶层对象,其他对象都是该对象的子对象。

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

window(重要)

window代表浏览器窗口

window.alert()
window.innerHeight
window.innerWidth
window.outerHeight
window.outerWidth

navigator(不建议使用)

navigator封装了浏览器的信息;大多数时候,我们不会使用navigator对象,因为会被人为修改!

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

navigator.appName
navigator.appVersion
navigator.userAgent
navigator.platform

screen

screen代表屏幕尺寸

screen.width
screen.height

location(重要)

location代表当前页面的URL信息

host: "www.baidu.com"
href: "https://www.baidu.com/"
protocol:"https:"   // 协议
reload: ƒ reload()   // 方法 刷新页面
// 设置新的地址
location.assign("https//localhost:8080")

document

document代表当前页面,HTML通过DOM文档树展示

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   // 可以直接拿到cookie

劫持cookie原理

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

防止cookie被劫持,服务器端可以设置cookie: httpOnly

history(不建议使用)

history代表浏览器的历史记录

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

8. 操作DOM对象(重要 | 核心)

文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展置标语言的标准编程接口。它是一种与平台和语言无关的应用程序接口(API),它可以动态地访问程序和脚本,更新其内容、结构和www文档的风格(HTML和XML文档是通过说明部分定义的)。文档可以进一步被处理,处理的结果可以加入到当前的页面。DOM是一种基于树的API文档,它要求在处理过程中整个文档都表示在存储器中。另外一种简单的API是基于事件的SAX,它可以用于处理很大的XML文档,由于大,所以不适合全部放在存储器中处理。

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

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

8.1 获得Dom节点

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

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><div id="father"><h1>标题一</h1><p id="p1">p1</p><p class="p2">p2</p></div><script>// 获得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;</script>
</body>
</html>

8.2 更新Dom节点

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><div id = "id1"></div><script>var id1 = document.getElementById("id1");</script>
</body>
</html>
// 操作文本
id1.innerText = '456';   // 修改文本的值
id1.innerHTML = '<strong>123</strong>';   // 可以解析HTML文本标签// 操作JS
id1.style.color = 'yellow';   // 属性使用 字符串 包裹
id1.style.fontSize = '20px';   // 驼峰命名
id1.style.padding = '2em';   // 首行缩进

8.3 删除Dom节点

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

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><div id = "father"><h1>标题一</h1><p id = "p1">p1</p><p class = "p2">p2</p></div><script>var self = document.getElementById('p1');var father = self.parentElement;father.removeChild(self);// 删除是一个动态的过程;father.removeChild(father.children[0]);father.removeChild(father.children[1]);</script></body>
</html>

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

8.4 插入Dom节点

  当获得的Dom节点是空的时,通过innerHTML可以增加一个元素;但是如果这个Dom节点已经存在元素,那么增加的元素就会产生覆盖!

  • 追加

    <!DOCTYPE html>
    <html lang="en">
    <head><meta charset="UTF-8"><title>Title</title>
    </head>
    <body><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');list.appendChild(js);</script>
    </body>
    </html>
    
  • 创建并插入新标签
    <!DOCTYPE html>
    <html lang="en">
    <head><meta charset="UTF-8"><title>Title</title>
    </head>
    <body><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');   // 创建一个p标签newP.id = 'newP';newP.innerText = 'Hello,world!';list.appendChild(newP);// 创建一个标签节点(通过这个属性,可以设置任意的值)var myScript = document.createElement('script');myScript.setAttribute("type","text/javascript");list.appendChild(myScript);// 创建一个style标签并追加在head里var myStyle = document.createElement('style');   // 创建一个空的style标签myStyle.setAttribute('type', 'text/css');myStyle.innerHTML = 'body{background-color: chartreuse;}';   // 设置标签内容document.getElementsByTagName('head')[0].appendChild(myStyle);// 设置标签内容var body = document.getElementsByTagName('body');body[0].style.background = 'red';</script>
    </body>
    </html>
    
  • 插入选定标签前面 insertBefore
    <!DOCTYPE html>
    <html lang="en">
    <head><meta charset="UTF-8"><title>Title</title>
    </head>
    <body><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');var ee = document.getElementById('ee');// 要包含的节点.insertBefoer(newNode, targetNode)list.insertBefore(js,ee);</script>
    </body>
    </html>
    

9. 操作表单(验证)

表单在网页中主要负责数据采集功能。一个表单有三个基本组成部分: 表单标签,这里面包含了处理表单数据所用CGI程序的URL以及数据提交到服务器的方法; 表单域,包含了文本框、密码框、隐藏域、多行文本框、复选框、单选框、下拉选择框和文件上传框等;表单按钮,包括提交按钮、复位按钮和一般按钮,用于将数据传送到服务器上的CGI脚本或者取消输入,还可以用表单按钮来控制其他定义了处理脚本的处理工作。

常见表单:

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

9.1 表单目的

提交信息

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><form action="" method="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><input type="submit"></form><script>var input_text = document.getElementById('username');var boy_radio = document.getElementById('boy');var girl_radio = document.getElementById('girl');// 得到输入框的值input_text.value// 修改输入框的值inut_text.value = '123';// 对于单选框,多选框等等固定的值,boy_radio.value只能取到当前的值boy_radio.checked;   // 查看返回的结果是否为true,true则表明被选中girl_radio.checked = true;   // 赋值</script>
</body>
</html>

9.2 提交表单

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 = "password" /></p><input type = "hidden" id = "md5-password" name = "password"> <!--绑定事件 onclick 被点击--><button type = "submit">提交</button></form><script>function f(){alert('执行f()函数...');var username = document.getElementById("username");var pwd = document.getElementById("password");var md5pwd = document.getElementById("md5-password");// pwd.value = md5(pwd,value);   // 提交时密码会变长一瞬间md5pwd.value = mad5(pwd.value);   // 使用隐藏表单就不会有变长的瞬间// 可以校验判断表单内容,true通过提交,false阻止提交return false;     }</script>
</body>
</html>

10. jQuery

jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(框架)。jQuery设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。它封装了JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。

核心特性:

  • 具有独特的链式语法和短小清晰的多功能接口;
  • 具有高效灵活的CSS选择器;
  • 可对CSS选择器进行扩展;
  • 拥有便捷的插件扩展机制和丰富的插件。

10.1 jQuery公式

公式:$(selector).action()

<!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>--><script src="lib/jquery-3.4.1.js"></script></head><body><a href="" id = "test-jquery">点我</a><script>    // 选择器就是css选择器$('#test-jquery').click(function(){alert('hello,jQuery!');});</script></body>
</html>

10.2 jQuery选择器

文档工具站

/*原生js,选择器少,麻烦不好记*/
// 标签
document.getElementByTagName();
// id
document.getElementById();
// class
document.getElementByClassName();// jQuery css中的选择器它全部都能用!
$('p').click();   // 标签选择器
$('#id1').click();   // id选择器
$('.class1').click();   // class选择器

10.3 jQuery事件

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

$('.class').mousedown()   // 按下
$('.class').mouseenter()
$('.class').mouseleave()
$('.class').mousemove()   // 移动
$('.class').mouseout()
$('.class').mouseover()
$('.class').mouseup()
<!DOCTYPE html>
<html lang = "en"><head><meta charset = "UTF-8"><title>Title</title><!--本地引入jQuery--><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>// 当网页元素加载完毕之后,响应事件// $(document).ready(function(){}) 以下为简写$(function(){$('#divMove').mousemove(function(e){$('#mouseMove').text('x:'+e.pageX+" y:"+e.pageY)})});</script></body>
</html>

10.4 jQuery操作DOM

  • 节点文本操作

    <!DOCTYPE html>
    <html lang = "en"><head><meta charset = "UTF-8"><title>Title</title><!--本地引入jQuery--><script src="lib/jquery-3.4.1.js"></script></head><body><ul id='test-ul'><li class='js'>JavaScript</li><li name='python'>Python</li></ul><script>// document.getElementById('test-ul');   // 原生代码$('#test-ul li[name=python]').text();   // 获得值$('#test-ul li[name=python]').text('设置值');   // 设置值$('#test-ul').html();   // 获得值$('#test-ul').html('<strong>123</strong>');   // 设置值</script></body>
    </html>
    
  • CSS操作
    $('#test-ul li[name=python]').css({"color", "red"});
    
  • 元素的显示和隐藏(本质display:none)
    $('#test-ul li[name=python]').show();   // 显示
    $('#test-ul li[name=python]').hide();   // 隐藏
    
  • 测试
    $(window).width();
    $(window).height();
    $('#test-ul li[name=python]').toggle();   // 切换元素的显示与隐藏
    
  • 未来ajax()
    $('#form').ajax()$.ajax({url:"test.html",context:document.body,success:function(){$(this).addClass("done");
    }})
    

11. 总结

前端基础_JavaScript相关推荐

  1. html表格联动,html前端基础:table和select操作

    html前端基础:table和select操作 发布时间:2020-05-13 09:58:10 来源:亿速云 阅读:196 作者:Leah 这篇文章主要为大家详细介绍html前端基础中有关table ...

  2. element ui 图片控件 排序_JAVA全栈面试前端基础之四 Vue+Element框架快速开发

    本文主要包括以下4个内容 什么是ElementUI Vue 中引入ElementUI Vue+elementUI构建后台管理系统 开源项目推荐 1.什么是ElementUI 官网:https://el ...

  3. boost log 能不能循环覆盖_前端基础进阶(十四):深入核心,详解事件循环机制...

    Event Loop JavaScript的学习零散而庞杂,很多时候我们学到了一些东西,但是却没办法感受到进步!甚至过了不久,就把学到的东西给忘了.为了解决自己的这个困扰,在学习的过程中,我一直在试图 ...

  4. gif透明背景动画_前端基础系列之bmp、jpg、png、gif、svg常用图片格式浅谈(二)...

    IT客栈 作者:大腰子 bmp.jpg.png.gif.svg常用图片格式 之前为大家介绍了几种WEB前端常用的图片格式,对比了它们的特点,参见<前端基础系列之bmp.jpg.png.gif.s ...

  5. 前端基础知识整理汇总(中)

    前端基础知识整理汇总(中) Call, bind, apply实现 // call Function.prototype.myCall = function (context) {context = ...

  6. 前端基础知识整理汇总(上)

    前端基础知识整理汇总(上) HTML页面的生命周期 HTML页面的生命周期有以下三个重要事件: 1.DOMContentLoaded -- 浏览器已经完全加载了 HTML,DOM 树已经构建完毕,但是 ...

  7. jquery function_前端基础进阶(十三)详细图解jQuery扩展jQuery插件

    UI 鉴赏 早几年学习前端,大家都非常热衷于研究jQuery源码. 我至今还记得当初从jQuery源码中学到一星半点应用技巧的时候常会有一种发自内心的惊叹,"原来JavaScript居然可以 ...

  8. 前端基础-HTML的的标签详解

    阅读目录 一.head内常用标签 二. HTML语义化 三. 字符实体 四. h系列标签 五. p标签 六. img标签 七. a标签 八. 列表标签 九. table标签 十. form标签 一. ...

  9. 前端基础-CSS的各种选择器的特点以及CSS的三大特性

    一. 基本选择器 二. 后代选择器.子元素选择器 三. 兄弟选择器 四. 交集选择器与并集选择器 五. 序列选择器 六. 属性选择器 七. 伪类选择器 八. 伪元素选择器 九. CSS三大特性 一. ...

最新文章

  1. Golang实现requests库
  2. DOCTYPE声明作用及用法详解
  3. OpenCV计算机视觉编程攻略之用色调、饱和度和亮度表示颜色
  4. 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第2节 线程实现方式_9_Thread类的常用方法_获取线程名称...
  5. kpw3刷安卓教程2019_买kindle paperwhite4的别急,或许3更好用,因为3可以刷安卓!...
  6. Leetcode 5773:插入后的最大值
  7. 闲鱼的排名规则是什么,闲鱼排名规则方法?
  8. java中获取日期属于哪一年的第几周
  9. php md5加密数组,php md5加密
  10. 遥控汽车的编程c语言,智能小车循迹、避障、红外遥控C语言代码.docx
  11. xgboost, lightgbm, catboost, 谁才是预言之战的最终赢家?
  12. http chunk
  13. SDRAM的工作原理
  14. 如何用计算机录麦克风的声音,电脑内部与麦克风的声音怎么同时录制?详细教程在此...
  15. Java八个基本数据类型所占字节数
  16. 详细讲解从用户空间申请内存到内核如何为其分配内存的过程
  17. 2.3 关系数据库---关系代数2
  18. [CF1537D]Deleting Divisors
  19. Cyanine5 NHS ester |分子量:616.19|分子式:C36H42ClN3O4
  20. 苹果微信王者荣耀哪个服务器人多,王者荣耀:QQ区玩家和微信区玩家的几大区别 你中枪了几个...

热门文章

  1. android widget 点击事件,Android Widget点击事件
  2. NBA季后赛总抢断排行榜(数据截止至11年5月5日)
  3. python爬虫:淘宝图片爬虫
  4. DBMS_REPAIR
  5. l开头的英文车标是什么车_L开头的车标叫什么,L开头全是字母的车品牌
  6. 【Python】Python3如何将汉字转化成反斜线u(\u)开头的字符串
  7. [转载]苹果公司与分工原理
  8. 【Unity】OnTriggerStay2D无法触发问题,物体跟随鼠标等背包系统以及UI场景交互系统技术总结
  9. puzzle(1015)明灯谜局、马赛克
  10. Office365:客户端升级后无法启动Microsoft Outlook