Web前端
B/S架构
- 静态资源
- 使用静态网页开发技术发布的资源
 - 特点:
- 所有用户访问,得到的结果是一样的
 - 如:文本、图片、音频、视频,HTML、CSS、Javascript
 - 如果用户请求的是静态资源,那么服务器会直接将静态资源发送给浏览器,浏览器内置了静态资源的解析引擎,可以展示静态资源
 
 
 - 动态资源
- 使用动态网页即时发布的资源
 - 特点:
- 所有用户访问,得到的结果可能不一样
 - 如:jsp/servlet、php、asp…
 - 如果用户请求的是动态资源,那么服务器会执行动态资源,转换为静态资源,再发送给浏览器
 
 
 
HTML
概念
- Hyper Text Markup Language 超文本标记语言
- 超文本:超文本是用超链接的方法,将各种不同空间的文字信息组织再一起的网状文本。
 - 标记语言:由标签构成的语言,标记语言不是编程语言
 
 
基础语法
- html文档后缀:
.html或.htm - 标签分类
- 围堵标签:有开始标签和结束标签,如
<html></html> - 自闭合标签:开始标签和结束标签在一起,如
<br/> 
 - 围堵标签:有开始标签和结束标签,如
 - 在开始标签中可以定义属性。属性是由键值对构成,值需要用引号引起来(单引双引都可)
 - html的表情不区分大小写,建议使用小写。
 
常用标签
文件标签
<html></html>:html文档的根标签<head></head>:头标签,用于指定html文档的一些属性。引入外部资源<title></title>:标题标签<body></body>:体标签<!DOCTYPE html>:定义文档类型,html5中定义该文档是html文档<meta charset="UTF-8">:指定字符集
文本标签
- 注释:
<!-- 注释内容 --> <h1>to<h6>:标题标签(h1~h6字体大小逐渐递减)<p></p>:段落标签<br/>:换行标签<hr>:展示一条水平线- 属性:
- color:颜色
 - width:宽度
 - size:高度
 - align:对齐方式(center/left/right)
 
 
- 属性:
 <b></b>:字体加粗<i></i>:字体斜体<font></font>:字体标签<center>:文本居中,相对于父元素- 属性:
- color:颜色
 - size:大小
 - face:字体
 
 
- 属性:
 属性定义
color:
- 英文单词
 - rgb(值1,值2,值3):值的范围:0~255 如 rgb(0,0,255)
 - #值1值2值3:值的范围:00~FF之间。如: #FF00FF
 
width:
- 数值,单位默认px像素
 - 数值%:占比相对于父元素的比例
 
- 注释:
 
> 特殊字符表:空格:` `
图片标签
<img/>:展示图片- 属性:
- src:指定图片的位置
 - alt:规定在图像无法显示时的替代文本
 
 <img src="图片地址" alt="图片名称">
相对路径:以.开头的路径
- ./:代表当前目录
 - ../:代表上一级目录
 
- 属性:
 
列表标签
- 有序列表
<ol>:定义有序列表。<li>:定义列表的项目。
 - 无序列表
<ul>:定义无序列表。<li>:定义列表的项目。
 
- 有序列表
 链接标签
<a>:定义一个超链接- 属性:
- href:指定访问资源的url(统一资源定位符)
 - target:指定打开资源的方式
- _self:默认值,在当前页面打开
 - _blank:在空白页打开
 
 
 
- 属性:
 
样式/节
<div></div>:可以把文档分割为独立的、不同的部分。每一个div占满一整行。块级标签<span></span>:用来组合文档中的行内元素。文本信息在一行展示,行内标签 内联标签<header></header>:定义文档的页眉(介绍信息)。<footer></footer>:定义文档或节的页脚。
表格标签
<table></table>- width:宽度
 - border:边框
 - cellpadding:定义内容和单元格的距离
 - cellspacing:定义单元格之间的距离。如果指定为0,则单元格的线会合为一条
 - bgcolor:背景色
 - align:对齐方式
 
