前端
前端HTML
HTML
web服务本质
浏览器和server的交互
import socket
server = socket.socket()
server.bind(('127.0.0.1',8848))
server.listen()
try:
conn,addr = server.accept()
print(conn.recv(1024).decode('utf-8'))
conn.send(b"HTTP/1,1 200 OK \r\n\r\n")
conn.send(b"hello")
except Exception as e:
print(e)
finally:
conn.close()
server.close()
向浏览器发请求 --> HTTP协议 --> 服务端接收请求 --> 服务端返回响应 --> 服务端把HTML文件内容发给浏览器 --> 浏览器渲染页面
*****web端的组成*****
HTML 一堆标签组成的内容 基础的排版和样式
css 描述了标签的样式
js 动态的效果
*****HTML是什么?*****
超文本标记语言(Hypertext Markup Language, HTML)是一种用于创建网页的标记语言
本质上是浏览器可识别的规则,我们按照规则写网页,浏览器根据规则渲染我们的网页。对于不同的浏览器,对同一个标签可能会有不同的解释。(兼容性问题)
*****标记*****
标记:所有内容都是包裹在标签中<> <>
标记(标签)分类:
双边标记 <body>(开始标签) </body>(闭合标签)
单边标记 <meta> 没有/的
HTML文档结构
<!DOCTYPE html>
<html lang="zh-CN"> #这个lang表示语言,zh-CN是中文的意思,就是说,你整个文档的内容以中文为主,如果以英文为主,就写成lang='en'
<head>
<meta charset="UTF-8">
<title>HTML文档结构</title> #网页标题
</head>
<body>
#内容部分
</body>
</html>
1.<!DOCTYPE html>声明为HTML5文档。
2.<html>、</html>是文档的开始标记和结束的标记。是HTML页面的根元素,在它们之间是文档的头部(head)和主体(body)。
3.<head>、</head>定义了HTML文档的开头部分。它们之间的内容不会在浏览器的文档窗口显示。包含了文档的元(meta)数据,配置信息等,是给浏览器看的,你看到的是在body标签里面写的。
4.<title>、</title>定义了网页标题,在浏览器标题栏显示。(修改一下title中的内容,然后看一下浏览器,你就会发现title是什么了)
5.<body>、</body>之间的文本是可见的网页主体内容。
<!--注释内容--> #找到一行内容ctrl+/就能注释,注释的内容不会在网页上显示出来
body常用标签和特殊符号
body标签
标题标签 <h1>标题内容<h1>....<h6>标题内容<h6>
标签分类:
块级标签(行外标签):独占一行,可以包含内敛标签和某些块级标签,div,p,h1-h6,hr,form
内敛标签(行内标签):不独占一行,不能包含块级标签,只能包含内敛标签 b,i,u,s,a,img,select,input,span,textarea
p标签(p标签内部不能包含块级标签和p标签)
#基本标签
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>HTML标签</title>
</head>
<body>
<a name="top">这是顶部</a> <!--设置锚点 在最底部有对应锚点-->
<!--数字表示字体的粗细-->
<h1>标题</h1>
<h2>标题</h2>
<h3>标题</h3>
<h4>标题</h4>
<h5>标题</h5>
<h6>标题</h6>
<b>加粗</b>
<i>斜体</i>
<u>下划线</u>
<s>删除</s>
<p>段落标签</p> <!--独占一个段落-->
<div>我是div</div> <!--div标签用来定义一个块级元素,并无实际的意义。主要通过CSS样式为其赋予不同的表现。-->
<span>我是span</span> <!--span标签用来定义内联(行内)元素,并无实际的意义。主要通过CSS样式为其赋予不同的表现-->
<img src="timg.jpg" alt="图片未加载成功的提示" title="鼠标悬浮提示信息" width="宽" height="高"> <!--长和高可以设置一个,会等比例缩放,src相对路径必须在同一目录下或绝对路径-->
<a href="http://baidu.com" target="_blank">百度一下</a> <!--超链接标签是指从一个网页指向一个目标的连接关系,target默认不写是_self 在原网页刷新覆盖,target="_blank"是新开个网页-->
<meta http-equiv="refresh" content="2;
URL = http://baidu.com"> <!--2秒后跳转到百度,在原来网页直接覆盖跳转-->
<!--无序列表-->
<!--type属性:
disc(实心圆点,默认值)
circle(空心圆圈)
square(实心方块)
none(无样式)-->
<ul type="disc">
<li>第一项</li>
<li>第二项</li>
<li>第三项</li>
</ul>
<!--有序列表-->
<!--type属性:
1 数字列表,默认值
A 大写字母
a 小写字母
Ⅰ大写罗马
ⅰ小写罗马
start是从数字几开始-->
<ol type="1" start="2">
<li>第一项</li>
<li>第二项</li>
<li>第三项</li>
</ol>
<!--标题列表(就像大纲一样,有一个层级效果-->
<dl>
<dt>标题1</dt>
<dd>内容1</dd>
<dt>标题2</dt>
<dd>内容2</dd>
</dl>
<!--表格 border表示:边界,最外层边框宽度,cellspacing表示内容与内容之间的小表格间隙,注意表格书写的格式-->
<!--属性:
border: 表格边框.
cellpadding: 内边距 (内边框和内容的距离)
cellspacing: 外边距.(内外边框的距离)
width: 像素 百分比.(最好通过css来设置长宽)
rowspan: 单元格竖跨多少行,重复内容合并,在表格的内容中修改
例如:<td rowspan="4">男</td>,其他内容中的"男"可以删除
colspan: 单元格横跨多少列(即合并单元格),同上(rowspan)
-->
<table border="1" cellspacing="0">
<caption>去西天的成员</caption> <!--设置表格名-->
<thead> <!--标题部分-->
<tr>
<th>序号</th>
<th>姓名</th>
<th>性别</th>
<th>爱好</th>
</tr>
</thead>
<!--内容部分-->
<tbody>
<tr>
<td>1</td>
<td>八戒</td>
<td>男</td>
<td>翠兰</td>
</tr>
<tr>
<td>2</td>
<td>悟空</td>
<td>男</td>
<td>桃子</td>
</tr>
<tr>
<td>3</td>
<td>莎莎</td>
<td>男</td>
<td>水</td>
</tr>
<tr>
<td>4</td>
<td>唐僧</td>
<td>男</td>
<td>白骨精</td>
</tr>
</tbody>
</table>
<a herf="#top">回到顶部</a> <!--和开头的设置锚点相对应herf和name-->
</body>
</html>
常用特殊字符
空格(html中默认是不显示空格的,也就是说通过空格键加了空格也没有多个空格的效果,加多少个都是显示一个空格效果,需要这些特殊字符才能显示出空格效果)
空格
> >
< <
& &
¥ ¥
版权标识(写公司网站的时候会用到) ©
注册(一个圆圈里面有个R) ®
form表单和input
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>input和form表单</title>
</head>
<body>
<!--action属性:值是一个网址,将数据提交到哪个网址去
method属性:提交方法,默认是get,效果是在网址上可以看到提交的数据-->
<form action="网址" method="post/get 可以不写默认get">
<!--readonly 是只读模式,输入不了-->
<p><input type="text" name="username" value="1" readonly placeholder="请输入用户名"></p> <!--第一种在文本框中显示提示信息,如果需要提交必须写name,value-->
<p><input type="password" name="password" value="2" placeholder="请输入密码"></p>
用户名:<input type="text" name="username" value="1"> <!--第二种在文本框外显示提示信息-->
密码:<input type="password" name="password" value="2"> <!--显示密文-->
<!--单选 checked="checked"设置默认-->
<p>性别:
<input type="radio" name="sex" value="male">男
<input type="radio" name="sex" value="famale">女
</p>
<!--多选 checked="checked"设置默认-->
<p>爱好:
<input type="checkbox" name="hobby" value="singing">唱歌
<input type="checkbox" name="hobby" value="dancing">跳
<input type="checkbox" name="hobby" value="rep">rep
<input type="checkbox" name="hobby" value="basketball">篮球
</p>
<!--下拉选框单选-->
<select name="city">
<option value="1">上海</option>
<option value="2">南京</option>
<option value="3">北京</option>
<option value="4">广州</option>
</select>
<!--下拉选框多选-->
<p>按住Ctrl进行多选</p>
<select name="city" multiple="multiple">
<option value="1">上海</option>
<option value="2">南京</option>
<option value="3">北京</option>
<option value="4">广州</option>
</select>
<!--日期选择-->
<p>选择日期:
<input type="date" name="date" value="date">
</p>
<!--隐藏输入框-->
<p>
<input type="hidden">
</p>
<!--文本选择框,可以在本地文件中选择上传的文件-->
<p>
<input type="file" name="file" value="file">
</p>
<!--普通按钮-->
<p>
<input type="button" value="普通按钮">
</p>
<!--重置按钮,在form表单中使用-->
<p>
<input type="reset" value="重置">
</p>
<!--多行文本输入框-->
<h5>反馈:</h5>
<p>
<textarea cols="30" rows="10"></textarea>
</p>
<!--提交按钮-->
<p>
<input type="submit">
</p>
<a href="mailto:邮箱号">联系我们</a> <!--发送邮件功能-->
</form>
</body>
</html>
input文本输入框,input标签如果想将数据提交到后台,那么必须写name属性
input选择框,必须写name属性和value属性
input选择框,name值相同的算是一组选择框
label标签
1.label 元素不会向用户呈现任何特殊效果。但是点击label标签里面的文本,那么和他关联的input标签就获得了光标,让你输入内容
2.<label> 标签的 for 属性值应当与相关元素的 id 属性值相同。
第一种写法
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>label</title>
</head>
<body>
<p>
<label for="username">用户名:</label>
<input type="text" id="username">
</p>
<p>
<label for="password">密码:</label>
<input type="password" id="password">
</p>
</body>
</html>
第二种写法
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>label</title>
</head>
<body>
<p>
<label>
用户名:<input type="text">
</label>
</p>
<p>
<label>
密码:<input type="password">
</label>
</p>
</body>
</html>
前端css
css
CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素,给HTML设置样式,让它更加美观。当浏览器读到一个样式表,它就会按照这个样式表来对文档进行格式化(渲染)。
每个CSS样式由两个组成部分:选择器和声明。声明又包括属性和属性值。每个声明之后用分号结束。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>www.css.com</title>
<style type="text/css">
/*通过字典和body中的p标签关联起来,声明 字典中为样式属性名和属性值*/
/* p{*/
/* font-size: 30px;*/
/* color: aquamarine;*/
/* font-weight: bold*/
/* }*/
/*通过字典和body中的span标签关联起来,声明 字典中为样式属性名和属性值*/
span{
font-size: 30px;
color: darkturquoise;
}
</style>
</head>
<body>
<!--给一行代码加样式属性,但很多代码需要的话就会很繁琐,维护起来也不方便-->
<!-- <p style="font-size: 30px;color: aquamarine;font-weight: bold" >-->
<!-- www.css.com-->
<!-- </p>-->
<p>
<!--通过span标签,给一段内容加样式属性,不影响span外的其他内容,但是少量代码需要加样式的话还可以,但是代码量大的话,重复功能多,
维护和修改起来不方便,所以尽量不在span标签内部加样式属性,通过在head中添加对span标签的装饰-->
<!-- <span style="font-size: 30px;color: blanchedalmond;font-weight: lighter">hello world</span>-->
<!-- www.<span style="font-size: 30px;color: darkturquoise;">css</span>.com-->
<span>www.</span>css
<span>.com</span>
</p>
</body>
</html>
css的几种引用方式
行内样式(内联式)
优点:不会产生额外的请求
缺点:1.重复代码多,造成整个文件的体积变大
2.不利于维护
3.不符合结构与样式分离的结构
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>css应用方式</title>
</head>
<body>
<!--内联式-->
<p style="color: red;">
css的引用方式:内联式
</p>
</body>
</html>
内部样式(嵌入式)
优点:能初步实现结构与样式的结构分离,不会产生额外请求
缺点:1.代码复用
2.多个页面不适用与嵌入式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>css应用方式</title>
<!--嵌入式-->
<style>
span{
color: blue;
}
</style>
</head>
<body>
<span>css的引用方式:内部样式(嵌入式)</span>
</body>
</html>
外部样式
优点:1.易于代码维护
2.可以重复使用
3.可以共享文件中的属性(类似于模块,需要改该样式就可以听过link标签来关联)
4.实现了样式结构分离
缺点:会产生额外请求(可以用其他工具消除请求),可以忽略
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<!--外部样式,建立另一个css文件并建立内容样式属性,通过link标签与样式文件关联起来-->
<link rel="stylesheet" type="text/css" href="index.css">
</head>
<body>
<h4>css的引用方式:外部样式</h4>
</body>
</html>
index.css中的内容样式
h4{
color: hotpink;
}
三种引入方式的优先级
浏览器会根据优先级来显示样式
先显示行内样式,其次显示离装饰标签近的样式
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>css</title>
<link rel="stylesheet" type="text/css" href="index.css">
<style>
p{color: blue}
</style>
</head>
<body>
<p style="color:red">lalala</p>
</body>
</html>
<!--结果是红色的lalala-->
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>css</title>
<link rel="stylesheet" type="text/css" href="index.css">
<style>
p{color: blue}
</style>
</head>
<body>
<p>lalala</p>
</body>
</html>
<!--结果是blue色的lalala-->
css选择器
每个CSS样式由两个组成部分:选择器和声明。声明又包括属性和属性值。每个声明之后用分号结束。
css选择器分类
一.基础选择器:
标签选择器
类选择器(常用)
id选择器(常用)
二.高级选择器:
后代选择器
子代选择器
组合选择器
交集选择器
伪类选择器
标签选择器
标签选择器
p{color: hotpink;}
span{color: red;}
p和span就是标签选择器,是对HTML文件中body内容中所有的p标签和span标签 进行添加样式
如果p标签太多,就会一次性改很多
id选择器
表示唯一的,想修改多个内容,标签选择器满足不了.
id="xx"
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>css选择器</title>
<link rel="stylesheet" href="index.css">
</head>
<body>
<div>
<h3>小猪佩奇</h3>
<p><span id="peiqi">小猪佩奇身上纹,掌声送给社会人</span></p>
<p>小马宝莉衣上秀,掌声送给陈独秀</p>
<p>小羊苏西吹口哨,塑料友谊真美妙</p>
<p>要纹就纹喜羊羊,青青草原我最狂</p>
<img src="css图片/小猪佩奇1.png" alt="小猪佩奇" title="小猪佩奇" width="330">
<p>鲁迅走在路上,突然听到有人叫”迅哥儿!”回头只见一个唇红齿白的美少年。</p>
<p>鲁迅问:”你是?”少年说:”迅哥儿,你忘了那金黄的圆月、碧绿的西瓜地、钢叉、项带银圈的少年了吗?”</p>
<p>鲁迅兴奋的抓住他:”闰土!你是闰土!”</p>
<p>”不,我是猹。”</p>
<p><span id="runtu">闰土和猹身上纹,掌声送给周树人</span></p>
<img src="css图片/周树人.png" alt="闰土和猹" title="闰土和猹" width="400">
</div>
</body>
</html>
<!--index.css文件下的选择器,#+id为id选择器-->
#peiqi{color: coral;}
#runtu{color:darkcyan;}
类选择器
不同标签设置共同属性,一个标签可以携带多个类,前提是要用空格隔开
class="xx xx1"
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>css选择器</title>
<link rel="stylesheet" href="index.css">
</head>
<body>
<div>
<h3 class="active">小猪佩奇</h3>
<p>小猪佩奇身上纹,掌声送给社会人</p>
<p><span class="active size">小马宝莉衣上秀,掌声送给陈独秀</span></p>
<p>小羊苏西吹口哨,塑料友谊真美妙</p>
<p>要纹就纹喜羊羊,青青草原我最狂</p>
<img src="css图片/小猪佩奇1.png" alt="小猪佩奇" title="小猪佩奇" width="330">
<p>鲁迅走在路上,突然听到有人叫”迅哥儿!”回头只见一个唇红齿白的美少年。</p>
<p>鲁迅问:”你是?”少年说:”迅哥儿,你忘了那金黄的圆月、碧绿的西瓜地、钢叉、项带银圈的少年了吗?”</p>
<p>鲁迅兴奋的抓住他:”闰土!你是闰土!”</p>
<p>”不,我是猹。”</p>
<p>闰土和猹身上纹,掌声送给周树人</p>
<img src="css图片/周树人.png" alt="闰土和猹" title="闰土和猹" width="400">
</div>
</body>
</html>
<!--index.css文件下的选择器, . 为类选择器-->
.active{color: blueviolet;}
.size{font-size: 30px;}
用好类选择器
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<link rel="stylesheet" href="index.css">
</head>
<body>
<!--需求:文本颜色为绿色,字体大小为:20px-->
<p class="color size">小猪佩奇身上纹,掌声送给社会人</p>
<!--需求:文本颜色为绿色,字体粗细为:粗-->
<p class="color weigth">闰土和猹身上纹,掌声送给周树人</p>
<!--需求:字体大小为:20px,字体粗细为:粗-->
<p class="size weigth">小马宝莉衣上秀,掌声送给陈独秀</p>
</body>
</html>
文本中有多个重复的样式,颜色重复了两个,字体大小重复了两个,字体粗细重复了两个,所以对它有相同的样式的,用类设置,不同标签设置共同属性
<!--index.css文件下的类选择器-->
.size{font-size: 20px}
.color{color: green}
.weigth{font-weight: bold}
后代选择器
div内所有嵌套的标签都会被修饰,div外的标签不会被装饰
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
div p{
color: red;
}
</style>
</head>
<body>
<div>
<div>
div标签2
<p>p标签</p>
</div>
div标签1
</div>
div标签0
</body>
</html>
子代选择器
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
div>p{
color: red;
}
</style>
</head>
<body>
<div>
<div>
div标签2
<p>p标签</p> <!--p标签变色,其余的不变-->
</div>
div标签1
</div>
div标签0
</body>
</html>
毗邻选择器
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
div+p{
color: red;
}
</style>
</head>
<body>
<p>div上的标签</p>
<div>
<div>
div标签2
<p>p标签</p>
</div>
div标签1
</div>
<p>div下的标签</p> <!--变色,其余的不变-->
div标签0
</body>
</html>
会选择与div标签下面标签离div得最近的p标签
弟弟选择器
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
div~p{
color: red;
}
</style>
</head>
<body>
<p>div上的标签</p>
<div>
<div>
div标签2
<p>p标签</p>
</div>
div标签1
</div>
<p>div下的标签</p> <!--变色,其余的不变-->
div标签0
</body>
</html>
与div标签同级的标签为弟弟标签(弟弟选择器)用div~p,同级的标签改变,其余的不变
组合选择器
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<link rel="stylesheet" href="test.css">
</head>
<body>
<div>div标签</div>
<p>p标签</p>
</body>
</html>
<!--test.css文件-->
div,p{
color: blueviolet;
background-color: hotpink;
font-size: medium;
}
给div和p标签设置共同样式,给多个标签设置共同样式,用逗号隔开
属性选择器
通过标签属性来找到对应的标签
通过属性来找写法:
[xxx]{color:red;} 找到有xxx属性的所有标签
[xxx='p2']{color:red;} 找到有xxx属性的并且属性值为p2的所有标签
p[title]{xx:xx;} 找到所有有title属性的p标签
p[title='p2']{xx:xx;} 找到所有有title属性的并且属性值为p2的p标签
示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
p[xxx='p2']{
color:red;
}
</style>
</head>
<body>
<p>p1</p>
<p xxx="p2">p2</p>
<p xxx="p3">p3</p>
</body>
</html>
伪类选择器
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
a:link{ /* a标签访问前设置样式 */
color: red;
}
a:active{ /* a标签鼠标点下去显示样式 */;
color: green;
}
a:visited{ /* a标签访问后显示样式 */
color: pink;
}
a:hover{ /* 鼠标悬浮到a标签时显示样式 */
color:purple;
}
div:hover{ /* 鼠标悬浮到div标签时显示样式 */
background-color: green;
}
input:focus{ /* input标签捕获光标时的样式显示 */
background-color: orange;
}
</style>
</head>
<body>
<a href="http://www.94py.com/">校草网</a>
<div>
</div>
<input type="text">
</body>
</html>
a:hover 其他标签{
color: purple;
}
伪元素选择器
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
div:first-letter{
color: green;
font-size: larger;
}
div:before{
content: "!";
color: red;
}
div:after{
content: "?";
color: purple;
}
</style>
</head>
<body>
<div>小猪佩奇身上纹,掌声送给社会人</div>
</body>
</html>
#first-letter:文本内容首字母设置
#before:在文本第一个位置添加内容或样式
#after:在文本最后一个位置添加内容或样式
css选择器权重
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
div .c1{
color: purple;
}
.c1{
color: red;
}
#d1{
color: greenyellow;
}
</style>
</head>
<body>
<div class="c2">
小猪佩奇身上纹,掌声送给社会人
<div class="c1" id="d1">
闰土和猹身上纹,掌声送给周树人
<p style="color: red">要纹就纹喜羊羊,青青草原你最狂</p>
</div>
</div>
</body>
</html>
小猪佩奇身上纹,掌声送给社会人为黑色
闰土和猹身上纹,掌声送给周树人为绿色
要纹就纹喜羊羊,青青草原你最狂为黄色
div .c1为标签选择器和类选择器权重为10+1=11
id选择器的权重为100
内联样式选择器的权重为1000
权重越高,对应选择器的样式会被优先显示
组合选择器,各选择器的权重相加
权重不进位,11类选择器组合到一起,也没有一个id选择器的优先级大,小就是小
默认css样式是可以继承的,继承的权重为0
权重相同的选择器,谁后写的,用谁的
css样式
高度宽度
width宽度
height高度
块级标签能设置高度宽度,内联标签不能设置高度宽度,内敛标签的高度宽度由标签内部的内容来决定.
示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
div{
height: 100px;
width: 200px;
background-color: purple;
}
span{
height: 100px;
width: 200px;
background-color: yellow;
}
</style>
</head>
<body>
<div>div1</div>
<span>span1</span>
</body>
</html>
字体属性
字体
font-family:'宋体','楷体'...
字体大小
font-family: '楷体','黑体'; /* 字体,从左往右找浏览器能够支持的字体 */
font-size: 10px; /* 设置字体大小,默认字体大小是16px */
字重
font-weight:bold;加粗
字体颜色
/*color: red;*/
/*color: #668B8B; */
/*color: rgb(255, 170, 205);*/
字重设置的值
font-weight用来设置字体的字重(粗细)。
值 | 描述 |
---|---|
normal | 默认值,标准粗细 |
bold | 粗体 |
bolder | 更粗 |
lighter | 更细 |
100~900 | 设置具体粗细,400等同于normal,而700等同于bold |
inherit | 继承父元素字体的粗细值 |
文字属性
文字对齐(水平方向对齐)
text-align: center;
text-align: right;
text-align: left;
text-align 属性规定元素中的文本的水平对齐方式。(letter-spacing)
值 | 描述 |
---|---|
left | 左边对齐 默认值 |
right | 右对齐 |
center | 居中对齐 |
垂直对齐
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
div{
width: 200px;
height: 200px;
border: 1px solid red;
text-align: center;
line-height:200px;
}
</style>
</head>
<body>
<div>
<span>
xxxxx
</span>
</div>
</body>
</html>
文字装饰
text-decoration: none;
text-decoration: overline;
<a href="">百度</a>
示例
a{
text-decoration: none;
}
text-decoration 属性用来给文字添加特殊效果。
值 | 描述 |
---|---|
none | 默认。定义标准的文本。 |
underline | 定义文本下的一条线。 |
overline | 定义文本上的一条线。 |
line-through | 定义穿过文本下的一条线。 |
inherit | 继承父元素的text-decoration属性的值。 |
首行缩进
p{
text-indent: 32px;
}
示例
<p>
唧唧复唧唧,木兰当户织.唧唧复唧唧,木兰当户织.唧唧复唧唧,木兰当户织.唧唧复唧唧,木兰当户织.唧唧复唧唧,木兰当户织.唧唧复唧唧,木兰当户织.唧唧复唧唧,木兰当户织.唧唧复唧唧,木兰当户织.唧唧复唧唧,木兰当户织.唧唧复唧唧,木兰当户织.唧唧复唧唧,木兰当户织.唧唧复唧唧,木兰当户织.唧唧复唧唧,木兰当户织.唧唧复唧唧,木兰当户织.唧唧复唧唧,木兰当户织.
</p>
背景属性
/*background-color: blue;*/ /* 设置背景颜色 */
background-image: url("meinv.jpg"); /* 背景图片,url属性值为图片路径 */
background-repeat: no-repeat; /* 图片是否平铺,默认是平铺的,占满整个标签 */
/*background-position: right bottom; !* 图片位置 *!*/
/*background-position: 100px 50px; !* 图片位置,100px是距离左边的距离,50px是距离上面的距离 *!*/
简写方式
background: yellow url("meinv.jpg") no-repeat 100px 50px;
背景颜色 背景图片路径 是否平铺 图片位置
边框属性
/*border-style: dotted;*/ 样式
/*border-color: red;*/ 颜色
/*border-width: 10px;*/ 宽度
简写形式:
/*border: 10px solid yellow;*/
四个边框可以单独设置:
border-left:10px solid yellow ;
border-right:10px dashed red ;
设置圆角
border-radius: 5%; /* 设置圆角 */
示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
div{
/*border-style: dotted;*/
/*border-color: red;*/
/*border-width: 10px;*/
/*border: 10px solid yellow;*/
border-left:10px solid yellow ;
border-right:10px dashed red ;
border-radius: 5%;
width: 200px;
height: 200px;
}
</style>
</head>
<body>
<div></div>
</body>
</html>
边框样式的值
值 | 描述 |
---|---|
none | 无边框。 |
dotted | 点状虚线边框。 |
dashed | 矩形虚线边框。 |
solid | 实线边框。 |
display
值 | 意义 |
---|---|
display:"none" | HTML文档中元素存在,但是在浏览器中不显示。一般用于配合JavaScript代码使用。 |
display:"block" | 默认占满整个页面宽度,如果设置了指定宽度,则会用margin填充剩下的部分。 |
display:"inline" | 按行内元素显示,此时再设置元素的width、height、margin-top、margin-bottom和float属性都不会有什么影响。 |
display:"inline-block" | 使元素同时具有行内元素和块级元素的特点。 |
示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
div{
height: 200px;
width: 200px;
border: 1px solid red;
/*display: inline;*/
/*display: inline-block;*/
display: none; /* 隐藏标签 */
}
span{
height: 200px;
width: 200px;
border: 1px solid green;
/*display: block;*/
}
p{
height: 200px;
width: 200px;
border: 1px solid yellow;
display: inline;
}
</style>
</head>
<body>
<div>xxxxxxx</div>
<span>span1111</span>
</body>
</html>
隐藏标签
/*display: none;*/ /* 隐藏标签,不占原来的位置 */
visibility: hidden; /* 原来的位置还占着 */
盒子模型
content:内容 width和height 是内容的高度宽度
padding:内边距 内容和边框之间的距离
border:边框
margin:外边距 标签之间的距离,如果两个标签都设置了margin,选最大的值,作为双方之间的距离
占用空间大小:content+padding+border
示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.c1{
width: 100px;
height: 100px;
border: 10px solid red;
/*padding: 20px 20px; !* 内边距,内容和边框之间的距离 *!*/
padding: 8px 2px 3px 6px; /* 上右下左 */
margin: 20px 10px;
}
.c2{
width: 100px;
height: 100px;
border: 10px solid green;
margin: 10px 2px 6px 8px; /* 外边距,与其他标签的距离,如果旁边没有标签,按照父级标签的位置进行移动 */
}
.c3{
width: 100px;
height: 100px;
border: 1px solid blue;
}
</style>
</head>
<body>
<div class="c1">
div1
</div>
<div class="c2">
div2
</div>
<div class="c3">
div3
</div>
</body>
</html>
四个方向单独设置padding
padding-left: 10px;
padding-top: 8px;
padding-right: 5px;
padding-bottom: 5px;
四个方向单独设置margin
margin-top: 10px;
margin-left: 100px;
margin-bottom: 50px;
margin-right: 200px;
float浮动
一般用来进行页面布局
浮动会脱离正常文档流
会造成父级标签塌陷问题
清除浮动两种方法(解决塌陷问题)
clear: both; /* clear清除浮动 */ left\right
方式1:
1.父级标签设置高度
缺点:使用不灵活,后期不易维护
应用:网页中固定高度区域,比如导航栏
2.通过伪元素选择器来进行清楚浮动:写法如下
.clearfix:after{
content:'';
display: block;
clear: both;
}
使用:在最后一个浮动元素后面加一个空的块级元素,并设置改属style,clear:both
缺点:结构冗余
示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.c1{
width: 100px;
height: 100px;
background-color: red;
float: left;
}
.c2{
width: 100px;
height: 100px;
background-color: green;
float: right;
}
.c3{
/*width: 100px;*/
height: 100px;
background-color: pink;
/*clear: both; !* clear清除浮动 *!*/
}
.clearfix:after{
content:'';
display: block;
clear: both;
}
/* 浮动,会造成父级标签塌陷问题 */
/* 解决父级标签塌陷问题方式1 */
/*.cc{*/
/* height: 100px;*/
/*}*/
</style>
</head>
<body>
<!--ajsdfja;sdjfo;asjdfo-->
<div class="cc clearfix">
<div class="c1">div1</div>
<div class="c2">div2</div>
</div>
<div class="c3">div3</div>
</body>
</html>
用overflow:hidden清除浮动
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
.title{
overflow: hidden;
border: 1px solid red;
}
.left{
width: 100px;
height: 100px;
background-color: red;
float: left;
}
.right{
width: 100px;
height: 100px;
background-color: green;
float: right;
}
.center{
width: 100%;
height: 200px;
background-color: purple;
}
</style>
</head>
<body>
<div class="title clearfix">
<div class="left">左边</div>
<div class="right">右边</div>
</div>
<div class="center">中间</div>
</body>
</html>
clear
clear属性规定元素的哪一侧不允许其他浮动元素。
值 | 描述 |
---|---|
left | 在左侧不允许浮动元素。 |
right | 在右侧不允许浮动元素。 |
both | 在左右两侧均不允许浮动元素。 |
none | 默认值。允许浮动元素出现在两侧。 |
inherit | 规定应该从父元素继承 clear 属性的值。 |
overflow溢出
值 | 描述 |
---|---|
visible | 默认值。内容不会被修剪,会呈现在元素框之外。 |
hidden | 内容会被修剪,并且其余内容是不可见的。 |
scroll | 内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容。 |
auto | 如果内容被修剪,则浏览器会显示滚动条以便查看其余的内容。 |
inherit | 规定应该从父元素继承 overflow 属性的值。 |
定位
相对定位
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.c{
width: 100px;
height: 200px;
background-color: red;
}
.c1{
width: 100px;
height: 200px;
background-color: green;
position: relative; /*相对于当前块 ,会占用原理空间*/
left: 80px; /* 以左边为起点,向右移动100*/
top: 20px; /*以上一步为起点和当前块为起点,向下移动20px*/
}
.c2{
width: 100px;
height: 200px;
background-color:pink;
}
</style>
</head>
<body>
<div class="c">嘻嘻嘻</div>
<div class="c1">哈哈哈</div>
<div class="c2">呵呵呵</div>
</body>
</html>
绝对定位
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
.c{
width: 100px;
height: 200px;
background-color: red;}
.c1{
width: 100px;
height: 200px;
background-color: green;
position: absolute;
left: 20px; /*以当期文档窗口移动,不占原来空间*/
top: 60px;
}
.c2{
width: 100px;
height: 200px;
background-color: yellow;}
</style>
</head>
<body>
<div class="c">嘻嘻嘻</div>
<div class="c1">哈哈哈</div>
<div class="c2">呵呵呵</div>
</body>
</html>
z-index和模态对话框
那么谁在上面显示,谁被压在下面的呢,就是通过这个z-index来设置的。
z-index 值表示谁压着谁,数值大的压盖住数值小的,
只有定位了的元素,才能有z-index,也就是说,不管相对定位,绝对定位,固定定位,都可以使用z-index,而浮动元素float不能使用z-index
z-index值没有单位,就是一个正整数,默认的z-index值为0如果大家都没有z-index值,或者z-index值一样,那么谁写在HTML后面,谁在上面压着别人,定位了元素,永远压住没有定位的元素。
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
.c1{
left: 0;
right: 0;
top: 0;
bottom: 0;
position: fixed;
background-color: rgba(0,0,0,0.7);
z-index: 998;
}
.c2{
position: fixed;
width: 300px;
height: 450px;
background-color: yellow;
z-index: 1000;
top: 50%; /*此时黄色框在偏右下角的位置,要向中间移动*/
left: 50%;
margin-left: -150px; /*向左移动宽度的一半*/
margin-top: -225px; /*向上移动高度的一半*/
}
</style>
</head>
<body>
<div class="c1">lala</div>
<div class="c2"></div>
</body>
</html>
opacity
设置透明度,用来定义透明效果。取值范围是0~1,0是完全透明,1是完全不透明。
JavaScript
javascript的引入方式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>js文件引入</title>
<!-- <script type="text/javascript" src="index.js"></script>--> 第一种
<!--可以写在head标签里 也可以写在body标签里--> 第二种
</head>
<body>
<script type="text/javascript">
alert('你好');<!--每一句话的结尾必须有分号;alert弹窗,"你好为弹窗中的内容"-->
</script>
</body>
</html>
javascript变量与数据类型以及字符串和数值之间的装换
1.变量
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>变量</title>
</head>
<body>
<script>
var x = 30;/*声明变量和变量赋值 变量初始化*/
var name = '大郎';
alert(x)
</script>
</body>
</html>
2.变量数据类型
数值型 字符型 布尔 null undefined
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>变量数据类型</title>
<!---->
</head>
<body>
<script>
都是数值型
var a = 3;
var b = 1.234;
var c = -12;
通过typeof检查数据类型
alert(typeof a);
alert(typeof b);
alert(typeof c);
字符型
var name = '大郎';
var str = '啦啦啦';
alert(typeof name);
var n = 'eat "apple"';//结果为eat "apple"
alert(n);
var str = "i'm \"apple\"";// 转义成字符串\"apple\
alert(str);
//也可以拼接,用+
布尔bool
var bool1 = 3>4;
alert(bool1);
undefined
当一个变量单纯的声明没有被赋值的时候会出现undefined
var x;
alert(typeof x);
null
var y = null;
alert(y);
alert(typeof y);//object
</script>
</body>
</html>
3.数值与字符串的装换
<!--数字和字符串-->
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script>
var a = 5+"tj";
alert(a);//5tj
alert(typeof a); //str
数值转字符串
var num = 123;
var str = num + " ";
alert(str);
alert(typeof str);//str
var num = 13;
var a = num.toString();
alert(a);
alert(typeof a);
字符串转数字
var mynum = Number("223");
alert(mynum);
alert(typeof mynum);
</script>
</body>
</html>
3.字符串的操作方法
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script>
var s = " wokant,iN,Ghao ";
alert(s.length);//返回长度
alert(s.trim());//说明长度,去出左右两边空格
alert(s.trimRight());//去除右边空格
alert(s.trimleft());//去除左边空格
alert(s.charAt(2));//返回第2个字符,超过索引最大值返回空字符串
var s1='hello';
var s2='world';
alert(s1.concat(s2)); //字符串拼接
alert(s.indexOf("wokan", 0));//语法.indexOf(substring, start) ,substring是要查找字符串中的元素,start是从索引为多少开始找,找到返回字符串的索引,找不到返回-1
alert(s.slice(0,9));//切片 .slice(起始位置, 终止位置)
alert(s.toLowerCase());//全部变小写
alert(s.toUpperCase());//全部变大写
alert(s.split(',',1))//分割,2位切割后返回的元素个数wokant,iN,Ghao 两个",",可以分割成3个元素,1代表会取第一个元素
</script>
</body>
</html>
4.查看数据类型
如果数据前没加new,该是什么数据类型就是什么数据类型,加了new就是object类型
javascript运算符
1.算数运算符
+ - * / % ++ -- i++,是i自加1,i--是i自减1 i++的这个加1操作优先级低,先执行逻辑,然后再自加1,而++i,这个加1操作优先级高,先自加1,然后再执行代码后面的逻辑
示例:
var a = 100;
a++;或者++a; -- 101 a自增1
a++和++a的区别,示例:
var a = 102;
a++ == 102; -- true
a -- 103;
++a == 103; -- false
a -- 104;
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>运算符</title>
</head>
<body>
<script>
var x = 10;
var y = 3;
var sum = x + y;
var en = x - y;
var or = x * y;
var op = x % y; //取余
var p = x / y;
alert(sum);
alert(en);
alert(or);
alert(op);
alert(p)
</script>
</body>
</html>
有多个运算符遵循数学中的优先级顺序
2.赋值运算符
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>运算符</title>
</head>
<body>
<script>
var x = 1;
x++;
alert(x)//2
var a = 5;
var b = 6;
a = b;
alert(a) //6也是先算等号右边
var c = 10;
c = c += 5;
alert(c) //15
</script>
</body>
</html>
3.比较运算符
> >= < <= != == === !==
==(弱等于)和===(强等于)两者的区别:
示例:
var a = 11;
var b = '11';
a == b -- true
a === b; -- false
Javascript数组
<!--数组-->
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script>
var list = ["香蕉","苹果","牛奶","红牛",["1",2]];
alert(list);
alert(typeof list);//object
console.log(list);
var i = list[0]; //索引
console.log(i); //取值
list[0] = '榴莲'; //修改原数组0索引的值,改为榴莲
console.log(list);
</script>
</body>
</html>
数组的操作方法
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script>
var a = [1,2,23,62,35,200,"abc"];
alert(a[1]); //打印索引为1的元素
alert(a.length); //打印数组的长度或元素个数
a.push('la'); //在数组尾部追加元素
alert(a)
alert(a.pop()); //获取数组的尾部元素
a.unshift('滚'); //头部插入元素
alert(a)
a.shift(); //移除头部元素
alert(a)
alert(a.slice(1,3)) //切片
alert(a.reverse()); //数组在原来基础上反转
var b = a.join('_'); //将数组元素连接成字符串
alert(b)
var b = '123';
var b1 = [1,2,6];
var c = a.concat(b); //连接数组
var c1 = a.concat(b1); //连接数组
alert(c1)
alert(a.sort()) //这样排序会按照数组的ASCII编码排序,得不到真正的排序
function sortNumber(a,b){
return a-b;
}
var s = [1,8,2,200,'dd'];
alert(s.sort(sortNumber)) //正确排序
//如果想按照其他标准进行排序,就需要提供比较函数,也就是自己提供一个函数提供排序规则,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:1. 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。2. 若 a 等于 b,则返回 0。 3. 若 a 大于 b,则返回一个大于 0 的值
var s = ['aa','bb','cc','dd'];
alert(s.splice(1,2)); //打印返回被删除的元素,1代表从索引1开始,删除2个元素,包括索引为1的元素
alert(s)
var li = [1,"dd",77,8,2];
li.splice(0,2,'hello','world'); //删除在替换新元素:
alert(li)
索引取值
var a = {'name':'alex','age':48};
键可以不加引号:var a = {name:'alex',age:48};
a['age']; -- 48
a.age; -- 48
</script>,,
</body>
</html>
javascript条件语句
<!--条件语句-->
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script>
var distance = 10;
var distance1 = 15;
if (distance1 < distance){
console.log('啦啦啦')
}
else{
console.log('别啦啦了')
}
</script>
</body>
</html>
else if
switch切换
<!--switch-->
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script>
var day = new Date().getDay(); //示例化一个今天的日期对象,getDay()是获取天数的编号,0表示星期日
switch (day) { //这里day这个参数必须是一个值或者是一个能够得到一个值的算式才行,这个值和后面写的case后面的值逐个比较,
// 满足其中一个就执行case对应的下面的语句,然后break,如果没有加break,还会继续往下判断
case 0: //如果day是0
console.log("Sunday"); //执行它
break; //然后break跳出
case 1:
console.log("Monday");
break;
default: //如果没有任何满足条件的,就执行它
console.log("...")
}
</script>
</body>
</html>
满足多个条件时
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script>
switch (4) {
case 1:case 2:case 3:
console.log("c");
break;
default:
console.log("no")
}
//打印no
switch (1) {
case 1:case 2:case 3:
console.log("c");
break;
default:
console.log("no")
}
//打印c
</script>
</body>
</html>
for循环
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script>
1. for (var i=0;i<10;i++){
console.log(i);
}
2. var li = ['aa','bb','dd','cc'];
for (var i in li){
console.log(i,li[i])
}
//结果:
0 aa
1 bb
2 dd
3 cc
3. for (var i=0;i<li.length;i++){
console.log(i,li[i])}
</script>
</body>
</html>
while循环
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script>
var i=0;
while (i<10) {
console.log(i);
i++;
if (i > 5) {
break
}
}
</script>
</body>
</html>
三元运算
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script>
var a = 1;
var b = 2;
var c = a > b ? a : b; //如果a>b这个条件成立,就把冒号前面的值给c,否则把冒号后面的值给c
//python中的:a = x if x>y else y
alert(c)
</script>
</body>
</html>
函数
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script>
//函数的定义
function f1() {
console.log("hello world");
}
f1(); // 函数的调用
//带参数的函数
function f2(a,b,c) {
console.log(arguments);//参数
console.log(arguments.length);//有多少参数 3
console.log(a,b,c);//打印参数1 2 8
}
f2(1,2,8);
//带返回值的函数
function f3(a,b) {
return a+b;//函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回。例如:return[a,b]
}
var c = f3(1,2);
alert(c);
//匿名函数方式,多和其他函数配合使用
var sum = function (a,b) {
return a+b;
};
var s = sum(1,2);
alert(s);
//立即执行函数,页面加载到这里,这个函数就直接执行了,不需要被调用执行
//python中写可以这么写:ret=(lambda x,y:x+y)(10,20) 然后print(ret)
sum = (function (a,b) {
return a+b;
})
(1,2);
alert(sum);
</script>
</body>
</html>
函数的去全局变量和局部变量
局部变量:
在JavaScript函数内部声明的变量(使用 var)是局部变量,所以只能在函数内部访问它(该变量的作用域是函数内部)。只要函数运行完毕,本地变量就会被删除。
全局变量:
在函数外声明的变量是全局变量,网页上的所有脚本和函数都能访问它。
变量生存周期:
JavaScript变量的生命期从它们被声明的时间开始。
局部变量会在函数运行以后被删除。
全局变量会在页面关闭后被删除。
作用域
首先在函数内部查找变量,找不到则到外层函数查找,逐步找到最外层。
1.
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script>
var city = "beijing";
function f() {
var city = "shanghai";
function inner() {
var city = "hebei";
console.log(city)
}
inner()
}
f();//结果:hebei
</script>
</body>
</html>
2.
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script>
var city = "beijing";
function f() {
console.log(city);
}
function f1() {
var city = "hebei";
return f;
}
var res = f1();
res();
//结果:beijing
</script>
</body>
</html>
3.闭包
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script>
var city = "beijing";
function f() {
var city = "hebei";
function f1() {
console.log(city);
}
return f1;
}
var res = f();
res();
</script>
</body>
</html>
面向对象
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script>
//定义一个类
function Person(name) {
this.name = name;//类属性,静态属性
}
//定义一个类方法
Person.prototype.func = function () {
console.log(this.name,"真丑")
};
//实例化一个对象
var p = new Person("xiaojie");
//执行对象中的方法
p.func();
//执行类的静态属性
console.log(p.name);
</script>
</body>
</html>
js正则RegExp
1.创建一个正则
var reg = RegExp('正则表达式') 注意:在写字符串中所有带\的元字符都会被转义,应该写成\\
var reg = /正则表达式/ 内部元素就不会被转义
reg.text('待检测的字符串') 如果字符串中含有符合表达式规则 的内容就会返回True,否则会返回false
2.
var exp = 'lalanb250';
exp.match(/\d/) 从左到右匹配第一个数字 结果为2
exp.match(/\d/g) 匹配所有符合规则的 返回一个数组
3.
var s = 'A he is a boy and she is An aaa'
s.match(/a/) 从左到右匹配第一个 结果为a,索引为6
s.match(/a/g) 匹配所有符合规则的,返回一个数组
s.match(/a/i) i表示不区分大小写
/创建正则对象方式1
// 参数1 正则表达式(不能有空格)
// 参数2 匹配模式:常用g(全局匹配;找到所有匹配,而不是在第一个匹配后停止)和i(忽略大小写)
// 用户名只能是英文字母、数字和_,并且首字母必须是英文字母。长度最短不能少于6位 最长不能超过12位。
// 创建RegExp对象方式(逗号后面不要加空格),假如匹配用户名是只能字母开头后面是字母加数字加下划线的5到11位的
var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,11}$"); //注意,写规则的时候,里面千万不能有空格,不然匹配不出来你想要的内容,除非你想要的内容本身就想要空格,比如最后这个{5,11},里面不能有空格
// 匹配响应的字符串
var s1 = "bc123";
//RegExp对象的test方法,测试一个字符串是否符合对应的正则规则,返回值是true或false。
reg1.test(s1); // true
// 创建方式2,简写的方式
// /填写正则表达式/匹配模式(逗号后面不要加空格)
var reg2 = /^[a-zA-Z][a-zA-Z0-9_]{5,11}$/;
reg2.test(s1); // true
注意,此处有坑:如果你直接写一个reg2.test(),test里面啥也不传,直接执行,会返回一个true,用其他的正则规则,可能会返回false,是因为,test里面什么也不传,默认传的是一个undefined,并且给你变成字符串undefined,所以能够匹配undefined的规则,就能返回true,不然返回false
// String对象与正则结合的4个方法
var s2 = "hello world";
s2.match(/o/g); // ["o", "o"] 查找字符串中 符合正则 的内容 ,/o/g后面这个g的意思是匹配所有的o,
s2.search(/h/g); // 0 查找字符串中符合正则表达式的内容位置,返回第一个配到的元素的索引位置,加不加g效果相同
s2.split(/o/g); // ["hell", " w", "rld"] 按照正则表达式对字符串进行切割,得到一个新值,原数据不变
s2.replace(/o/g, "s"); // "hells wsrld" 对字符串按照正则进行替换
// 关于匹配模式:g和i的简单示例
var s1 = "name:Alex age:18";
s1.replace(/a/, "哈哈哈"); // "n哈哈哈me:Alex age:18"
s1.replace(/a/g, "哈哈哈"); // "n哈哈哈me:Alex 哈哈哈ge:18" 全局匹配
s1.replace(/a/gi, "哈哈哈"); // "n哈哈哈me:哈哈哈lex 哈哈哈ge:18" 不区分大小写
// 注意事项1:
// 如果regExpObject带有全局标志g,test()函数不是从字符串的开头开始查找,而是从属性regExpObject.lastIndex所指定的索引处开始查找。
// 该属性值默认为0,所以第一次仍然是从字符串的开头查找。
// 当找到一个匹配时,test()函数会将regExpObject.lastIndex的值改为字符串中本次匹配内容的最后一个字符的下一个索引位置。
// 当再次执行test()函数时,将会从该索引位置处开始查找,从而找到下一个匹配。
// 因此,当我们使用test()函数执行了一次匹配之后,如果想要重新使用test()函数从头开始查找,则需要手动将regExpObject.lastIndex的值重置为 0。
// 如果test()函数再也找不到可以匹配的文本时,该函数会自动把regExpObject.lastIndex属性重置为 0。
var reg3 = /foo/g;
// 此时 regex.lastIndex=0
reg3.test('foo'); // 返回true
// 此时 regex.lastIndex=3
reg3.test('xxxfoo'); // 还是返回true
// 所以我们在使用test()方法校验一个字符串是否完全匹配时,一定要加上^和$符号,把匹配规则写的确定一些,尽量不用上面这种的写法/xxx/。
// 注意事项2(说出来你可能不信系列):
// 当我们不加参数调用RegExpObj.test()方法时, 相当于执行RegExpObj.test(undefined),然后将这个undefined又转为字符串"undefined",去进行匹配了, 并且/undefined/.test()默认返回true。
var reg4 = /^undefined$/;
reg4.test(); // 返回true
reg4.test(undefined); // 返回true
reg4.test("undefined"); // 返回true
Date对象
//方法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 a = new Date();
alert(a.getFullYear()+"-"+a.getMonth()+"-"+a.getDate()+" "+a.getHours()+":"+a.getMinutes()+"星期"+a.getDay())
var d = new Date();
//getDate() 获取日
//getDay () 获取星期 ,数字表示(0-6),周日数字是0
//getMonth () 获取月(0-11,0表示1月,依次类推)
//getFullYear () 获取完整年份
//getHours () 获取小时
//getMinutes () 获取分钟
//getSeconds () 获取秒
//getMilliseconds () 获取毫秒
//getTime () 返回累计毫秒数(从1970/1/1午夜),时间戳
JSON对象
var str = '{"name":"tj","age":18}';
var obj = {"name":"tj","age":18};
var obj1 = JSON.parse(str);//将字符串转换为对象
var str1 =JSON.stringify(obj);//将对象转换为字符串
alert(obj1);
alert(str1);
BOM和DOM
BOM
BOM(Browser Object Model)是指浏览器对象模型,它使 JavaScript 有能力与浏览器进行“对话”。
window对象:
所有浏览器都支持 window 对象。它表示浏览器窗口。
所有 JavaScript 全局对象、函数以及变量均自动成为 window 对象的成员。
全局变量是 window 对象的属性。全局函数是 window 对象的方法。
接下来要讲的HTML DOM 的 document 也是 window 对象的属性之一。
一些常用的Window方法:(在浏览器调试器的console里面输入下面这些属性或者方法,就能看到对应的效果)
window常用属性:
window.innerHeight - 浏览器窗口的内部高度
window.innerWidth - 浏览器窗口的内部宽度
window.open() - 打开新窗口
window.close() - 关闭当前窗口 (只能关闭用js的window.open()打开的页面,了解一下就行了)
1.location对象*************
window的子对象 : window.location
属性:
window.location.href //查看当前网页的url
window.location.href='http://www.baidu.com' //修改当前网页的url.修改之后会跳转
方法:
window.location.reload() //刷新页面
2.navigator对象
window.navigator 的一些属性可以获取客户端的一些信息。
userAgent:系统,浏览器)
platform:浏览器支持的系统,win/mac/linux
console.log(navigator.userAgent);
console.log(navigator.platform);
3. history对象
后退:
history.back()
history.go(-1):0是刷新
前进:
history.forward()
history.go(1)
4.screen对象
screen.availWidth //可用的屏幕宽度
screen.availHeight //可用的屏幕高度
5.定时器**************
-
setInterval
setInterval : 每隔一段时间就完成某个操作 var tid = setIterval("func()",n) //每隔n毫秒就调用一次func函数 var tid = setInterval(func,n) calearInterval(tid) //清除定时器
-
setTimeout
setTimeout : 每隔一段时间之后执行一次来完成某个操作 var tid = setTimeout(fn,n) //n毫秒之后只调用一次fn函数 var tid = setTimeout("fn()",n) clearTimeout(tid) //清楚定时器 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <style> .box{ width: 100px; height: 100px; background-color: lightcoral; } </style> <body> <div id="box" class="box"></div> </body> <script> // window.setTimeout(fn,2000) // function fn() { // alert('两秒后弹出警告框...') // } setInterval(fn,500) // 每0.5秒调用一次函数 function fn() { var box = document.getElementById('box') //获取事件对象 box.classList.toggle('box') // 如果存在class='box'就删除,不存在就添加 } </script> </html>
6.onscroll事件
window.onscroll //在页面的滚动条滚动的时候触发的事件
document.documentElement.scrollTop //针对获取浏览器的垂直滚动条的位置
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<style>
div{
height: 2000px;
}
a{
display: none;
position: fixed;
bottom: 20px;
right: 20px;
}
</style>
<body>
<div></div>
<a href="#" id="back">回到顶部</a>
</body>
<script>
window.onscroll = function () {
var a = document.getElementById('back')
console.log(document.documentElement.scrollTop)
if(document.documentElement.scrollTop>500){
a.style.display = 'block'
}else{
a.style.display = 'none'
}
}
</script>
</html>
DOM
DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素
1.整个文档就是一棵树,数中的每一个节点都是一个对象:这个对象中维系着属性信息 文本信息 关系信息
2.整个文档是从上到下依次加载的,当加载到script标签的时候,会有一个特殊的变量提升的解析方法,导致后定义的函数可以提前被调用
DOM标准规定HTML文档中的每个成分都是一个节点(node):
文档节点(document对象):代表整个文档
元素节点(element 对象):代表一个元素(标签)
文本节点(text对象):代表元素(标签)中的文本
属性节点(attribute对象):代表一个属性,元素(标签)才有属性
注释是注释节点(comment对象)
JavaScript 可以通过DOM创建动态的 HTML:
JavaScript 能够改变页面中的所有 HTML 元素
JavaScript 能够改变页面中的所有 HTML 属性
JavaScript 能够改变页面中的所有 CSS 样式
JavaScript 能够对页面中的所有事件做出反应(鼠标点击事件,鼠标移动事件等)
查找标签
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="foo">
父级标签
<div id="son">
儿子标签1
<img src="" alt="">
</div>
<div id="son1">
儿子标签2
<a href="#" class="href"></a>
<a href="#" class="href"></a>
<a href="#" class="href"></a>
</div>
</div>
</body>
</html>
****************直接查找******************
1.document.getElementById('foo');通过ID获取标签
<div id="foo">
父级标签
<div id="son">
儿子标签1
<img src="" alt="">
</div>
<div id="son1">
儿子标签2
<a href="#" class="href"></a>
<a href="#" class="href"></a>
<a href="#" class="href"></a>
</div>
</div>
2.document.getElementsByClassName('href');通过类名获取id,返回数组
HTMLCollection(3) [a.href, a.href, a.href]
0: a.href
1: a.href
2: a.href
length: 3
3.document.getElementsByTagName('a');通过标签名直接获取,返回数组
HTMLCollection(3) [a.href, a.href, a.href]
0: a.href
1: a.href
2: a.href
length: 3
*************间接查找****************
var s = document.getElementById('son1')
s.parentElement 父节点标签元素
s.children 所有子标签
s.firstElementChild 第一个子标签元素
s.lastElementChild 最后一个子标签元素
s.nextElementSibling 下一个兄弟标签元素
s.previousElementSibling 上一个兄弟标签元素
节点操作
1.创建节点(就是创建标签)
语法:var divEle = document.createElement("div");
var div1 = document.createElement('div');
div1.innerText='啦啦'
var a1 = document.createElement('a');
a1.href = 'http://www.baidu.com'
"http://www.baidu.com"
2.添加节点
var div3 = document.createElement('div');
var div4 = document.createElement('div');
div3.appendChild(div4);
在div3中添加子元素div4
3.删除节点
语法:
获得要删除的元素,通过父元素调用该方法删除。
父节点.removeChild(要删除的节点)
4.替换节点
语法:
somenode.replaceChild(newnode, 某个节点);
somenode是父级标签,然后找到这个父标签里面的要被替换的子标签,然后用新的标签将该子标签替换掉
5.属性节点
var divEle = document.getElementById("d1")
divEle.innerText #输入这个指令,一执行就能获取该标签和内部所有标签的文本内容
divEle.innerHTML #获取的是该标签内的所有内容,包括文本和标签
设置文本节点的值
var divEle = document.getElementById("d1")
divEle.innerText="1"
divEle.innerHTML="<p>2</p>" #能识别成一个p标签
6.attribute操作
var divEle = document.getElementById("d1");
divEle.setAttribute("age","18") #比较规范的写法
divEle.getAttribute("age")
divEle.removeAttribute("age")
// 自带的属性还可以直接.属性名来获取和设置,如果是你自定义的属性,是不能通过.来获取属性值的
imgEle.src
imgEle.src="..."
7.获取值操作
适用于以下标签,用户输入或者选择类型的标签:
1.input
2.select
3.textarea
var iEle = document.getElementById("i1");
console.log(iEle.value);
var sEle = document.getElementById("s1");
console.log(sEle.value);
var tEle = document.getElementById("t1");
console.log(tEle.value);
iEle.innerHTML获取标签的文本内容
8.class的操作
className 获取所有样式类名(字符串)
首先获取标签对象
标签对象.classList.remove(cls) 删除指定类
classList.add(cls) 添加类
classList.contains(cls) 存在返回true,否则返回false
classList.toggle(cls) 存在就删除,否则添加,toggle的意思是切换,有了就给你删除,如果没有就给你加一个
指定CSS操作
var d = document.getElementById('d1')
1.对于没有中横线的CSS属性一般直接使用style.属性名即可。如:
d.style.backgroundColor = 'black'
d.style.width = '100px'
d.style.height = '200px
d.style.height = '200px'
2.对含有中横线的CSS属性,将中横线后面的第一个字母换成大写即可。如:
d.style.marginTop
d.style.borderLeftWidth
d.style.zIndex
d.style.fontFamily
jquery
jquery引入
下载链接:jQuery官网 https://jquery.com/
中文文档:jQuery AP中文文档
<script src="jquery.js"></script>
<script>
</script>
第二种方式,网络地址引入
<!--<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
jquery对象和dom对象互相转换
/jQuery对象转成DOM对象,通过一个jQuery对象+[0]索引零,就变成了DOM对象,就可以使用JS的代码方法了,DOM对象转换成jQuery对象:$(DOM对象),通过$符号包裹一下就可以了
jquery对象 转换成 dom对象 : $('#d1')[0] -- dom对象
dom对象转换为jquery对象 : $(dom对象) -- jquery对象
标签查找
基础选择器
基本选择器(同css)
id选择器:
$("#id") #不管找什么标签,用什么选择器,都必须要写$(""),引号里面再写选择器,通过jQuery找到的标签对象就是一个jQuery对象,用原生JS找到的标签对象叫做DOM对象,看我们上面的jQuery对象部分的内容
标签选择器:$("tagName")
class选择器:$(".className")
配合使用:$("div.c1") // 找到有c1 class类的div标签
所有元素选择器:$("*")
组合选择器$("#id, .className, tagName")
层级选择器
x和y可以为任意选择器
$("x y");// x的所有后代y(子子孙孙)
$("x > y");// x的所有儿子y(儿子)
$("x + y")// 找到所有紧挨在x后面的y
$("x ~ y")// x之后所有的兄弟y
基本筛选器
:first // 第一个
:last // 最后一个
:eq(index)// 索引等于index的那个元素
:even // 匹配所有索引值为偶数的元素,从 0 开始计数
:odd // 匹配所有索引值为奇数的元素,从 0 开始计数
:gt(index) // 匹配所有大于给定索引值的元素
:lt(index) // 匹配所有小于给定索引值的元素
:not(元素选择器)// 移除所有满足not条件的标签
:has(元素选择器)// 选取所有包含一个或多个标签在其内的标签(指的是从后代元素找)
示例写法:$('li:has(span)');
$("div:has(h1)")// 找到所有后代中有h1标签的div标签,意思是首先找到所有div标签,把这些div标签的后代中有h1的div标签筛选出来
$("div:has(.c1)")// 找到所有后代中有c1样式类(类属性class='c1')的div标签
$("li:not(.c1)")// 找到所有不包含c1样式类的li标签
$("li:not(:has(a))")// 找到所有后代中不含a标签的li标签
绑定选择器
// 绑定事件的方法
$('#btn').click(function () {
$('.mode')[0].classList.remove('hide');
$('.shadow')[0].classList.remove('hide');
jquery写法:
$('.mode,.shadow').removeClass('hide');
})
属性选择器
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
用户名:<input type="text">
密码:<input type="password">
<br>
性别:<input type="radio" name="sex" value="1">男
<input type="radio" name="sex" value="2">女
<br>
爱好:<input type="checkbox" name="hobby">抽烟
<input type="checkbox" name="hobby">喝酒
<input type="checkbox" name="hobby">烫头
<script src="jQuery下载.js"></script>
</body>
</html>
[attribute]
[attribute=value]// 属性等于
[attribute!=value]// 属性不等于
示例:
$('[title]')
// 示例,多用于input标签
<input type="text">
<input type="password">
<input type="checkbox">
$("input[type='checkbox']");// 取到checkbox类型的input标签
$("input[type!='text']");// 取到类型不是text的input标签
表单筛选器
:text
:password
:file
:radio
:checkbox
:submit
:reset
:button
简单示例:
<div>
用户名: <input type="text">
</div>
<div>
密码: <input type="password">
</div>
<div>
sex:
<input type="radio" name="sex">男
<input type="radio" name="sex">女
<input type="radio" name="sex">不详
</div>
找到type为text的input标签:$(':text')
表单对象属性
:enabled //查看可用标签
:disabled //查看不可用标签
:checked //查看单选框标签
:selected //查看多选框标签
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
用户名:<input type="text">
密码:<input type="password" disabled>
<br>
性别:<input type="radio" name="sex" value="1">男
<input type="radio" name="sex" value="2">女
<br>
爱好:<input type="checkbox" name="hobby">抽烟
<input type="checkbox" name="hobby">喝酒
<input type="checkbox" name="hobby">烫头
<br>
<select name="" id="s">
<option value="1">八戒</option>
<option value="2">莎莎</option>
<option value="3">悟空</option>
<option value="4">小白</option>
</select>
<script src="jQuery下载.js"></script>
</body>
</html>
$(':selected') //获取选择的下拉选框标签
$(':selected').text() //获取选择的下拉选框文本内容
链式表达式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div class="d1">
<ul class="u1">
<li class="c1">北京</li>
<li>上海</li>
<li class="c2">天津</li>
<li>河北</li>
<li>唐山</li>
<li>石家庄</li>
<li>成都</li>
</ul>
<ul>
<li class="city">南京</li>
</ul>
</div>
</body>
<script src="jQuery下载.js"></script>
</html>
$('li:first').next().css('color','red').next().css('color','red')
先找到第一个li标签,在找下一个标签(next),在添加样式,在找下一个标签,在添加样式
筛选器方法
下一个
$("#id").next()
$("#id").nextAll()
$("#id").nextUntil("#i2") #直到找到id为i2的标签就结束查找,不包含它
上一个
$("#id").prev()
$("#id").prevAll()
$("#id").prevUntil("#i2")
<ul>
<li>八戒</li>
<li>悟空</li>
<li class="c1">小李</li>
<li>小白</li>
<li>峡谷先锋</li>
<li class="c2">莎莎</li>
<li>小强</li>
</ul>
示例:
$('li:first').next() 找到第一个标签的下一个标签
$('.c2').prevUntil('.c1');
把筛选器封装成一个方法
$('.c1:first') = $('.c1').first()
.first() // 获取匹配的第一个元素
.last() // 获取匹配的最后一个元素
.not() // 从匹配元素的集合中删除与指定表达式匹配的元素
.has() // 保留包含特定后代的元素,去掉那些不含有指定后代的元素。
.eq() // 索引值等于指定值的元素
操作标签
样式操作
样式类操作
addClass();// 添加指定的CSS类名.
removeClass();// 移除指定的CSS类名。
hasClass();// 判断样式存不存在
toggleClass();// 切换CSS类名,如果有就移除,如果没有就添加。
css操作
单个方式:$('div').css('background-color','green');
多个方式:$('div').css({'background-color':'yellow','width':'400px'});
位置操作
offset()// 获取匹配元素在当前窗口的相对偏移或设置元素位置
position()// 获取匹配元素相对父元素的偏移,不能设置位置
.offset()方法允许我们检索一个元素相对于文档(document)的当前位置。和 .position()的差别在于: .position()获取相对于它最近的具有相对位置(position:relative或position:absolute)的父级元素的距离,如果找不到这样的元素,则返回相对于浏览器的距离
示例:
$('.c2').offset(); 查看位置
$('.c2').offset({top:100,left:200}); 设置位置
代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
/*body{*/
/* margin: 0;*/
/*}*/
.c1{
background-color: red;
height: 100px;
width: 100px;
display: inline-block;
}
.c2{
background-color: green;
height: 100px;
width: 100px;
display: inline-block;
}
</style>
</head>
<body>
<div class="cc">
<div class="c1"></div><div class="c2"></div>
</div>
<script src="jquey.js"></script>
</body>
</html>
$(window).scrollTop() //滚轮向下移动的距离
$(window).scrollLeft() //滚轮向左移动的距离
尺寸
height() //盒子模型content的大小,就是我们设置的标签的高度和宽度
width()
innerHeight() //内容content高度 + 两个padding的高度
innerWidth()
outerHeight() //内容高度 + 两个padding的高度 + 两个border的高度,不包括margin的高度,因为margin不是标签的,是标签和标签之间的距离
outerWidth()
示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.c1{
width: 100px;
height: 100px;
padding: 20px 30px;
border: 2px solid red;
}
</style>
</head>
<body>
<div class="c1"></div>
</body>
<script src="jquery.js"></script>
</html>
操作:
$('.c1').height();
$('.c1').width();
$('.c1').innerWidth();
$('.c1').outerWidth();
文本操作
html()// 取得第一个匹配元素的html内容,包含标签内容
html(val)// 设置所有匹配元素的html内容,识别标签,能够表现出标签的效果
text()// 取得所有匹配元素的内容,只有文本内容,没有标签
text(val)// 设置所有匹配元素的内容,不识别标签,将标签作为文本插入进去
示例:
取值
$('.c1').html();
$('.c1').text();
设置值
$('.c1').text('<a href="">百度</a>');
$('.c1').html('<a href="">百度</a>');
值操作
取值:
文本输入框:$('#username').val();
input,type=radio单选框: $('[type="radio"]:checked').val();,首先找到被选中的标签,再进行取值
input,type=checkbox多选框: 通过val方法不能直接获取多选的值,只能拿到一个,想拿到多个项的值,需要循环取值
var d = $('[type="checkbox"]:checked');
for (var i=0;i<d.length;i++){
console.log(d.eq(i).val());
}
单选下拉框select: -- $('#s1').val();
多选下拉框select: -- $('#s2').val(); -- ['1','2']
设置值
文本输入框: -- $('#username').val('xxx');
input,type=radio单选框: -- $(':radio').val(['1']) 找到所有的radio,然后通过val设置值,达到一个选中的效果.
给单选或者多选框设置值的时候,只要val方法中的值和标签的value属性对应的值相同时,那么这个标签就会被选中.
此处有坑:$(':radio').val('1');这样设置值,不带中括号的,意思是将所有的input,type=radio的标签的value属性的值设置为1.
input,type=checkbox多选框: -- $(':checkbox').val(['1','2']);
单选下拉框select: -- $('#s1').val(['3']);
多选下拉框select: -- $('#s2').val(['1','2']);
统一一个方法:
选择框都用中括号设置值.
获取内容
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
用户名:<input type="text">
密码:<input type="password">
<br>
性别:<input type="radio" name="sex" value="1">男
<input type="radio" name="sex" value="2">女
<br>
爱好:<label >
<input type="checkbox" name="hobby" value="1">抽烟
</label>
<input type="checkbox" name="hobby" value="2">喝酒
<input type="checkbox" name="hobby" value="3">烫头
<script src="jQuery下载.js"></script>
</body>
</html>
$('input[type="checkbox"]:checked').eq(0).parent().text() 获取选中的多选框内容文本
属性操作
设置属性: -- $('#d1').attr({'age1':'18','age2':'19'});
单个设置:$('#d1').attr('age1','18');
查看属性值: -- $('#d1').attr('age1');
删除属性: -- $('#d1').removeAttr('age1'); 括号里面写属性名称
prop和attr方法的区别:
总结一下:
1.对于标签上有的能看到的属性和自定义属性都用attr
2.对于返回布尔值的比如checkbox、radio和option的是否被选中或者设置其被选中与取消选中都用prop。
具有 true 和 false 两个属性的属性,如 checked, selected 或者 disabled 使用prop(),其他的使用 attr()
checked示例:
attr():
查看值,checked 选中--'checked' 没选中--undefined
$('#nv').attr({'checked':'checked'});
设置值,attr无法完成取消选中
$('#nv').attr({'checked':'undefined'});
$('#nv').attr({'checked':undefined});
prop():
查看值,checked 选中--true 没选中--false
$(':checkbox').prop('checked');
$('input[value=4]:checked').prop('checked')
根据value查看选中的选项是否被选中,选中就返回true,否则返回undefined
设置值:
$(':checkbox').prop('checked',true);
$(':checkbox').prop('checked',false);
文档处理
姿势1:添加到指定元素内部的后面
$(A).append(B)// 把B追加到A
$(A).appendTo(B)// 把A追加到B
append示例:
方式1:
创建标签
var a = document.createElement('a');
$(a).text('百度');
$(a).attr('href','http://www.baidu.com');
$('#d1').append(a);
方式2:(重点)
$('#d1').append('<a href="xx">京东</a>');
appendto示例
$(a).appendTo('#d1');
姿势2:添加到指定元素内部的前面
$(A).prepend(B)// 把B前置到A
$(A).prependTo(B)// 把A前置到B
姿势3:添加到指定元素外部的后面
$(A).after(B)// 把B放到A的后面
$(A).insertAfter(B)// 把A放到B的后面
姿势4:
$(A).before(B)// 把B放到A的前面
$(A).insertBefore(B)// 把A放到B的前面
移除和清空元素
remove()// 从DOM中删除所有匹配的元素。
empty()// 删除匹配的元素集合中所有的子节点,包括文本被全部删除,但是匹配的元素还在
示例:
$('#d1').remove();
$('#d1').empty();
替换:
replaceWith()
replaceAll()
示例:
$('#d1').replaceWith(a); 用a替换前面的标签
$(a).replaceAll('#d1');
克隆(复制标签)
示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<button class="btn">屠龙宝刀,点击就送!</button>
</body>
<script src="jquery.js"></script>
<script>
$('.btn').click(function () {
// var btnEle = $(this).clone(); // 不带参数的克隆不能克隆绑定的事件
var btnEle = $(this).clone(true); // 参数写个true,就能复制事件
$(this).after(btnEle);
})
</script>
</html>
事件
绑定事件的两种方式:
// 绑定事件的方式1
// $("#d1").click(function () {
// $(this).css('background-color','green');
// })
// 方式2
$('#d1').on('click',function () {
$(this).css('background-color','green');
})
常用事件
click(function(){...})
hover(function(){...})
blur(function(){...})
focus(function(){...})
change(function(){...}) //内容发生变化,input,select等
keyup(function(){...})
mouseover 和 mouseenter的区别是:mouseover事件是如果该标签有子标签,那么移动到该标签或者移动到子标签时会连续触发,mmouseenter事件不管有没有子标签都只触发一次,表示鼠标进入这个对象
示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
#d1{
background-color: red;
height: 200px;
width: 200px;
}
#d2{
background-color: green;
height: 200px;
width: 200px;
}
.dd1{
background-color: yellow;
height: 40px;
width: 40px;
}
.dd2{
background-color: pink;
height: 40px;
width: 40px;
}
</style>
</head>
<body>
<div id="d1">
<div class="dd1"></div>
</div>
<div id="d2">
<div class="dd2"></div>
</div>
用户名:<input type="text" id="username">
<br>
<!--<select name="" id="s1">-->
<!-- <option value="1">上海</option>-->
<!-- <option value="2">深圳</option>-->
<!-- <option value="3">贵州</option>-->
<!--</select>-->
<input type="text" id="xxx">
</body>
<script src="jquery.js"></script>
<script>
// 绑定事件的方式1
// $("#d1").click(function () {
// $(this).css('background-color','green');
// })
// 方式2
// $('#d1').on('click',function () {
// $(this).css('background-color','green');
// });
//
//获取光标触发的事件
// $('#username').focus(function () {
// $(this).css('background-color','green');
// });
// 失去光标触发的事件
// $('#username').blur(function () {
// $(this).css('background-color','white');
// });
// 域内容发生变化触发的事件,一般用于select标签
// $('#s1').change(function () {
// // $('#d1').css('background-color','black');
// console.log('xxxxx')
// });
// $('#xxx').change(function () {
// console.log($(this).val());
// })
// 输入内容实时触发的事件,input事件只能on绑定
// $('#xxx').on('input',function () {
// console.log($(this).val());
// });
//
// //绑定多个事件 事件名称空格间隔
// $('#xxx').on('input blur',function () {
// console.log($(this).val());
// })
// 鼠标进入触发的事件
// $('#d1').mouseenter(function () {
// $(this).css('background-color','green');
// });
// // 鼠标离开触发的事件
// $('#d1').mouseout(function () {
// $(this).css('background-color','red');
// });
// hover事件 鼠标进进出出的事件
// $('#d1').hover(
// // 鼠标进入
// function () {
// $(this).css('background-color','green');
// },
// // 鼠标离开
// function () {
// $(this).css('background-color','red');
// }
// );
$('#d1').mouseenter(function () {
console.log('xxx');
});
$('#d2').mouseover(function () {
console.log('ooo');
});
// 键盘按下
// $(window).keydown(function (e) {
// console.log(e.keyCode);
//
// });
// 键盘抬起
$(window).keyup(function (e) {
console.log(e.keyCode);
});
</script>
</html>
移除事件(不常用)
.off( events [, selector ][,function(){}])
off() 方法移除用 .on()绑定的事件处理程序。
$("li").off("click");就可以了
事件冒泡
// 事件冒泡,子标签和父标签(祖先标签)绑定了相同的事件,比如点击事件,那么当你点击子标签时,会一层一层的往上触发父级或者祖父级等等的事件
$('.c1').click(function () {
alert('父级标签!!!');
});
$('.c2').click(function (e) {
alert('子标签~~~');
// 阻止事件冒泡(阻止事件发生)
return false; //方式1
// e.stopPropagation() // 方式2
})
事件委托
<div id="d1">
<button class="btn">屠龙宝刀,点击就送!</button>.
</div>
// 事件委托
$('#d1').on('click','.btn',function () {
// $(this)是你点击的儿子标签
var a= $(this).clone();
$('#d1').append(a);
});
//中间的参数是个选择器,前面这个$('table')是父级标签选择器,选择的是父级标签,意思就是将子标签(子子孙孙)的点击事件委托给了父级标签
//但是这里注意一点,你console.log(this);你会发现this还是触发事件的那个子标签,这个记住昂
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="d1">
<button class="btn">屠龙宝刀,点击就送!!!!</button>
</div>
</body>
<script src="jQuery下载.js"></script>
<script>
$('#d1').on('click','.btn',function () {
var a = $(this).clone();//this表示儿子标签,如果在添加按钮,依然是一个儿子标签,在点击儿子标签按钮依然会触发父级标签
$('#d1').append(a)
})
</script>
</html>
<!--代码从上到下执行,当执型到事件时,给按钮添加绑定事件,然后如果在添加新的button按钮,就不会再绑定事件,
所以,新的按钮不会有事件发生.-->
<!--事件委托,把btn这个类选择器触发的点击事件委托给父级标签(基于事件冒泡,当点击当前标签时,会一层一层向上找),所以用事件委托,
委托给父级标签来触发这个点击事件-->
bootstrap
官网:https://www.bootcss.com/
模板
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
<title>Bootstrap 101 Template</title>
<!-- Bootstrap -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 -->
<!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 -->
<!--[if lt IE 9]>
<script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script>
<![endif]-->
</head>
<body>
<h1>你好,世界!</h1>
<!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
<script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"></script>
<!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"></script>
</body>
</html>
例子:
栅格系统
栅格系统的嵌套
需求:利用栅格分18个元素,可以先分3个格,3个格里按12个格在平均分6个
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" >
<style>
.col-md-4{
border: 1px solid black;
}
</style>
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-4">
<div class="row">
<div class="col-md-2">.col-md-6</div>
<div class="col-md-2">.col-md-6</div>
<div class="col-md-2">.col-md-6</div>
<div class="col-md-2">.col-md-6</div>
<div class="col-md-2">.col-md-6</div>
<div class="col-md-2">.col-md-6</div>
</div>
</div>
<div class="col-md-4">
<div class="row">
<div class="col-md-2">.col-md-6</div>
<div class="col-md-2">.col-md-6</div>
<div class="col-md-2">.col-md-6</div>
<div class="col-md-2">.col-md-6</div>
<div class="col-md-2">.col-md-6</div>
<div class="col-md-2">.col-md-6</div>
</div>
</div>
<div class="col-md-4">
<div class="row">
<div class="col-md-2">.col-md-6</div>
<div class="col-md-2">.col-md-6</div>
<div class="col-md-2">.col-md-6</div>
<div class="col-md-2">.col-md-6</div>
<div class="col-md-2">.col-md-6</div>
<div class="col-md-2">.col-md-6</div>
</div>
</div>
</div>
</div>
</body>
</html>
找到需要的样式,复制!!!!