前端知识
前端知识
web服务的本质:
基于B/S网络架构,浏览器和服务端的交互
浏览器发送请求,服务端接收请求,服务端响应请求,服务端吧HTML文件内容发给浏览器,浏览器渲染页面
发送请求通过OSI网络七层模型:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层
一、HTML介绍
html是超文本标记语言,用于创建网页的标记语言
本质是浏览器能识别的规则,不过容易出现浏览器的兼容问题导致渲染效果不同
网页文件的拓展名:.html或htm
注:html不是编程语言,只是一种标记语言;标记语言是不存在逻辑的
1、html文档结构
html文件的创建:
在pycharm中创建html文件,找到html文件直接创建
在其它编译软件中创建html文件,和在pycharm中类似
手动创建就先先创建一个.txt文件,然后把文件后缀名改成.html文件,然后在文件中写入固定格式
1.<!DOCTYPE html>声明文件为html5文档
2.<html></html>是文档的开始标记和结束标记。是HTML页面的根元素,在它们之间是文档的头部(head)和主体(body)
3.<head></head>定义了HTML文档的开头部分,他们之间的内容不会在浏览器的窗口直接显示。包含了文档的元(meta)数据,配置信息等,是给浏览器的用的,用户看到的直接效果是body里面写的。
4.<title></title>定义了网页标题,在浏览器的标题栏显示。
5.<body></body>之间的文本是可见的网页主体内容
注:在中文网页需要使用<meta charset="utf-8">声明编码,否则会出现乱码。有些网站的默认编码是gbk,所以把utf-8改成gbk即可
2、html标签格式
html的标签格式是严格封闭的
html的标签是成对出现的
全封闭标签
标签的开始是尖括号<>加关键字
标签的结尾是尖括号和斜杠</>加关键字
例:<p></p>、<div></div>
这种标签叫全封闭标签
自封闭标签
只有单独的前面部分
例:<img>、<hr>、<br>
全封闭标签还有另一种写法,就是在前半部分的>前面加一个斜杠
例:<span />
3、html常用标签
<title></title>:定义网页标题
<style></style>:定义内部样式
<script></script>:引入js代码或引入外部js文件
<link />:引入外部样式文件
<meta/>:定义网页原信息
meta标签的三个参数
name="keywords":搜索关键字
name="description":显示栏后面的介绍内容
http-equiv="refresh" content="2;URL=https://www.oldboyedu.com":在2秒后页面自动跳转到百度
<meta name="keywords" content="30期">
<meta name="description" content="体彩">
<meta http-equiv="refresh" content="2;URL=https://www.oldboyedu.com">
4、浏览器的内核
浏览器内核:
浏览器 内核
IE trident
chrome blink
火狐 gecko
Safari webkit
注:浏览器内核是浏览器采用的渲染引擎,宣言引擎决定了浏览器如何显示网页内容以及页面的格式信息。渲染引擎也是兼容性问题出现的根本原因
二、body内常用的标签
(1)块级标签(行外标签):块级标签单独用页面一快空间,单独占用一行空间可设置宽度和高度
(2)内联标签(行内标签):内联标签不会单独占用一块空间,不能单独占用一行空间无法设置宽度和高度
内联标签
<b>加粗</b>
<i>斜体</i>
<u>下划线</u>
<s>删除</s>
块级标签
<p>段落标签</p>
<h1>标题1</h1>
<h2>标题2</h2>
<h3>标题3</h3>
<h4>标题4</h4>
<h5>标题5</h5>
<h6>标题6</h6>
<br>换行
<hr>线
(3)特殊字符
空格 | |
> | > |
< | < |
& | & |
¥ | ¥ |
版权标识符() | © |
注册(®) | ® |
(4)div标签:div标签是块级标签,通过块级标签可以对块以极快内的元素进行样式的修改与设定
(5)span标签:span标签是内联标签,可进行针对段落的微调与设定
但要注意div与span使用时的嵌套关系,div内可多层嵌套使用div,也可使用span,但是span内不能嵌套span或者div等块级标签
(6)img标签:超链接标签;所谓的超链接是指从一个网页指向一个目标的连接关系,这个目标可以是另一个网页,也可以是相同网页上的不同位置,还可以是一个图片,一个电子邮件地址,一个文件,甚至是一个应用程序。
<a href="http://www.oldboyedu.com" target="_blank" >点我</a>
_blank:表示以新页面打开链接
_self:表示在当前标签页中打开目标网页
(7)列表
无序列表
type属性:
disc(实心圆点,默认值)
circle(空心圆圈)
square(实心方块)
none(无样式)
有序列表
type属性:start是从数字几开始
1数字列表,默认值
A 大写字母
a 小写字母
Ⅰ大写罗马
ⅰ小写罗马
无序列表
<ul type="disc">
<li></li>
</ul>
有序列表
<ol>
<li></li>
</ol>
标题列表
<dl>
<dt></dt>
<dd></dd>
</dl>
(8)表格
表格是一个二维数据空间,一个表格由若干行组成,一个行又有若干单元格组成,单元格里可以包含文字、列表、图案、表单、数字符号、预置文本和其它的表格等内容。
表格最重要的目的是显示表格类数据。表格类数据是指最适合组织为表格格式(即按行和列组织)的数据。
表格的基本结构:
<table border='1'>
<thead> #标题部分
<tr> #一行
<th></th> #一个单元格,自动加粗
</tr>
</thead>
<tbody> #内容部分
<tr> #一行
<td></td> #一个单元格
</tr>
</tbody>
</table>
属性:
border: 表格边框.
cellpadding: 内边距 (内边框和内容的距离)
cellspacing: 外边距.(内外边框的距离)
width: 像素 百分比.(最好通过css来设置长宽)
rowspan: 单元格竖跨多少行
colspan: 单元格横跨多少列(即合并单元格)
(9)input标签
type属性 | 表现形式 | 代码 |
---|---|---|
text | 单行输入文本 | <input type=text" /> |
password | 密码输入框(不显示明文) | <input type="password" /> |
date | 日期输入框 | <input type="date" /> |
checkbox | 复选框 | <input type="checkbox" checked="checked" name='x' /> |
radio | 单选框 | <input type="radio" name='x' /> |
submit | 提交按钮 | <input type="submit" value="提交" /> #发送浏览器上输入标签中的内容,配合form表单使用,页面会刷新 |
reset | 重置按钮 | <input type="reset" value="重置" /> #页面不会刷新,将所有输入的内容清空 |
button | 普通按钮 | <input type="button" value="普通按钮" /> |
hidden | 隐藏输入框 | <input type="hidden" /> |
file | 文本选择框 | <input type="file" /> (等学了form表单之后再学这个) |
属性说明:
name:表单提交时的“键”,注意和id的区别
value:表单提交时对应项的值
type="button", "reset", "submit"时,为按钮上显示的文本年内容
type="text","password","hidden"时,为输入框的初始值
type="checkbox", "radio", "file",为输入相关联的值
checked:radio和checkbox默认被选中的项
readonly:text和password设置只读
disabled:所有input均适用
(10)select标签
<select name="city" id="city">
<option value="1"></option>
<option selected="selected" value="2"></option> #默认选中,当属性和值相同时,可以简写一个selected就行了
</select>
属性说明:
multiple:布尔属性,设置后为多选下拉框,否则默认单选
disabled:禁用
selected:默认选中该项
value:定义提交时的选项值
(11)label标签
定义:
说明:label 元素不会向用户呈现任何特殊效果。但是点击label标签里面的文本,那么和他关联的input标签就获得了光标,让你输入内容;<label> 标签的 for 属性值应当与相关元素的 id 属性值相同。
<label for="username">用户名</label> # 只能是id属性
<input type="text" id="username" name="username">
(12)textarea多行文本
可设置是否允许手动拉伸:resize: none;
<textarea name="memo" id="memo" cols="30" rows="10">
</textarea>
属性说明:
name:名称
rows:行数 #相当于文本框高度设置
cols:列数 #相当于文本框长度设置
disabled:禁用
maxlength:显示字符数,例如:maxlength='10' 最多输入十个字符
(13)form表单
<from action="http://127.0.0.1:8000" method=""></form>
action属性:指定提交路径
method属性:提交方式
form表单会将form表单里面的数据全部提交到指定路径
三、CSS使用
1、css
css的文件的引入方式
# 第一种引入方式
head标签中引入
head标签中引入
<style>
/* 选择器{css属性名称:属性值;css属性名称:属性值;} */
div{
/* css注释 */
width: 200px;
height: 200px;
background-color: red;
}
</style>
# 第二种引入方式
外部文件引入 工作中常用的
创建一个css文件,stylesheet文件,比如test.css文件
里面写上以下代码
div{
/* css注释 */
width: 200px;
height: 200px;
background-color: red;
}
在想使用这些css样式的html文件的head标签中写上下面的内容
<link rel="stylesheet" href="test.css"> href对应的是文件路径
# 第三种引入方式
内联样式:
<div style="background-color: red;height: 100px;width: 100px;"></div>
2、css选择器
基本选择器:元素选择器、id选择器、类选择器
属性选择器、后代选择器、组合选择器(通过逗号连接)
(1)元素选择器
div{width:100px;}
标签名称{css属性:值}
(2)id选择器
html示例代码:
<div id="d1">
</div>
css写法:
#d1{
background-color: green;
width: 100px;
height: 100px;
}
(3)类选择器
html代码:
<div id="d1" class="c1">
李晨浩
</div>
<div id="d2" class="c2">
李海煜
</div>
<div id="d3" class="c1">
张建志
</div>
css写法
.c1{
background-color: green;
width: 100px;
height: 100px;
}
(4)属性选择器
HTML代码
<div id="d1" class="c1" xx="ss">
李晨浩
</div>
<div id="d2" class="c2" xx="kk">
李海煜
</div>
css写法:
[xx]{ 属性查找
background-color: green;
width: 100px;
height: 200px;
}
[xx='ss']{ 属性带属性值查找
background-color: green;
width: 100px;
height: 200px;
}
(5)后代选择器
html代码示例:
<div id="d1" class="c1" xx="ss">
<span>
<a href="http://www.chenhao.com">李晨浩</a>
</span>
</div>
<div id="d2" class="c2" xx="kk">
<a href="http://www.chenhao.com">李海煜</a>
</div>
<div id="d3" class="c1">
张建志
</div>
<a href="http://www.chenhao.com">xxxxxxx</a>
css代码:
div a{
color:orange; /* 字体颜色 */
}
(6)组合选择器(通过逗号连接)
html代码
<div id="d1" class="c1" xx="ss">
<span>
<a href="http://www.chenhao.com">李晨浩</a>
</span>
<span>
<span>xxx222</span>
</span>
</div>
<div id="d2" class="c2" xx="kk">
<a href="http://www.chenhao.com">李海煜</a>
</div>
<div id="d3" class="c1">
<a href="">张建志</a>
</div>
<a href="http://www.chenhao.com">xxxxxxx</a>
<span>官人,你好!</span>
css代码: 注意:a标签字体颜色设置,必须找到a标签才能设置
#d1 a,#d3 a{
background-color: pink;
color:yellow;
}
3、css样式
高度宽度、字体、字体格式、颜色、背景、边框、盒子模型、内边距、外边距、display属性、浮动、伪元素选择器、伪类选择器、文字装饰、定位position、选择器优先级
(1)高度宽度
html代码:
<div>
div1
</div>
<span>span1</span>
css写法:
div{
height: 100px;
width: 100px;
background-color: pink;
}
span{
height: 100px;
width: 100px;
background-color: green;
}
width: 50%; 宽度高度可以设置百分比,会按照父级标签的高度宽度来计算
(2)字体
html代码:
<div>
窗前明月光,地上鞋三双!
</div>
css写法:
font-size: 20px; /* 默认字体大小是16px */
color:green; /* 字体颜色 */
/*font-family: '楷体','宋体'; !* 字体格式 *!*/
font-weight: 400; /* 字体粗细 100-900,默认是400 */
(3)字体格式
html代码:
<div>
只身赴宴鸡毛装!!!
</div>
css代码:
height: 100px;
width: 200px;
background-color: yellow;
text-align: center; 水平居中
/*text-align: right;*/
line-height: 100px; 和height高度相同,标签文本垂直居中
(4)颜色
三种方式:
英文单词:red;
十六进制: #ff746d;
rgb: rgb(155, 255, 236);
带透明度的: rgba(255, 0, 0,0.3); 单纯的就是颜色透明度
标签透明度:opacity: 0.3; 0到1的数字,这是整个标签的透明度
(5)背景
html代码:
<div class="c1">
</div>
css写法:
/*background-color: #ff746d;*/
/*background-color: rgb(155, 255, 236);*/
/*background-image: url("fage.png");*/ url写图片路径,也可以是网络地址路径
/*background-repeat: no-repeat;*/
/*background-repeat: repeat-y;*/
/*background-position: right top;*/
/*background-position: 100px 50px;*/
/* 简写方式 */
background: #ff0000 url("fage.png") no-repeat right bottom;
(6)边框
html代码
<div>
都是同学装鸡毛!
</div>
css写法:
/* 边框简写方式,对四个边框进行设置 */
/*border:1px solid red;*/
/*border-left: 1px solid green;*/
/*border-top: 1px solid blue;*/
border-width: 5px; 边框宽度
border-style: dashed; 边框样式
border-color: aqua; 边框颜色
(7)盒子模型
占用空间大小
margin: 外边距 距离其他标签或者自己父级标签的距离
padding: 内边距 内容和边框之间的距离
border: 边框
content: 内容部分 设置的width和height
(8)内边距
html代码:
<div>
英姿飒爽雄鸡装,飞上枝头变凤凰!
</div>
css写法:
width: 200px;
height: 100px;
border: 4px solid red;
/*padding: 6px 8px;*/
/*padding: 4px 2px 6px 8px;*/
/*padding-left: 20px;*/
/*padding-top: 20px;*/
/*padding-right: 20px;*/
/*padding-bottom: 20px;*/
(9)外边距
html代码:
<div>
英姿飒爽雄鸡装,飞上枝头变凤凰!
</div>
<div class="c1">
<div class="c2">
</div>
</div>
css写法:
.c1{
background-color: red;
height: 100px;
width: 100px;
/*margin-left: -1000px;*/
/*margin: 10px 15px;*/
}
.c2{
background-color: green;
height: 20px;
width: 20px;
/*margin: 10px 15px;*/
margin-left: 20px;
}
(10)display属性
示例:
html代码:
<span>
我是span标签
</span>
<div class="c1">
鹅鹅鹅,曲项向天歌!
</div>
<div class="c2">
拔毛烧开水,铁锅炖大鹅!
</div>
css写法:
span{
/*display: block;*/
}
.c1{
background-color: red;
height: 100px;
width: 100px;
/*display: inline;*/
/*display: inline-block;*/
display: none;
}
.c2{
background-color: green;
height: 100px;
width: 100px;
}
display的几个值:
inline: 将块级标签变成了内联标签
block:将内联标签变成块级标签
inline-block: 同时具备内联标签和块级标签的属性,也就是不独占一行,但是可以设置高度宽度
none: 设置标签隐藏
(11)浮动
浮动的元素,不独占一行,并且可以设置高度宽度
html代码
<div class="cc">
<!--<div>吟诗作对</div>-->
<div class="c1"></div>
<div class="c2"></div>
</div>
<div class="c3"></div>
css样式
body{
margin: 0;
}
.c1{
background-color: red;
height: 100px;
width: 200px;
float: left;
}
.c2{
background-color: brown;
height: 100px;
width: 200px;
float: right;
}
.c3{
background-color: pink;
height: 100px;
width: 100%;
}
浮动,造成父级标签塌陷的问题,没有高度了
解决父级标签塌陷问题:
方式1:
给父级标签加高度
方式2:
清除浮动:clear属性
方式3: 常用
.clearfix:after{
content: '';
display: block;
clear: both;
}
html代码:
<div class="cc clearfix">
<!--<div>吟诗作对</div>-->
<div class="c1"></div>
<div class="c2"></div>
</div>
<div class="c3"></div>
方式4: 给父级标签css属性设置overfloat:hidden
(12)伪元素选择器
html代码:
<div>
吟诗作对!
</div>
css写法
div{
background-color: pink;
height: 100px;
width: 200px;
}
div:after{
content: '?';
color:white;
}
(13)伪类选择器
hover和pointer
html代码
<div class="c1">
</div>
css写法
.c1{
background-color: red;
height: 300px;
width: 300px;
}
.c1:hover{
/*background-color: green;*/
background-image: url("111.png");
cursor: pointer;
}
(14)文字装饰
a{
text-decoration: none; 去除下划线
}
(15)定位position
static 静态定位,也就是标签默认,html文档的默认效果
relative: 相对定位,按照自己原来的位置进行移动
absolute: 绝对定位,按照父级标签或者祖先辈儿标签设置了相对定位的标签位置进行移动,如果没有找到相对定位标签,会找到整个文档的位置进行移动
fixed: 固定定位, 按照浏览器窗口的位置进行移动
示例:
html代码
<div class="cc">
<div class="c1"></div>
<div class="c2"></div>
</div>
<div class="c3"></div>
css写法:
body{
margin: 0;
}
.c1{
background-color: red;
height: 100px;
width:100px;
}
.c2{
background-color: green;
height: 100px;
width:100px;
/*position: relative; !* 相对定位 *!*/
/*left:100px;*/
/*top:-100px;*/
/*bottom:*/
/*right:*/
position: absolute;
top: 20px;
left: 80px;
}
.c3{
background-color: purple;
height: 100px;
width:200px;
}
.cc{
margin-top: 200px;
position: relative;
}
固定定位示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
body{
margin: 0;
}
.c1{
background-color: red;
height: 1000px;
width: 800px;
}
.c2{
background-color: green;
height: 1000px;
width: 800px;
}
.c3{
background-color: blue;
height: 1000px;
width: 800px;
}
.s1{
position: fixed;
left: 40px;
bottom: 20px;
height: 40px;
width: 60px;
background-color: aqua;
line-height: 40px;
text-align: center;
}
.s1 a{
color:white;
text-decoration: none;
font-size: 12px;
}
</style>
</head>
<body>
<div id="top">这是顶部</div>
<div class="c1"></div>
<div class="c2"></div>
<div class="c3"></div>
<span class="s1">
<a href="">返回顶部</a>
</span>
</body>
</html>
(16)选择器优先级
html代码:
<div class="c1">
这是c1的直属文本
<div id="d1" class="c2">
<!--<span class="c3" id="d3" style="color:black;">-->
<span class="c3 c4">
这是c1的儿子c2标签的文本
</span>
</div>
</div>
css代码
div{
color:red;
}
/* css属性有继承的概念 权重0*/
/* 标签(元素)选择器 权重1*/
/* 类选择器 权重10*/
/* id选择器 权重100*/
/* 内联样式 权重1000*/
<div style='color:red;'></div>
/* color:green!important; 无敌! */
/* 如果优先级相同,按照后面的为准 */
别忘了,class属性的值可以写多个
/*#d3{*/
/*color:yellow;*/
/*}*/
.c3{
color:blue;
}
/*span{*/
/*color:green!important;*/
/*}*/
.c4{
color:yellow;
}
四、JavaScript
注:javascript和java毫无关系
js(简称)--javascript直译型脚本语言
javascript的标准是ECMAscript,截至 2012 年,所有浏览器都完整的支持ECMAScript 5.1,旧版本的浏览器至少支持ECMAScript 3 标准。
1、JavaScript的三大组成部分
ECMAScript,文档对象模型(DOM),浏览器对象模型(BOM)
ECMAScript:描述了语言的语法和基本对象,是JavaScript的核心
DOM:描述处理网页内容的方法和接口
BOM:描述与浏览器进行交互的方法和接口
ECMAscript5 和ECMAscript56
2、js的引入方式
两个大方面:直接写入html文件中;或者以script文件方式导入
直接写入html文件中三种方式:
1.直接在html的head标签中创建script标签:<script></script>
2.在html文件的body中创建script标签:<script></script>
3.在html文件的尾部的body和html之间创建script标签:<script></script>
也能在最下面的html外面创建,虽然不报错,但是不规范
以script文件方式导入的三种方式:
1.直接在html的head标签中引入script文件:<script src="js文件路径"></script>
2.在html文件的body中引入script文件:<script src="js文件路径"></script>
3.在html文件的尾部的body和html之间引入script文件:<script src="js文件路径"></script>
JavaScript文件的后缀名是.js
3、js的变量与数据类型
(1)变量
1.var:var定义的变量作用于全局;ES6之前没有块级作用域,只有全局作用域和函数作用域。
var a = 10; 变量定义 var 变量名;
var b; 只声明,没有赋值的情况下,b的值为undefined
2.let:let定义的变量制作用于函数块内部;只在let命令所在的代码块内有效,即let用于声明一个块级作用域的变量;ES6语法里面新增的
let a = 10;
3.count:常量的声明
(2)数据类型
-
number类型(整数,浮点数)
查看数据类型:typeof (参数);或者typeof 参数;
var n = 11;
var n2 = 11.11;
js代码注释 // js代码
查看数据类型 typeof 变量名;
typeof n; -- number类型
变量声明,但没有赋值的时候,变量的值为undefined
-
string类型(字符串)
定义方式有两种:直接定义和实例化
直接定义的typeof类型是string;实例化的typeof类型是object
// 1、定义:
var a = 'alexsb';
var a = new String('ss'); typeof a; -- "object"
// 2、字符串的操作方式
var s = '诱色可餐徐茂洁';
// 索引取值: s[1] -- '色'
// 移除两端空格: s.trim(); s.trimLeft(); s.trimRight();
var s2 = ' hello ';
s2
" hello "
s2.trimLeft();
"hello "
s2.trimRight();
" hello"
s2.trim();
"hello"
// 索引取值
var value = name.charAt(index) // 根据索引获取字符
示例: var s = 'hello'; -- s.charAt(4); -- 'o'
// 切片
var value = name.substring(start,end) // 根据索引获取子序列,切片
示例: s.substring(1,3); -- "el" 左包右不包
// 字符串拼接: +
s1
"hello world"
s2
" hello "
s1 + s2
"hello world hello "
- 布尔类型(boolean类型)
var a = true;
var b = false;
typeof a; -- "boolean"
- undefined和null类型
undefined 变量声明了,但是没有赋值,此时这个变量是undefined类型
null : 变量不用了,就可以给变量赋值为null, --- object类型 -- 和python的None一样
- 数组(array)
var name = [11,22,33]; typeof name; -- "object"
name.length -- 得到数组长度
数组常用方法:
names[0] // 索引,索引也是从0开始的
names.push(ele) // 尾部追加元素
示例:a.push('xx'); -- [11, 22, 33, "xx"]
var ele = names.obj.pop() // 尾部移除一个元素
示例:a.pop(); -- [11, 22, 33]
names.unshift(ele) // 头部插入元素
示例:a.unshift('ssss'); -- ["ssss", 11, 22, 33]
var ele = obj.shift() // 头部移除一个元素
示例:a.shift(); -- [11, 22, 33]
names.splice(index,0,ele) // 在指定索引位置插入元素
names.splice(从哪删(索引),删几个(个数),删除位置替换的新元素(可不写,可写多个))
names.splice(index,1,ele) // 指定索引位置替换元素
names.splice(index,1) // 指定位置删除元素
示例: a.splice(1,2) -- [11, 22, 33]
a.splice(1,1,'xx','oo','asdf'); -- [11, "xx", "oo", "asdf", 33]
names.slice(start,end) // 切片
示例:a.slice(1,3);-- [22, 33]
names.reverse() // 原数组反转
示例:a.reverse(); -- [44, 33, 22, 11]
names.join(sep) // 将数组元素连接起来以构建一个字符串
示例: var a = ['ni','hao','ma',18]
a.join('+'); -- "ni+hao+ma+18"
names.concat(val,..) // 连接数组
示例: var a = [11,22]; var b = ['aa','bb']
var c = a.concat(b); c -- [11, 22, "aa", "bb"]
names.sort() // 对原数组进行排序
很尬!
需要自己定义规则:
var l4 = [11.11,2,4.5,33];
function compare(a,b){
return a - b; 当大于0时,两个数据换位置
};
使用: l4.sort(compare); 升序排列
- 自定义对象(dict)
// 声明
info = {
name:'武沛齐',
"age":18
}
var a = {username:'xx',password:'123'}; //可以不加引号
typeof info;
"object"
// 常用方法
var val = info['name'] // 获取,通过键取值必须加引号,
info.name 也是可以的
info['age'] = 20 // 修改
info['gender'] = 'male' // 新增
delete info['age'] // 删除
4、流程控制
(1)if判断
if (a == 1){ //判断条件写在小括号里面,大括号里面写条件判断成功后的代码内容
console.log('1111');
}
else{
console.log('222');
}
(2)多条件判断
var a = 0;
if(a > 1){
// console.log('1111');
// var hhhh = document.getElementById('d1');
// hhhh.innerText = '彭于晏';
}else if(a<1){
console.log('2222');
}else {
console.log('3333');
}
(3)运算符
> < == != >= <= === !==
var a = 2;
var b = '2';
a == b; true 弱等于
a === b; false 强等于
a != b; false
a !== b; true
算数运算符
+ - * / % ++ --
++ 自增 1
-- 自减 1
var a = 2;
a++ 先执行逻辑 在+1
++a 先+1 在执行逻辑
简单示例:
if (++a === 4){
console.log('xxx');
}
else{
console.log('ooo');
};
(4)switch判断
var num = 200;
switch(num++){ 参数必须是数字或者得到数字的算式
case 10:
console.log('未成年');
break;
case 18:
console.log('成年');
break;
case 35:
console.log('油腻老男人');
break;
case 100:
console.log('....');
break;
#上面的case条件都不成立就执行default
default:
console.log('太大了');
};
(5)异常捕获
try{
console.log(xx);
}catch(e){
console.log(e);
}
// 不管有没有异常都会执行finally
finally{
console.log('sssss');
}
(6)for循环
for (var i=0;i<100;++i){
console.log(i);
};
循环数组
var d = [11,22,33];
for (var i in d){
if (d[i] === 22){
continue; //跳出本次循环
// break; // 结束循环
}
console.log(i,d[i]);
}
for (var i=0;i<d.length;i++){
console.log(i,d[i]);
};
循环自定义对象--python字典
for (var i in d){
console.log(i,d[i]); #不要用d.i来取值
}
(7)while循环
var a = 0;
while(a<5){
a++;
if (a===2){
continue;
}
console.log(a);
}
js的基础数据类型都有布尔值属性, []--false 0,{},'',undefined,null,NaN
字符串转数字:
var a = '11';
parseInt(a);
var a = '23abc';
parseInt(a); 23
var a = '11.11';
parseFloat(a) -- 转换为浮点型
var a = 'asdfabc';
parseInt(a); -- NaN -- not a number
typeof NaN; -- "number"
NaN === NaN; -- false
NaN == NaN; -- false
数字转字符串
var b = 20;
String(b);
(8)函数
- 普通函数
function f1(a,b){
return a+b;
}
执行: f1(1,2) -- 3
function f1(a,b){
return a,b;
};
f1(1,2);
不能返回多个值: 2
- 匿名函数
var a = function (a,b){
console.log('xxx');
}
var d = {'xx':'oo','f':function (a,b){
console.log('xxx');
}};
执行:d.f(1,2);
- 自执行函数
(function () {
alert('自执行函数!')
})();
(9)序列化
var d = {'a':'aa','b':18};
序列化:
var d_json = JSON.stringify(d); //python json.dumps(d);
反序列化:
d_json = "{"a":"aa","b":18}"
var reverse_json = JSON.parse(d_json); //python json.loads()
5、BOM对象
浏览器对象模型,描述与浏览器进行交互的方法和接口
(1)弹窗
alert();和confirm();
(2)window对象,全局BOM对象,是后面学的所有对象的原始对象
(3)location对象
location.href; 获取当前页面的地址
location.href = 'http://www.baidu.com'; 跳转到这个网址上
location.reload(); 刷新当前页面
(4)计时器
第一种:一段时间之后执行某个任务
设置:var t = setTimeout(function(){confirm('你满18岁了吗?')},5000);
var t = setTimeout("console.log('xxx')",1000);
t就是浏览器用来记录你的计时器的标识数字
清除:clearTimeout(t)
第二种:每隔一段时间执行某个任务
设置:var t = setInterval(function(){confirm('弹个框!!')},3000);
清除:clearInterval(t);
6、DOM对象
描述处理网页内容的方法和接口
(1)直接查 找选择器
按标签名查找: var divEle = document.getElementsByTagName('div');
按id值查找: var d1 = document.getElementById('d1');
按类值查找:var a = document.getElementsByClassName('c1');
html代码:
<div class="c1" id="d1"></div>
<div class="c1 c2" id="d2"></div>
css代码:
.c1{
background-color: green;
height: 100px;
width: 100px;
}
.c2{
background-color: red;
/*height: 100px;*/
/*width: 100px;*/
color:red;
}
var d2 = document.getElementsByClassName('c1');
d2.style.color = 'green';
报错:因为得到的是多个标签对象,会放到一个数组里面,也就是得到的d2是个标签数组对象,里面比普通数组多了一些其他的属性
VM1527:1 Uncaught TypeError: Cannot set property 'color' of undefined
at <anonymous>:1:16
所以需要循环来设置标签效果
for (var i in d2){console.log(d2[i])}; 直接循环数组不好,因为有其他属性干扰
VM1658:1 <div class="c1" id="d1" style="color: red;">div1</div>
VM1658:1 <div class="c1" id="d2">div2</div>
VM1658:1 2
VM1658:1 ƒ item() { [native code] }
VM1658:1 ƒ namedItem() { [native code] }
需要下面的方式进行循环
for (var i=0;i<d2.length;i++){console.log(i,d2[i])};
也可以通过索引取值
d2[0];
(2)间接查找选择器:
.nextElementSibling.style.color = 'red'; 找下一个兄弟标签,并改了色
找上一个兄弟:.previousElementSibling;
找第一个儿子:.firstElementChild;
找最后一个儿子:.lastElementChild;
找所有儿子,是一个数组:.children;
找到自己的父级标签:.parentElement;
(3)文本操作
innerText
获取文本:
var a = document.getElementById('jd')
a.innerText; 只获取文本内容
设置文本:
a.innerText = '<a href="">校花</a>';不能识别标签,单纯的文本内容显示
innerHTML
获取文本
var d = document.getElementsByClassName('c1')[0];
d.innerHTML; 获取的内容包含标签
设置文本:
d2.innerHTML = '<a href="">校花</a>'; 能够识别标签,生成标签效果
(4)value值操作
input标签
html:
<input type="text" name="username" id="username" >
示例:
var inp = document.getElementById('username'); 找到标签
inp.value; 获取值
inp.value = '200块!'; 修改值
(5)class类值操作
var div1 = document.getElementById('d1');
div1.classList; // 获取标签类值
div1.classList.add('c2'); // 添加类值
div1.classList.remove('c3'); // 删除类值
div1.classList.toggle('c3'); // 有就删除,没有就添加
var t = setInterval("div1.classList.toggle('c3')",1000); //定时器添加
(6)style样式
var div1 = document.getElementById('d1');
div1.style.color = 'green';
//当css属性名称有-的时候,需要去掉-,并且后面单词的首字母大写
div1.style.backgroundColor = 'green';
(7)label补充和button补充
label:id和name可以重复,可以内部使用input标签
<label >用户名:
<input type="text" name="username" id="username">
</label>
<label for="password">密码: </label>
<input type="password" name="password" id="password">
button:
普通按钮,没有提交效果
<input type="button">
<button type="button">注册</button>
下面两个能够提交form表单数据
<input type="submit" value='登录'>
<button type="submit">注册</button>
示例:
<!--<label for="username">用户名</label>-->
<form action="http://www.baidu.com">
<label>
用户名
<input type="text" id="username" name="username">
</label>
<!-- <input type="submit">-->
<!-- <input type="button" value="普通按钮">-->
<!-- <button type="submit">button提交</button> 默认type="submit",也可以触发提交数据的动作-->
<!-- <button type="button">button提交</button> type="button"普通按钮-->
</form>
<!--在form标签外面都是普通按钮-->
<input type="submit">
<button>xxx</button>
(8)日期对象
var timer = new Date(); //获取当前时间日期对象
timer.toLocaleString(); // 将日期时间对象转换为国人能够认识的时间日期字符串
下面的内容,目前作为了解:
//方法1:不指定参数
var d1 = new Date(); //获取当前时间
console.log(d1.toLocaleString()); //当前时间日期的字符串表示
//方法2:参数为日期字符串
var d2 = new Date("2004/3/20 11:12");
console.log(d2.toLocaleString());
var d3 = new Date("04/03/20 11:12"); #月/日/年(可以写成04/03/2020)
console.log(d3.toLocaleString());
//方法3:参数为毫秒数,了解一下就行
var d3 = new Date(5000);
console.log(d3.toLocaleString());
console.log(d3.toUTCString());
//方法4:参数为年月日小时分钟秒毫秒
var d4 = new Date(2004,2,20,11,12,0,300);
console.log(d4.toLocaleString()); //毫秒并不直接显示
常用方法
var d = new Date();
//getDate() 获取日
//getDay () 获取星期 ,数字表示(0-6),周日数字是0
//getMonth () 获取月(0-11,0表示1月,依次类推)
//getFullYear () 获取完整年份
//getHours () 获取小时
//getMinutes () 获取分钟
//getSeconds () 获取秒
//getMilliseconds () 获取毫秒
//getTime () 返回累计毫秒数(从1970/1/1午夜),时间戳
(9)事件
DOM中可以为标签设置事件,给指定标签绑定事件之后,只要对应事件被触发,就会执行对应代码。
常见事件
-
onclick
,单击时触发事件 -
ondblclick
,双击触发事件 -
onchange
,内容修改时触发事件 -
onfocus
,获取焦点时触发事件 -
onblur
,失去焦点触发事件修改下拉框触发change事件 <!DOCTYPE html> <html> <head> <meta charset='utf-8'/> <title>DOM学习</title> </head> <body> <select id="city" onchange="changeEvent(this);"> <option value="10">普通青年</option> <option value="20">文艺青年</option> <option value="30">二逼青年</option> </select> <script type="text/javascript"> function changeEvent(self) { console.log(self.value); } </script> </body> </html>
(10)事件绑定
事件绑定的两种方式
方式1
<div class="favor" onclick="doFavor(this);">赞</div>
function doFavor(self) {
...
}
方式2
<div class="favor">赞</div>
var dEle = document.getElementsByClassName('favor')
dEle.onclick = function(){
...
}
五、jQuery的使用
1、jQuery基本使用
(1)jQuery简介
- jQuery是一个简洁而快速的JavaScript库,可用于简化事件处理,HTML文档遍历,Ajax交互和动画,目的是让开发者更容易地在网站上使用JavaScript(将复杂的js操作封装的很简单)。
- 支持链式操作 :`$('.c1').addClass('c2').text('xxx').addClass('xxx').css({'color':'white'});`
- 在各大浏览器里面都兼容,不需要考虑兼容性问题
注:在使用ajax的时候由于jquery版本不同需要进行请求头等操作设置,依情况而定
(2)jQuery的引用
外部网址引入
<!--<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>-->
本地文件引入
<script src="jquery.js"></script> //jquery.js本地文件路径
注:jquery的引入是有顺序的,使用了或者调用的js文件中用了jquery的方法时,一定要把此文件放在jQuery.js文件的下面引入,否则会出现问题
(3)jquery的基本知识
var d1 = $('#d1'); -- jquery对象 -- jQuery.fn.init [div#d1]
var d = document.getElementById('d1'); -- 原生dom对象 -- <div id='d1'></div>
jquery对象和dom对象之前不能调用互相的方法
jquery对象和dom对象可以互相转换
d1[0] -- dom对象
$(d) -- jquery对象
2、选择器
id选择器、类选择器、元素选择器、组合选择器、层级选择器、属性选择器、表单选择器
(1)id选择器:$('#d1') -- 同css
(2)类选择器:$('.c1')
(3)元素选择器:$('标签名称') -- $('span')
(4)组合选择器
$('#d1,.c2')
示例:
html代码
<div id="d1"></div>
<div class="c2">
这是c2
</div>
css代码:
#d1,.c2{
background-color: red;
height: 100px;
width: 100px;
border-bottom: 1px solid black;
}
jquery代码:
$('#d1,.c2').css('background-color','green');
$('#d1,.c2')[1]; -- 索引为1的dom对象
$('#d1,.c2').eq(1); -- 索引为1 的jquery对象
(5)层级选择器:$("form input") 就是后代选择器 同css
(6)属性选择器
html代码:
<div class="c1" xx="oo">
这是啥!
</div>
css代码:
[xx]{
color:red;
}
input标签: type='xx' [type='xx']--对应的input标签
$('[xx]').css('color','green');
$('[xx="oo"]').css('color','pink');
jquery找到的所有标签对象,不需要循环就能设置相同的样式效果。
表单对象属性选择器
- :checked 找到被选中的input标签或者option标签
- :selected 找被选中的select标签中的option标签
- :disabled 找到被废弃(不可操作)的标签
- :enabled 找到可用标签
:checked 找到被选中的input标签或者option标签
:selected 找被选中的select标签中的option标签
示例:
<input type="radio" name="sex">女
<input type="radio" name="sex" checked>男
<input type="radio" name="sex">没准
爱好:
<input type="checkbox" name="hobby">喝酒
<input type="checkbox" name="hobby">抽烟
<input type="checkbox" name="hobby">约
城市:
<select name="city" id="s1">
<option value="1">东莞</option>
<option value="2" selected>惠州</option>
<option value="3">成都</option>
</select>
jquery写法
$(':checked');
$(':selected');
:disabled 找到被废弃的标签
:enabled 找到可用标签
示例:
用户名:<input type="text" name="username" disabled>
<input type="radio" name="sex">女
<input type="radio" name="sex" checked>男
<input type="radio" name="sex">没准
jquery写法
$(':disabled');
$(':enabled');
(7)表单选择器
$(":text") // 找到所有input标签
// $(":input") 找到所有input标签
// $(":password") 找到所有input且type=password的标签
// $(":radio") 找到所有input且type=radio的标签
// $(":checkbox") 找到所有input且type=checkbox的标签
html代码:
<form action="">
<input type="text" id="username">
<input type="text" id="username2">
<input type="password" id="pwd">
<input type="submit">
</form>
jquery代码:找到所有的type=text的input标签
$(':text');
3、筛选器
筛选方法:parent()、children()、next() 、prev()、siblings()、find() 找后代、first()和last() 和eq(索引值)、text() 和 html() 、class类值操作、val值操作
html代码
<ul>
<li>谢一峰</li>
<li class="c1">王子宇</li>
<li>孙波</li>
<li class="c2">石淦</li>
<li>
<span>白雪冰</span>
</li>
<li>方伯仁</li>
</ul>
(1)parent()、parents()、parentsUntil()
var c = $('.c1');
c.parent();
c.parents(); 直系的祖先辈
c.parentsUntil('body'); 往上找,直到找到body标签为止,不包含body标签
(2)children()
var u = $('ul');
u.children(); 找到所有儿子标签
u.children('.c1'); 找到符合.c1选择器的儿子标签
(3)next() 、nextAll()、nextUntil()
var c = $('.c1');
c.next();
nextAll(); 下面所有兄弟
c.nextUntil('.c2'); 下面到某个兄弟为止,不包含那个兄弟
(4)prev()、prevAll()、prevUntil()
var c = $('.c1');
c.prev();
c.prevAll(); 上面所有兄弟,注意顺序都是反的
c.prevUntil('.c1'); 上面到某个兄弟为止,不包含那个兄弟,注意顺序都是反的
(5)siblings()、siblings()
c.siblings(); 找到不包含自己的所有兄弟
c.siblings('.c1'); 筛选兄弟中有class类值为c1的标签
(6)find() 找后代
$('li').find('span'); 等同于css的 li span选择器
(7)first()和last() 和eq(索引值)
$('li').first(); 找所有li标签中的第一个
$('li').last(); 找所有li标签中的最后一个
$('li').eq(0); 按照索引取对应的那个标签,索引从0开始
$('li').eq(-1); 最后一个
(8)text() 和 html()
同js的innerText和innerHTML
取文本:
c.text(); 不带标签
c.html(); 带标签
设置文本:
c.text('文本');
c.html('文本'); -- 文本--"<a href=''>皇家赌场</a>"
(9)class类值操作
html代码
<div class="c1">
</div>
css代码:
.c1{
background-color: red;
height: 100px;
width: 100px;
}
.c2{
background-color: green;
}
jquery
$('div').addClass('c2');
$('div').removeClass('c2');
$('div').toggleClass('c2');
示例:
var t = setInterval("$('div').toggleClass('c2');",500);
(10)val值操作
示例:
html代码:
<input type="text" id="username">
<input type="radio" class="a1" name="sex" value="1">男
<input type="radio" class="a1" name="sex" value="2">女
<input type="checkbox" class="a2" name="hobby" value="1">抽烟
<input type="checkbox" class="a2" name="hobby" value="2">喝酒
<input type="checkbox" class="a2" name="hobby" value="3">烫头
<select name="city" id="s1">
<option value="1">北京</option>
<option value="2">上海</option>
<option value="3">深圳</option>
</select>
<select name="lover" id="s2" multiple>
<option value="1">波多</option>
<option value="2">苍井</option>
<option value="3">小泽</option>
</select>
jquery代码:
获取值:
文本输人框:$('#username').val();
单选radio框:$('.a1:checked').val(); #在.a1选择器的基础上在进行筛选
多选checkout框:$('.a2:checked').val()是不行的;需要循环取值,如下:
var d = $(':checkbox:checked');
for (var i=0;i<d.length;i++){
console.log(d.eq(i).val());
}
单选select框:$('#city').val();
多选select框:$('#lover').val();
设置值:
文本输入框:$('#username').val('you are my love');
单选radio框:$('.a1').val([2]); #注意内容必须是列表,写的是value属性对应的值
多选checkout框:$('.a2').val(['2','3']) #单选或者多选设置值的时候,值可以是字符串,可以是数字
单选select框:$('#city').val('1');
多选select框:$('#lover').val(['2','3'])
点击事件绑定
$('.c1').click(function () {
//$(this)表示的就是它自己
$(this).css('background-color','green');
// $('.c1').css('background-color','green');
})
4、标签的处理
(1)创建标签
添加标签: $('.c1').html('<a href="http://www.baidu.com">百度</a>'); 但是这个属于替换内容,将标签内原来的内容全部替换掉.
js
var a = document.createElement('a');
jquery:
$('<a>',{
text:'这还是个链接',
href:'http://www.baidu.com',
class:'link',
id:'baidu',
name:'baidu'
})
(2)empty清空标签
方式1:$('.c1').empty();
方式2:$('.c1').html(''); .text('')
(3)remove删除标签
$('.c1').remove();
(4)文档操作
1 标签内部的后面插入内容 append
html代码:
<div class="c1">
<h1>xx</h1>
</div>
方式1:
1. var a = document.createElement('a'); 创建标签
2. a.href = 'http://www.jd.com'; 添加属性
3. a.innerText = '京东'; 添加文本
$('.c1').append(a);
方式2: 常用
$('.c1').append('<a href="http://www.baidu.com">百度</a>');
2 标签内部的上面插入内容 prepend
$('.c1').prepend('<a href="http://www.baidu.com">百度</a>');
$('.c1').prepend('<h1>亚洲</h1>');
3 标签外部的下面插入内容 after
$('.c1').after('<h1>兄弟</h1>');
4 标签外部的上面插入内容 before
$('.c1').before('<h1>兄弟</h1>');
简单示例:
var s = $('<div>',{'class':'c2','text':'彭于晏'});
$('.c1').after(s);
(5)字符占位符${变量名}
var tr_str = `<tr><td><input type="checkbox"></td><td>${inp_name}</td><td>${inp_hobby}</td><td><button class="delete">删除</button></td></tr>`;
模板字符串,也叫做多行字符串
var username = '翼麟';
var aStr = `my name is ${username}`; -- f'{name}xxx';
结果:
"my name is 翼麟"
5、属性操作
(1)attr属性操作
原生js属性操作
获取属性对应的值:dEle.getAttribute('placeholder');
添加属性或修改属性 : dEle.setAttribute('xx','oo');
删除属性:dEle.removeAttribute('xx');
jquery属性操作
attr方法
添加或修改属性:
单个属性:$('#username').attr('xx','oo');
多个属性:$('#username').attr({'xx1':'oo1','xx2':'oo2'}); 记住这个就行了
查看属性
$('#username').attr('xx');
删除属性:
$('#username').removeAttr('placeholder');
这些属性操作针对的是自定义属性和标签自带属性,都可以通过attr来进行操作,但是有些特殊属性,通过attr来进行操作的时候,会导致操作失效,就他们几个:selected checked disabled enabled
(2)prop属性操作
selected checked disabled enabled
设置属性
$('#d1').prop('checked',true); 选中
$('#d1').prop('checked',false); 取消选中
查看属性
$('#d1').prop('checked'); true表示选中了,false表示未选中
(3)逻辑运算符
and &&
or ||
not !
示例:
true && false;
true || false;
!true;
6、克隆和事件
6.1、克隆
clone 克隆标签
clone(true) 克隆标签,包含事件
示例
$('#d1').clone()
$('#d1').clone(true)
6.2、事件
(1)事件的两种绑定方式
方式1:$('.c1').click(function(){})
$('.btn').click(function () {
var btn = $(this).clone(true);
$(this).after(btn);
})
方式2: on关键字进行绑定,第一个参数为事件名称,第二个参数是函数,事件要做的事情:$('.c1').on('click',function(){})
$('.btn').on('click',function () {
var btn = $(this).clone(true);
$(this).after(btn);
})
事件委托
$('.c1').on('click','子辈的标签选择器',function(){})
(2)事件冒泡
点击儿子标签会触发父级标签祖父标签等等的所有点击事件,这叫事件冒泡
html代码
<div class="c1">
<div class="c2"></div>
</div>
css代码
.c1{
border: 1px solid red;
height: 100px;
}
.c2{
border: 1px solid green;
height: 50px;
width: 50px;
}
jquery代码
$('.c1').click(function () {
alert('父级标签c1');
});
$('.c2').click(function () {
alert('儿子标签c2');
return false; // 阻止后续事件发生
});
$('.c2').click(function (e) {
alert('这是子标签');
// return false; 常用
return e.stopPropagation();
});
(3)事件委托
// 事件委托
$('tbody').on('click','.delete',function () {
// $(this) 还是你点击的那个按钮标签
$(this).parent().parent().remove(); // tr
});
(4)常用事件
focus和blur
html代码:
<input type="text" id="username">
<div class="c1"></div>
css代码:
.c1{
background-color: red;
height: 200px;
width: 200px;
}
.c2{
background-color: green;
}
// focus获取光标时触发的事件
$('#username').focus(function () {
$(this).css({'background-color':'yellow'});
$('.c1').addClass('c2');
});
// blur失去光标时触发的事件
$('#username').blur(function () {
$(this).css({'background-color':'white'});
$('.c1').removeClass('c2');
});
(5)change
域内容发生变化时触发的事件
$('select').change(function () {
// $('.c1').toggleClass('c2');
// console.log($(this));
// console.log($(this).options);
// console.log($(this).selectedIndex)
// console.log(this); //dom对象 $(this)jquery对象
// console.log(this.options);
// console.log(this.selectedIndex);
var option_text = this.options[this.selectedIndex].innerText;
console.log(option_text);
// if (option_text === '喝酒'){}
// 获取被选中的option标签的文本内容
// $(':selected').text();
});
(6)hover
鼠标悬浮事件
示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.c1{
background-color: red;
height: 200px;
width: 200px;
}
</style>
</head>
<body>
<div class="c1"></div>
</body>
<script src="jquery.js"></script>
<script>
$('.c1').hover(
// 鼠标进入时触发的事件
function(){
$('.c1').css({'background-color':'yellow'});
},
// 鼠标移出时触发的事件
function(){
$('.c1').css({'background-color':'blue'});
}
)
</script>
</html>