<tr></tr>:定义行- bgcolor:背景色
 - align:对齐方式
 
<td></td>:定义单元格- colspan:合并列
 - rowspan:合并行
 
<th></th>:定义表头单元格<caption></caption>:表格标题<thead></thead>:表示表格的头部分<tbody></tbody>:表示表格的体部分<tfoot></tfoot>:表示表格的脚部分
表单标签
- 概念:用于采集用户输入的数据。用于和服务器进行交互。
 <form>:用于定义表单,可以定义一个范围,范围内代表采集用户数据的范围属性:
action;指定提交数据的URLmethod:指定提交方式(一共7种,常用2种)get- 请求参数会在地址栏显示。数据被封装到请求行中
 - 请求参数大小有限制
 - 不太安全
 
post- 请求参数不会显示在地址栏。数据被封装到请求体中
 - 请求参数大小没有限制
 - 比较安全
 
表单项中的数据想要被提交,必须指定其
name属性
表单项标签
input:可以勇敢type属性值,改变元素展示的样式type属性:text:文本输入框,默认值
password:密码输入框
radio:单选框
- 要想多个单选框实现单选的效果,则多个单选框的
name属性必须一样 - 一般会给每一个单选框提供value属性,指定其被选中后提交的值
 - checked属性:可以指定默认值
cheecked="checked",可以简写checked 
- 要想多个单选框实现单选的效果,则多个单选框的
 checkbox:复选框
- 一般会给每一个单选框提供value属性,指定其被选中后提交的值
 - checked属性:可以指定默认值
 
file:文件选择框
hidden:隐藏域,用于提交一些信息
按钮:
- submit:提交按钮,可以提交表单
 - button:普通按钮
 - image:图片提交按钮(src属性指定图片的路径)
 
date:定义 date 控件(包括年、月、日,不包括时间)。
- email:定义用于 e-mail 地址的字段。
 - color:定义拾色器
 - number:定义用于输入数字的字段。
 
placeholder:指定输入框的提示信息,当输入框的内容发生改变,会自动清空提示信息
select:下拉列表- 子元素:
option,指定列表项 
- 子元素:
 textarea:文本域- cols:指定列数,每一行有多少个字符
 - rows:默认多少行。
 
- `label`:指定输入项的文字描述信息
    - label的for属性一般会和 input 的 id属性值 对应。如果对应了,则点击label区域,会让input输入框获取焦点。`<label for="username"></label>`
CSS
概念:Cascading Style Sheets 层叠样式表
- 层叠:多个样式可以作用在同一个html的元素上,同时生效
 
优点:
- 功能强大
 - 将内容展示和样式控制分离
- 降低耦合度。解耦
 - 让分工协作更容易
 - 提高开发效率
 
 
使用
内联样式
- 在标签内使用style属性指定css代码
 - 如:
<div style="color:red;">hello css</div> 
内部样式
- 在head标签内,定义style标签,style标签的标签体内容就是css代码
 - 如
1
2
3
4
5
6
7<style>
div{
color:blue;
}
</style>
<div>hello css</div> 
外部样式
- 定义css资源文件
 在head标签内,定义link标签,引入外部的资源文件
1
2
3
4
5
6
7<!-- a.css:
div{
color:green;
} -->
<link rel="stylesheet" href="css/a.css">
<div>hello css</div>
<div>hello css</div>
注意:
- 三种方式,css作用域越来越大
 - 3种格式可以写为:  
1
2
3<style>
@import "css/a.css";
</style> 
语法
格式:
1
2
3
4
5选择器{
属性名1:属性值1;
属性名2:属性值2;
...
}注意:每一对属性需要使用分号;隔开,最后一对属性可以不加
选择器
- 选择器:筛选具有相似特征的元素
 分类:
基础选择器
id选择器:选择具体的id属性值的元素,建议在一个html页面中id值唯一
- 语法:
#id属性值{} 
- 语法:
 元素选择器:选择具有相同标签名称的元素
- 语法:
标签名称{} - 注意:id选择器优先级高于元素选择器
 
- 语法:
 类选择器:选择具有相同class属性值的元素
- 语法:
.class属性值{} - 注意:类选择器优先级高于元素选择器
 
- 语法:
 
扩展选择器
选择所有元素
- 语法:
*{} 
- 语法:
 并集选择器
- 语法:
选择器1,选择器2{} 
- 语法:
 子选择器:筛选选择器1元素下的选择器2元素
- 语法:
选择器1 选择器2{} 
- 语法:
 父选择器:筛选选择器2的父选择器1
- 语法:
选择器1 > 选择器2{} 
- 语法:
 属性选择器:选择元素名称,属性名=属性值的元素
- 语法:
元素名称[属性名="属性值"]{} 
- 语法:
 伪类选择器:选择一些元素具有的状态
- 语法:
元素:状态{} - 如: 
<a>标签- link:初始化的状态
 - visited:被访问过的状态
 - active:正在访问状态
 - hover:鼠标悬浮状态
 
 
- 语法:
 
属性
字体
- font-size:字体大小
 - color:文本颜色
 - text-align:对其方式
 - line-height:行高
 
背景
- background:
background: url("图片地址") no-repeat right top; 
- background:
 边框
- border:设置边框,符合属性
 
尺寸
- width:宽度
 - height:高度
 
盒子模型:控制布局
- margin:外边距
 padding:内边距
- 默认情况下内边距会影响整个盒子的大小
 - box-sizing: border-box; 设置盒子的属性,让width和height就是最终盒子的大小
 
float:浮动
- left
 - right
 
Javascript
概念:客户端脚本语言
- 运行再客户端浏览器中,每一个浏览器都有JavaScript的解析引擎
 - 脚本语言:不需要编译,直接就可以被浏览器解析执行
 
功能:可以增强用户和html页面的交互过程,可以来控制html元素,让页面增加动态效果,增强用户体验
JavaScript的发展史
- 1992年,Nombase公司,开发出第一门客户端脚本语言,专门用于表单的校验。
 - 1995年,NetScape公司,开发了一门客户端脚本语言:LiveScript。后来SUN公司的专家,修改LiveScript,命名为JavaScript
 - 1996年,微软模仿JavaScript开发出JScript语言
 - 1997年,ECMA(欧洲计算机制造商协会),制定出客户端脚本语言的标准:ECMAScript,就是统一了所有客户端脚本语言的编码方式
 - JavaScript = ECMAScript + JavaScript特有东西(DOM+BOM)
 
ECMAScript:客户端脚本语言标准
基本语法
与html结合方式
- 内部JS:定义
<script>,标签体内容就是js代码 - 外部JS:定义
<script>,通过src属性引入外部的js文件 
- 注意:
<script>可以定义在html页面的任何地方。但定义的位置会影响执行顺序<script>可以定义多个
 
- 内部JS:定义
 注释
- 单行注释:
//注释内容 - 多行注释:
/*注释内容*/ 
- 单行注释:
 数据类型
基本数据类型
- number:数字。整数/小数/NaN(not a number一个不是数字的数字类型)
 - string:字符串。
 - boolean:true/false
 - null:一个对象为空的占位符
 - undefined:未定义。如果一个变量没有给初始化值,则会被默认赋值为undefined
 
引用数据类型
- 对象
 
变量
- 变量:一小块存储数据的内存空间
 Java语言是强类型语言,而JavaScript是弱类型语言
- 强类型:在开辟变量存储空间时,定义了空间将来存储的数据的数据类型。只能存储固定类型的数据
 - 弱类型:在开辟变量存储空间时,不定义空间将来的存储数据类型,可以存放任意类型的数据
 
语法:
var 变量名 = 初始化值;typeof运算符:获取变量的类型。(null运算后得到Object类型)
运算符
一元运算符:只有一个运算数的运算符
++,-- , +(正号)- 在JS中,如果运算数不是运算符所要求的类型,那么JS引擎会自动地将运算数进行类型转换。
 - String转number:按照字面值转换,如果字面值不是数字,则转为NaN
 
算数运算符
+ - * / % ...
赋值运算符
= += -+....
比较运算符
> < >= <= == ===(全等于)- 比较方式
- 类型相同:直接比较
- 字符串:按照字典顺序比较。按位逐一比较,直到得出大小为止
 
 - 类型不同:先进行类型转换,再比较(“123”==123)
===全等于在比较之前,先判断类型,如果类型不一致,则直接会返回false
 
 - 类型相同:直接比较
 
逻辑运算符
&& || !- 其他类型转boolean
- number:0或NaN为false,其他为true
 - string:除了空字符串,其他都是true
 - null/undefined:false
 - 对象:所有对象都为true
 
 
三元运算符
表达式? 值1:值2;- 判断表达式的值,如果是true则取值1,如果是false则取值2
 
流程控制语句
- if…else…
 switch
- 在Java中,switch语句可以接受地数据类型:byte int shor char,枚举(jdk1.5) ,String(jdk1.7)
 - 在JS中,switch语句可以接受任意的原始数据类型
 
while
- do…while
 - for
 
JS特殊语法
- 语句以分号
;结尾,如果一行只有一条语句,分号可以省略 - 变量地定义使用
var关键字,也可以不使用- 使用:定义的变量是局部变量
 - 不使用:定义的变量是全局变量(不建议)
 
 
- 语句以分号
 
基本对象
Function函数(方法)对象
创建:
1
2
3
4
5
6
7
8// 常用
function 方法名称(形参列表){
方法体
}
// 常用2
var 方法名 = function(形参列表){
方法体
}属性:
- length:返回形参的个数
 
特点:
- 方法定义是,形参的类型不用写,返回值类型也不用写
 - 方法是一个对象,如果定义名称相同的方法,会覆盖
 - JS中,方法的调用只与方法的名称有关,和参数列表无关(无法重载,可以通过arguments.length进行模拟重载)
 - 在方法声明中有一个隐藏的内置对象(数组),arguments封装所有的实际参数
 
调用:方法名称(实际参数列表);
Array数组对象
创建
1
2
3
4
5
6// 1
var arr = new Array(元素列表);
// 2
var arr = new Array(默认长度);
// 3
var arr = [元素列表];方法
- join(分隔符):将数组中的元素按照指定的分隔符拼接为字符串
 - push():项数组的末尾添加一个或更多元素,并返回新的长度
 
属性
- length:数组的长度
 
特点
- 在JS中,数组元素的类型是可变的
 - 在JS中,数组的长度是可变的
 
Boolean
Date日期对象
创建:
1
var date = new Date();
方法:
- toLocaleString();返回当前date对象对应的时间本地字符串格式
 - getTime():获取毫秒值。返回当前日期对象描述的时间到1970年1月1日0点的毫秒值差
 
Math对象
- 创建:Math对象不用创建,直接使用。
Math.方法名(); 方法
- random():返回 0 ~ 1 之间的随机数。 含0不含1
 - ceil():对数进行上舍入。
 - floor():对数进行下舍入。
 - round():把数四舍五入为最接近的整数。
 
属性
- PI
 
- 创建:Math对象不用创建,直接使用。
 Number
- String
 RegExp正则表达式对象
正则表达式:定义字符串的组成规则
单个字符:
[]如:
[a][ab][a-zA-Z0-9_]- 特殊符号代表特殊含义的单个字符:
\d:单个数字字符 [0-9]\w:单个单词字符[a-zA-Z0-9_]
 
- 特殊符号代表特殊含义的单个字符:
 量词符号
?:表示出现0次或1次*:表示出现0次或多次+:出现1次或多次{m,n}:表示 m<= 数量 <= n- m如果缺省: {,n}:最多n次
 - n如果缺省:{m,} 最少m次
 
开始结束符号
^:开始$:结束
正则对象
创建
1
2
3
4
5var reg = new RegExp("正则表达式")//引号里面的字符串需要转义符\
var reg = /正则表达式/;
//eg
var reg1 = new RegExp("^\\w{6,12}$");
var reg2 = /^\w{6,12}$/;方法
- test(参数):验证指定的字符串是否符合正则定义的规范
 
Global全局对象
- 特点:Global中封装的方法不需要对象就可以直接调用。方法名();
 方法:
encodeURI():url编码decodeURI():url解码1
2
3
4
5var str1 = "乃木坂";
var encode = encodeURI(str1);//编码
document.write(encode+'<br>');//%E4%B9%83%E6%9C%A8%E5%9D%82
var str2 = decodeURI(encode)//解码
document.write(str2+'<br>');
- `encodeURIComponent()`:url编码,编码的字符更多
- `decodeURIComponent()`:url解码
- `parseInt()`:将字符串转为数字
    > 逐一判断每一个字符是否是数字,直到不是数字为止,将前边数字部分转为number
- `isNaN()`:判断一个值是否是NaN
    > NaN六亲不认,连自己都不认。NaN参与的==比较全部问false
- `eval()`:将JavaScript 字符串,并把它作为脚本代码来执行。
BOM
- 概念:Browser Object Model 浏览器对象模型。将浏览器的各个组成部分封装成对象
 组成:
- Window:窗口对象
 - Navigator:浏览器对象
 - Screen:显示器屏幕对象
 - History:历史记录对象
 - Location:地址栏对象
 
Window窗口对象
- 创建
 方法
与弹出框有关的方法
alert():显示带有一段消息和一个确认按钮的警告框。confirm():显示带有一段消息以及确认按钮和取消按钮的对话框。- 确定:返回true
 - 取消:返回false
 
prompt():显示可提示用户输入的对话框。- 返回值:获取用户输入的值
 
与打开关闭有关的方法
close():关闭浏览器窗口。谁调用,谁被关闭open():打开一个新的浏览器窗口。返回新的Window对象
与定时器有关的方法
setTimeout(方法对象,毫秒值):在指定的毫秒数后调用函数或计算表达式- 参数:js代码或者方法对象,毫秒值
 - 返回值:唯一标识,用于取消定时器
 
clearTimeout(id):取消由setTimeout()方法设置的timeoutsetInterval(方法对象,毫秒值):按照指定的周期(以毫秒计)来调用函数或计算表达式。clearInterval(id):取消由 setInterval() 设置的 timeout。
属性
获取其他BOM对象
- history
 - location
 - Navigator
 - Screen
 
获取DOM对象
- documet:
window.document可简写document 
- documet:
 
特点
- Window对象不需要创建可以直接使用。
window.方法名() - window引用可以省略。
方法名() 
- Window对象不需要创建可以直接使用。
 
Location地址栏对象
创建
window.locationlocation
方法
reload():重新加载当前文档。刷新
属性
href:设置或返回完整的 URL。
History历史记录对象
- 创建
- window.history
 - history
 
 - 方法
back():加载 history 列表中的前一个 URL。forward():加载 history 列表中的下一个 URL。go(参数):加载 history 列表中的某个具体页面。- 正数:前进几个历史记录
 - 负数:后退几个历史记录
 
 - 属性
- length:返回当前窗口历史列表中的 URL 数量。
 
 
- 创建
 
DOM
- 概念:Document Object Model文档对象模型。将标记语言文档的各个组成部分,封装成对象,可以使用这些对象,对标记语言文档进行CRUD动态操作(文档->dom树)
 - 功能:控制html文档的内容
 W3C DOM标准被分为3个不同的部分
核心DOM:正对任何结构化文档的标准模型
- Document:文档对象
 - ElementL:元素对象
 - Attribute:属性对象
 - Text:文本对象
 - Comment:注释对象
 - Node:节点对象,上述5个对象的父对象
 
XML DOM:针对XML文档的标准模型
- HTML DOM:针对HTML文档的标准模型
 
核心DOM
Document:文档对象
创建(获取):在html DOM模型中可以使用window对象来获取
- window.document
 - document
 
方法
获取Element对象
getElementById():根据id属性值获取元素对象。id属性值一般唯一。getElementsByTagName():根据元素名称获取元素对象们。返回值是一个数组getElementsByClassName():根据class属性值获取元素对象们。返回值是一个数组。getElementsByName():根据name属性值获取元素对象们。返回值是一个数组
创建其他DOM对象
createAttribute(name)createComment()createElement()createTextNode()
属性
Element:元素对象
获取:通过document对象来获取
- window.document.getElementById()
 - document.getElementById()
 
方法
- removeAttribute():删除属性
 - setAttribute():设置属性
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18<a>点我进入百度</a>
<input type="button" id="btn1" value="快点我一下">
<input type="button" id="btn2" value="点我删除">
<script>
/*设置Element对象属性*/
var btn1 = document.getElementById("btn1");
btn1.onclick = function(){
var ele_a = document.getElementsByTagName("a")[0];
ele_a.setAttribute("href","https://www.baidu.com");
}
/*删除Element对象属性*/
var btn2 = document.getElementById("btn2");
btn2.onclick = function(){
var ele_a = document.getElementsByTagName("a")[0];
ele_a.removeAttribute("href");
}
</script>
Node:节点对象,其他5个对象的父对象
- 特点:所有DOM对象都可以被认为是一个节点
 方法:
CRUD DOM树
appendChild():向节点的子节点列表的结尾添加新的子节点removeChild():删除(并返回)当前节点的指定子节点replaceChild():用新节点替换一个子节点
属性
- parantNode:返回节点的父亲节点
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16<script>
/*删除子节点*/
var ele_a = document.getElementById("del");
ele_a.onclick = function(){
var div1 = document.getElementById("div1");
div1.removeChild(div2);
};
/*添加子节点*/
var div3 = document.createElement("div");
div3.setAttribute("id","div3");
var ele_b = document.getElementById("add");
ele_b.onclick = function(){
var div1 = document.getElementById("div1");
div1.append(div3);
}
</script>
HTML DOM
- 标签体的设置和获取:
innerHTML - 使用html元素对象的属性
 控制元素样式
使用元素的
style属性来设置1
2
3
4
5//修改样式方式1
div1.style.border = "1px solid red";
div1.style.width = "200px";
//font-size--> fontSize
div1.style.fontSize = "20px";提前定义好类选择器的样式,通过元素的
className属性来设置其class属性值
事件监听机制
概念:某些组件被执行了某些操作后,会触发某些代码的执行
- 事件:某些操作。如:单击、双击
 - 事件源:组件。如:按钮、文本输入框
 - 监听器:代码
 - 注册监听:将事件、事件源、监听器结合在一起。当事件源上发生了某个事件,则触发执行某个监听器代码。
 
常见事件:
点击事件
onclick:单击事件ondbclick:双击事件
焦点事件
onblur:失去焦点onfocus:元素获得焦点
加载事件
onload:一张页面或一幅图像完成加载
鼠标事件
onmousedown:鼠标按键被按下onmouseup:鼠标按键被松开onmousemove:鼠标被移动onmouseover:鼠标移到某元素之上onmouseout:鼠标从某元素移开
键盘事件
onkeydown:某个键盘按键被按下onkeyup:某个键盘按键被松开onkeypress:某个键盘按键被按下并松开
选择和改变
onchange:域的内容被改变onselect:文本被选中
表单事件
onsubmit:提交按钮被点击(可以阻止表单的提交。方法返回false则表单被阻止提交)onreset:重置按钮被点击
绑定事件:
直接在html标签上,指定事件的属性(操作),属性值就是js代码
onclick:单击事件
通过js获取元素对象,指定事件属性,设置一个函数