table:设置符号的类型
table:定义表格
width:宽度
border:边框
cellpadding:定义内容和单元格的距离
cellspacing:定义单元格之间的距离。如果指定为0,则单元格的线会合为一条、
bgcolor:背景色
align:对齐方式
tr:定义行
td:定义单元格
th:定义表头单元格
:表格标题
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 表格 title>
head>
< body>
< table border = " 1px" align = " center" >
< tr>
< th colspan = " 4" align = " center" > 斗罗大陆 th>
tr>
< tr>
< td> 名字 td>
< td> 年龄 td>
< td> 性别 td>
< td> 门派 td>
tr>
< tr>
< td> 唐三 td>
< td> 18 td>
< td> 男 td>
< td> 唐门 td>
tr>
< tr>
< td> 小舞 td>
< td> 19 td>
< td> 女 td>
< td> 唐门 td>
tr>
< tr>
< td> 宁荣荣 td>
< td> 20 td>
< td> 男 td>
< td> 七宝琉璃宗 td>
tr>
table>
< hr>
< table border = " 1px" align = " center" >
< tr>
< td colspan = " 2" align = " center" > 1-1 td>
< td rowspan = " 2" > 1-3 td>
tr>
< tr>
< td rowspan = " 2" > 2-1 td>
< td> 2-2 td>
tr>
< tr>
< td colspan = " 2" align = " center" > 3-2 td>
tr>
table>
< hr>
< table border = " 1px" align = " center" >
< caption> 购物车 caption>
< tr>
< th> 编号 th>
< th> 商品 th>
< th> 价格 th>
tr>
< tr>
< td> 1 td>
< td> 小米12 pro td>
< td> 5000 td>
tr>
< tr>
< td> 2 td>
< td> 小米透明电视 td>
< td> 7000 td>
tr>
< tr>
< td> 总价: td> < td colspan = " 2" align = " center" > 12000 td>
tr>
table>
body>
html>
1.4.6 分区标签
作用:可以理解为一个容器,将多个有相关性的标签进行统一管理
标签
描述
块级分区标签: 特点是独占一行,定义 HTML 文档中的一个区域部分,用来布局网页
行内分区标签: 特点是共占一行,用于组合行内元素,不能修改宽高。
HTML5的标准中新增了一些语义更强的分区标签,为了提高代码的可读性. 这几个标签的作用和div一样都是块级分区标签:
header头
footer页尾
main主体
section区域
nav 导航
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 分区标签 title>
head>
< body>
< div> 块级分区标签1 div>
< div> 块级分区标签2 div>
< div> 块级分区标签3 div>
< span> 行内分区标签1 span>
< span> 行内分区标签2 span>
< span> 行内分区标签3 span>
< header> header>
< footer> footer>
< main> main>
< section> section>
< nav> nav>
body>
html>
1.4.7 表单标签
作用: 获取用户输入的各种信息 并提交给服务器
1. form标签属性
2 表单项标签
type 取值
描述
text
默认值。定义单行的输入字段
password
定义密码字段
radio
定义单选按钮
checkbox
定义复选框
file
定义文件上传按钮
hidden
定义隐藏的输入字段
submit
定义提交按钮,提交按钮会把表单数据发送到服务器
reset
定义重置按钮,重置按钮会清除表单中的所有数据
button
定义可点击按钮
date
选择日期按钮
其他标签:
标签
描述
maxlength
最大字符串长度
value
设置默认值
readonly
只读
value
是单选框必须添加的属性 否则提交on
checke
默认选中
注意:
以上标签项的内容要想提交,必须得定义 name
属性。
每一个标签都有id属性,id属性值是唯一的标识。
单选框、复选框、下拉列表需要使用 value
属性指定提交的值。
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 表单form title>
head>
< body>
< form action = " www.baidu.com" method = " get" >
用户名:< input type = " text" name = " username" maxlength = " 5" value = " user1" readonly > < br>
密 码:< input type = " password" name = " password" value = " 123" > < br>
性别:< input type = " radio" name = " gender" checked value = " 1" id = " r1" >
< label for = " r1" > 男 label>
< input type = " radio" name = " gender" value = " 0" id = " r2" >
< label for = " r2" > 女 label> < br>
爱好:< input type = " checkbox" name = " hobby" value = " cy" > 抽烟
< input type = " checkbox" name = " hobby" value = " hj" > 喝酒
< input type = " checkbox" name = " hobby" checked value = " tt" > 烫头< br>
生日:< input type = " date" name = " birthday" > < br>
靓照:< input type = " file" name = " pic" > < br>
家乡:< select name = " city" >
< option> ---请选择--- option>
< option> 南宁 option>
< option> 百色 option>
< option> 河池 option>
< option> 柳州 option>
< option> 桂林 option>
< option> 北京 option>
select> < br>
< input type = " submit" value = " 注册" >
form>
body>
html>
1.4.8 html特殊字符编码
字符 十进制字符编号 实体名字 说明
! ! — 惊叹号Exclamation mark
” " " 双引号Quotation mark
# # — 数字标志Number sign
$ $ — 美元标志Dollar sign
% % — 百分号Percent sign
& & & Ampersand
‘ ' — 单引号Apostrophe
( ( — 小括号左边部分Left parenthesis
) ) — 小括号右边部分Right parenthesis
* * — 星号Asterisk
+ + — 加号Plus sign
, , — 逗号Comma
– - — 连字号Hyphen
. . — 句号Period (fullstop)
/ / — 斜杠Solidus (slash)
0 0 — 数字0 Digit 0
1 1 — 数字1 Digit 1
2 2 — 数字2 Digit 2
3 3 — 数字3 Digit 3
4 4 — 数字4 Digit 4
5 5 — 数字5 Digit 5
6 6 — 数字6 Digit 6
7 7 — 数字7 Digit 7
8 8 — 数字8 Digit 8
9 9 — 数字9 Digit 9
: : — 冒号Colon
; ; — 分号Semicolon
< < < 小于号Less than
= = — 等于符号Equals sign
> > > 大于号Greater than
? ? — 问号Question mark
@ @ — Commercial at
A A — 大写A Capital A
B B — 大写B Capital B
C C — 大写C Capital C
D D — 大写D Capital D
E E — 大写E Capital E
F F — 大写F Capital F
G G — 大写G Capital G
H H — 大写H Capital H
I I — 大写J Capital I
J J — 大写K Capital J
K K — 大写L Capital K
L L — 大写K Capital L
M M — 大写M Capital M
N N — 大写N Capital N
O O — 大写O Capital O
P P — 大写P Capital P
Q Q — 大写Q Capital Q
R R — 大写R Capital R
S S — 大写S Capital S
T T — 大写T Capital T
U U — 大写U Capital U
V V — 大写V Capital V
W W — 大写W Capital W
X X — 大写X Capital X
Y Y — 大写Y Capital Y
Z Z — 大写Z Capital Z
[ [ — 中括号左边部分Left square bracket
\ \ — 反斜杠Reverse solidus (backslash)
] ] — 中括号右边部分Right square bracket
^ ^ — Caret
_ _ — 下划线Horizontal bar (underscore)
` ` — 尖重音符Acute accent
a a — 小写a Small a
b b — 小写b Small b
c c — 小写c Small c
d d — 小写d Small d
e e — 小写e Small e
f f — 小写f Small f
g g — 小写g Small g
h h — 小写h Small h
i i — 小写i Small i
j j — 小写j Small j
k k — 小写k Small k
l l — 小写l Small l
m m — 小写m Small m
n n — 小写n Small n
o o — 小写o Small o
p p — 小写p Small p
q q — 小写q Small q
r r — 小写r Small r
s s — 小写s Small s
t t — 小写t Small t
u u — 小写u Small u
v v — 小写v Small v
w w — 小写w Small w
x x — 小写x Small x
y y — 小写y Small y
z z — 小写z Small z
{ { — 大括号左边部分Left curly brace
| | — 竖线Vertical bar
} } — 大括号右边部分Right curly brace
~ ~ — Tilde
— — 未使用Unused
空格Nonbreaking space
¡ ¡ ¡ Inverted exclamation
¢ ¢ ¢ 货币分标志Cent sign
£ £ £ 英镑标志Pound sterling
¤ ¤ ¤ 通用货币标志General currency sign
¥ ¥ ¥ 日元标志Yen sign
¦ ¦ ¦ or &brkbar; 断竖线Broken vertical bar
§ § § 分节号Section sign
¨ ¨ ¨ or ¨ 变音符号Umlaut
© © © 版权标志Copyright
ª ª ª Feminine ordinal
« « « Left angle quote, guillemet left
¬ ¬ ¬ Not sign
Soft hyphen
® ® ® 注册商标标志Registered trademark
¯ ¯ ¯ or &hibar; 长音符号Macron accent
° ° ° 度数标志Degree sign
± ± ± 加或减Plus or minus
² ² ² 上标2 Superscript two
³ ³ ³ 上标3 Superscript three
´ ´ ´ 尖重音符Acute accent
µ µ µ Micro sign
¶ ¶ ¶ Paragraph sign
· · · Middle dot
¸ ¸ ¸ Cedilla
¹ ¹ ¹ 上标1 Superscript one
º º º Masculine ordinal
» » » Right angle quote, guillemet right
¼ ¼ ¼ 四分之一Fraction one-fourth
½ ½ ½ 二分之一Fraction one-half
¾ ¾ ¾ 四分之三Fraction three-fourths
¿ ¿ ¿ Inverted question mark
À À À Capital A, grave accent
Á Á Á Capital A, acute accent
   Capital A, circumflex
à à à Capital A, tilde
Ä Ä Ä Capital A, di?esis / umlaut
Å Å Å Capital A, ring
Æ Æ Æ Capital AE ligature
Ç Ç Ç Capital C, cedilla
È È È Capital E, grave accent
É É É Capital E, acute accent
Ê Ê Ê Capital E, circumflex
Ë Ë Ë Capital E, di?esis / umlaut
Ì Ì Ì Capital I, grave accent
Í Í Í Capital I, acute accent
Î Î Î Capital I, circumflex
Ï Ï Ï Capital I, di?esis / umlaut
Ð Ð Ð Capital Eth, Icelandic
Ñ Ñ Ñ Capital N, tilde
Ò Ò Ò Capital O, grave accent
Ó Ó Ó Capital O, acute accent
Ô Ô Ô Capital O, circumflex
Õ Õ Õ Capital O, tilde
Ö Ö Ö Capital O, di?esis / umlaut
× × × 乘号Multiply sign
Ø Ø Ø Capital O, slash
Ù Ù Ù Capital U, grave accent
Ú Ú Ú Capital U, acute accent
Û Û Û Capital U, circumflex
Ü Ü Ü Capital U, di?esis / umlaut
Ý Ý Ý Capital Y, acute accent
Þ Þ Þ Capital Thorn, Icelandic
ß ß ß Small sharp s, German sz
à à à Small a, grave accent
á á á Small a, acute accent
â â â Small a, circumflex
ã ã ã Small a, tilde
ä ä ä Small a, di?esis / umlaut
å å å Small a, ring
æ æ æ Small ae ligature
ç ç ç Small c, cedilla
è è è Small e, grave accent
é é é Small e, acute accent
ê ê ê Small e, circumflex
ë ë ë Small e, di?esis / umlaut
ì ì ì Small i, grave accent
í í í Small i, acute accent
î î î Small i, circumflex
ï ï ï Small i, di?esis / umlaut
ð ð ð Small eth, Icelandic
ñ ñ ñ Small n, tilde
ò ò ò Small o, grave accent
ó ó ó Small o, acute accent
ô ô ô Small o, circumflex
õ õ õ Small o, tilde
ö ö ö Small o, di?esis / umlaut
÷ ÷ ÷ 除号Division sign
ø ø ø Small o, slash
ù ù ù Small u, grave accent
ú ú ú Small u, acute accent
û û û Small u, circumflex
ü ü ü Small u, di?esis / umlaut
ý ý ý Small y, acute accent
þ þ þ Small thorn, Icelandic
ÿ ÿ ÿ Small y, umlaut
2 CSS 层叠样式表基本知识
Cascading Style Sheet(层叠样式表) 是一门语言,用于控制网页表现。
2.1 css 导入方式
css 导入方式其实就是 css 代码和 html 代码的结合方式。CSS 导入 HTML有三种方式:
内联样式:在标签内部使用style属性,属性值是css属性键值对
< div style = " color : red" > Hello CSS~ div>
给方式只能作用在这一个标签上,如果其他的标签也想使用同样的样式,那就需要在其他标签上写上相同的样式。复用性太差。
< style type = " text/css" >
div {
color : red;
}
style>
这种方式可以做到在该页面中复用。
div {
color : red;
}
在html中引入 css 文件。
< link rel = " stylesheet" href = " demo.css" >
这种方式可以在多个页面进行复用。其他的页面想使用同样的样式,只需要使用 link
标签引入该css文件。
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> Css引入方式 title>
< link rel = " stylesheet" href = " css/my.css" >
head>
< style>
h2 {
color : blue;
}
style>
< body>
< h1 style = " color : red; " > 内联样式1 h1>
< h1 style = " color : blueviolet; " > 内联样式2 h1>
< h2> 内部样式1 h2>
< h2> 内部样式2 h2>
< h3> 引入样式1 h3>
< h3> 引入样式2 h3>
body>
html>
2.2 css 选择器
css 选择器就是选取需设置样式的元素(标签),比如如下css代码:
div {
color : red;
}
如上代码中的 div
就是 css 中的选择器。我们只讲下面三种选择器:
元素名称 { color : red; }
例子:
div { color : red}
#id属性值 { color : red; }
例子:
html代码如下:
< div id = " name" > hello css2 div>
css代码如下:
#name { color : red; }
.class属性值 { color : red; }
例子:
html代码如下:
< div class = " cls" > hello css3 div>
css代码如下:
.cls { color : red; }
分组选择器: 分组选择器可以将多个选择器合并成一个 格式:
h4,#id,.class { 样式代码}
标签名[属性名="属性值"] { 样式代码}
格式:
* { 样式代码}
子孙后代选择器: 通过元素之间的层级关系选择元素 格式:
body div div p { 样式代码} 匹配body里面的div里面的div里面的所有p标签( 包括后代)
子元素选择器: 通过元素之间的层级关系选择元素 格式:
body>div>div>p { 样式代码} 匹配body里面的div里面的div里面的所有p子元素( 不包含后代)
伪类选择器: 选择的是元素的状态, 元素有哪些状态? 包括:未访问状态,访问过状态,悬停状态,点击状态 格式:
a:link/visited/hover/active: { 样式代码}
总的演示:
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 09选择器 title>
< style>
#p1 {
color : red;
}
.c1 {
color : yellow;
}
h4,#p1,.c1 {
background-color : aquamarine;
}
input[type="text"] {
color : red;
}
* {
border : 1px solid purple;
}
style>
head>
< body>
< input type = " text" value = " user1" >
< input type = " password" >
< p id = " p1" > 苹果 p>
< p class = " c1" > 香蕉 p>
< p> 橘子 p>
< h3> 冰箱 h3>
< h3 class = " c1" > 洗衣机 h3>
< h3> 电视机 h3>
< h4> 唐三 h4>
body>
html>
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 选择器续 title>
< style>
div>div>p {
color : red;
}
a:link { color : red; }
a:visited { color : pink}
a:hover { color : green}
a:active { color : yellow}
style>
head>
< body>
< a href = " http://www.baidu.com" > 百度 a>
< a href = " http://www.bilibili.com" > 哔哩哔哩 a>
< a href = " http://www.taobao.com" > 淘宝 a>
< a href = " http://www.jd.com" > 京东 a>
< p> p1 p>
< div>
< p> p2 p>
< div> < p> p3 p> div>
< div>
< p> p4 p>
< div>
< p> p5 p>
div>
div>
div>
body>
html>
2.3 背景图片
background-image:url(“路径”) 设置背景图片
background-size:100px 200px 设置背景图片尺寸
background-repeat:no-repeat; 禁止重复
background-position: 横向 纵向; 设置背景图片的位置, 两种方式: 1像素 2百分比
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 背景图片 title>
< style>
div {
width : 500px;
height : 500px;
background-color : pink;
background-image : url ( "images/a.jpg" ) ;
background-size : 200px 200px;
background-repeat : no-repeat;
background-position : 50% 50%;
}
style>
head>
< body>
< div> div>
body>
html>
2.4 文本和字体相关
text-align:left/right/center; 文本水平对齐方式
line-height:20px; 设置行高, 多行文本时可以控制行间距, 单行文本时可以控制垂直居中(因为文本默认是在当前所在行内居中)
text-decoration:overline上划线/underline下划线/line-through删除线/none去掉文本修饰
text-shadow:颜色 x偏移值 y偏移值 浓度; 阴影
font-size:20px; 设置字体大小
font-weight:bold加粗/normal去掉加粗
font-style:italic; 设置斜体
font-family: xxx,xxx,xxx; 设置字体
font:20px xxx,xxx,xxx; 这只字体大小+字体
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 文本和字体相关 title>
< style>
div {
width : 200px;
height : 50px;
border : 1px solid red;
text-align : center;
line-height : 50px;
text-decoration : line-through;
text-shadow : red 200px 30px 10px;
font-size : 20px;
font-weight : bold;
}
a {
text-decoration : none;
}
h3 {
font-weight : normal;
font-style : italic;
font : 30px cursive;
}
style>
head>
< body>
< h3> 文本和字体相关 h3>
< div> 文本和字体相关 div>
< a href = " http://www.bilibili.com" > 哔哩哔哩 a>
body>
html>
2.5 元素的显示方式display
block: 块级元素的默认值, 特点: 独占一行 可以修改宽高, 包括: h1-h6 , p, div。
inline: 行内元素的默认值, 特点: 共占一行 不可以修改宽高, 包括: span, b,i,s,u,超链接a
inline-block:行内块元素默认值, 特点: 共占一行 并且可以修改宽高, 包括: img,input
none: 隐藏元素
行内元素不能直接修改宽高, 如必须修改则先将元素的显示方式改成block或inline-block
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 元素显示方式display title>
< style>
div {
width : 100px;
height : 100px;
border : 1px solid red;
}
span {
border : 1px solid blue;
width : 100px;
height : 100px;
display : block;
}
img {
width : 400px;
height : 400px;
display : none;
}
a {
display : block;
height : 40px;
width : 132px;
line-height : 40px;
background-color : #0aa1ed;
text-align : center;
color : white;
text-decoration : none;
font-size : 20px;
border-radius : 5px;
}
style>
head>
< body>
< a href = " #" > 查看详情 a>
< img src = " images/a.jpeg" alt = " 不见了" title = " 老婆" >
< img src = " images/b.jpg" alt = " 不见了" title = " 老婆" >
< img src = " images/c.jpg" alt = " 不见了" title = " 老婆" >
< div> div1 div>
< div> div2 div>
< div> div3 div>
< span> span1 span>
< span> span2 span>
< span> span3 span>
body>
html>
2.6 元素阴影box-shadow
box-shadow : 0 0 10px 5px #333;
2.7 盒子模型
盒子模型用来控制元素的显示效果包括: 元素内容content+外边距margin+边框border+内边距padding
元素内容content:控制元素的显示尺寸
外边距margin:控制元素的显示位置
边框border:控制边框效果
内边距padding:控制元素内容的位置
2.7.1 盒子模型之内容content
包括:width和height 赋值方式有两种:
行内元素不能直接修改宽高
2.7.2 盒子模型之外边距margin
作用: 控制元素的显示位置
赋值方式:
margin-left/right/top/bottom:10px; 单独某个方向赋值
margin:10px; 四个方向赋值
margin:10px 20px; 上下10,左右20
margin:10px 20px 30px 40px; 上右下左,顺时针赋值
行内元素上下外边距无效
上下相邻彼此添加外边距 取最大值
左右相邻彼此添加外边距 两者相加
粘连问题: 当元素的上边缘和上级元素的上边缘重叠时,给元素添加上外边距会出现粘连问题,给上级元素添加overflow:hidden解决
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 盒子模型外边框 title>
head>
< style>
#d1 {
width : 300px;
height : 300px;
border : red solid 1px;
;
margin-bottom : 100px;
margin : 10px 20px 30px 40px;
}
#d2 {
width : 300px;
height : 300px;
border : red solid 1px;
margin-top : 300px;
}
#s1 {
margin-left : 100px;
margin-right : 100px;
}
#s2 {
margin-left : 50px;
}
#big {
width : 200px;
height : 200px;
background-color : green;
overflow : hidden;
}
#big>div {
width : 50px;
height : 50px;
background-color : red;
margin-left : 100px;
margin-top : 100px;
}
#border_div {
width : 200px;
height : 200px;
border : 5px solid blue;
border-radius : 100px;
}
style>
< body>
< div id = " border_div" > div>
< div id = " big" >
< div> div>
div>
< span id = " s1" > span1 span>
< span id = " s2" > span2 span>
< div id = " d1" > 外边框测试 div>
< div id = " d2" > 外边框测试2 div>
body>
html>
2.7.3 盒子模型之外边距padding
作用: 控制元素内容的位置
赋值方式: 和外边距类似
padding-left/right/top/bottom:10px; 单独某个方向赋值
padding:10px; 四个方向赋值
padding:10px 20px; 上下和 左右赋值
padding:10px 20px 30px 40px; 上右下左顺时针赋值
给元素添加内边距会影响元素的显示宽高
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 盒子模型内边框padding title>
head>
< style>
div {
width : 200px;
height : 200px;
border : 1px solid red;
padding-top : 50px;
padding-left : 50px;
}
style>
< body>
< div> 内边距 div>
body>
html>
2.8 CSS的三大特性
继承: 元素可以继承上级元素文本和字体相关的样式,部分标签自带的效果不受继承影响, 比如超链接字体颜色
层叠:多个选择器可能选择到同一个元素,如果添加的样式不同则全部层叠有效,如果作用的样式相同
优先级: 指CSS中的选择器具有优先级, 作用范围越小优先级越高, !important>id>class>标签名>继承(属于间接选中)
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 三大特性 title>
head>
< style>
#d1 {
color : red;
}
div {
color : blue !important ;
}
style>
< body>
< div id = " d1" >
< p> 这是p标签 p>
< span> 这是div里面的span span>
< a href = " #" > 这是超链接 a>
div>
< span> 这是div外面的span span>
body>
html>
2.9 元素的定位方式
五种定位方式:
静态定位: position:static;
相对定位: position:relative;
绝对定位: position:absolute;
固定定位: position: fixed;
浮动定位: float:left/right;
2.9.1 静态定位(文档流定位)
格式: position:static;(默认的定位方式)
特点:元素以左上为基准,块级元素从上往下排列,行内元素从左向右依次排列,默认情况下无法实现元素的层叠效果
如何控制元素的位置?通过外边距控制元素的位置
2.9.2 相对定位
格式: position:relative;
特点:元素不脱离文档流(仍然占着原来的位置) ,可以实现元素的层叠效果
如何控制元素的位置? 通过left/right/top/bottom控制元素的显示位置,参照物是初始位置
应用场景: 当希望移动某一个元素其它元素不受影响时使用相对定位,相对定位可以实现元素的层叠
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 相对定位 title>
< style>
div {
width : 100px;
height : 100px;
border : 1px solid red;
}
div:hover {
position : relative;
left : 20px;
top : 20px;
}
style>
head>
< body>
< div> div1 div>
< div> div2 div>
< div> div3 div>
body>
html>
2.9.3 绝对定位
格式: position:absolute;
特点: 元素脱离文档流(不占原来的位置)
如何控制元素的位置? 通过left/right/top/bottom控制位置,参照物为窗口
或某一个上级元素(需要在上级元素中添加position:relative
作为参照物)
应用场景: 当需要往页面中添加一个元素并且不影响其它元素的显示位置,并且可以实现层叠效果
演示:
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 绝对定位 title>
< style>
div {
width : 100px;
height : 100px;
border : 1px solid red;
}
#d1 {
position : absolute;
right : 0;
bottom : 0;
}
#big {
width : 200px;
height : 200px;
margin : 100px 0 0 100px;
background-color : green;
position : relative;
}
#big>div {
width : 100px;
height : 100px;
background-color : blue;
margin : 50px 0 0 50px;
position : relative;
}
#big>div>div {
width : 50px;
height : 50px;
background-color : red;
position : absolute;
left : 0;
top : 0;
}
style>
head>
< body>
< div id = " big" >
< div>
< div> div>
div>
div>
< div id = " d1" > div1 div>
< div> div2 div>
< div> div3 div>
body>
html>
练习:
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 绝对定位练习 title>
< style>
div {
width : 300px;
position : relative;
padding : 10px;
background-color : #666666;
}
input {
width : 260px;
padding : 10px 20px;
border : none;
font-size : 16px;
}
img {
width : 28px;
height : 28px;
position : absolute;
top : 14px;
right : 20px;
}
p {
margin : 0;
font-size : 12px;
color : red;
}
style>
head>
< body>
< div>
< input type = " text" placeholder = " 输入用户名" maxlength = " 10" >
< img src = " images/a.jpeg" alt = " " >
< p> 用户名不能为空! p>
div>
body>
html>
2.9.4 固定定位
格式: position:fixed;
特点: 脱离文档流
如何控制元素的位置? 通过left/right/top/bottom相对于窗口做偏移,参照物为窗口。
应用场景: 当需要将元素固定在窗口的某个位置时使用
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 固定定位 title>
< style>
#d1 {
width : 100%;
height : 100px;
background-color : red;
position : fixed;
top : 0;
}
body {
margin : 0;
padding-top : 120px;
}
#d2 {
width : 50px;
height : 200px;
background-color : blue;
position : fixed;
bottom : 10%;
right : 5%;
}
style>
head>
< body>
< div id = " d1" > div>
< div id = " d2" > div>
< img src = " images/b.jpg" alt = " " >
< img src = " images/b.jpg" alt = " " >
< img src = " images/b.jpg" alt = " " >
< img src = " images/b.jpg" alt = " " >
< img src = " images/b.jpg" alt = " " >
< img src = " images/b.jpg" alt = " " >
< img src = " images/b.jpg" alt = " " >
< img src = " images/b.jpg" alt = " " >
body>
html>
2.9.5 浮动定位
格式:float:left/right; 特点:脱离文档流, 元素从当前所在行向左或向右浮动,当撞到上级元素边缘或其它元素时停止. 浮动元素一行装不下时会自动折行, 折行时有可能被卡住 当元素的所有子元素全部浮动时,自动识别的高度会为0,后面元素会顶上来导致显示异常,通过给元素添加overflow:hidden可以解决此问题 应用场景: 当需要将纵向排列的元素改成横向排列时使用
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 浮动定位 title>
< style>
body>div {
width : 200px;
border : 1px solid red;
overflow : hidden;
}
#d1 {
width : 50px;
height : 50px;
background-color : red;
float : left;
}
#d2 {
width : 50px;
height : 50px;
background-color : green;
float : left;
}
#d3 {
width : 50px;
height : 50px;
background-color : blue;
float : left;
}
style>
head>
< body>
< div>
< div id = " d1" > div1 div>
< div id = " d2" > div2 div>
< div id = " d3" > div3 div>
div>
body>
html>
2.10 溢出设置overflow
visible超出部分显示(默认)
hidden超出部分隐藏
scroll 超出部分滚动显示
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 溢出设置 title>
< style>
div {
width : 800px;
height : 800px;
overflow : scroll;
}
style>
head>
< body>
< div>
< img src = " images/a.jpeg" alt = " " >
div>
body>
html>
2.11 行内元素垂直对齐方式vertical-align
top 上对齐
middle中间对齐
bottom下对齐
baseline基线对齐(默认)
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 行内元素垂直对齐方式vertical-align title>
< style>
.img_1 {
width : 100px;
vertical-align : top;
}
style>
head>
< body>
< input type = " text" > < img class = " img_1" src = " images/b.jpg" alt = " " >
body>
html>
2.12 元素的显示层级
当两个元素非静态定位时可能存在层叠的问题 通过z-index样式控制显示层级, 值越大显示越靠前
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 元素显示层级 title>
< style>
#d1 {
width : 50px;
height : 100px;
background-color : red;
position : absolute;
z-index : 3;
}
#d2 {
width : 100px;
height : 50px;
background-color : blue;
position : absolute;
z-index : 2;
}
style>
head>
< body>
< div id = " d1" > div>
< div id = " d2" > div>
body>
html>
2.13 布局练习
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 布局练习 title>
< style>
body {
font : 12px "simhei" , Arial, Helvetica, sans-serif;
color : #666;
}
body>div {
width : 1000px;
margin : 0 auto;
}
#t_div {
overflow : hidden;
margin-bottom : 10px;
}
#t_l_div {
width : 611px;
height : 376px;
float : left;
background-color : green;
}
#t_r_div {
width : 375px;
height : 376px;
float : right;
background-color : red;
}
#t_l_div,#t_r_div,#b_l_div,#b_r_div>div {
}
#b_div {
overflow : hidden;
}
#b_l_div {
width : 366px;
height : 233px;
background-color : #666666;
float : left;
}
#b_r_div>div {
width : 198px;
height : 233px;
background-color : pink;
margin-left : 10px;
float : left;
}
#b_r_div {
float : right;
}
style>
head>
< body>
< div>
< div id = " t_div" >
< div id = " t_l_div" > div>
< div id = " t_r_div" > div>
div>
< div id = " b_div" >
< div id = " b_l_div" > div>
< div id = " b_r_div" >
< div> div>
< div> div>
< div> div>
div>
div>
div>
body>
html>
3 JavaScript基本知识
3.1 JavaScript简介
JavaScript 是一门跨平台、面向对象的脚本语言 ,而Java语言也是跨平台的、面向对象的语言,只不过Java是编译语言,是需要编译成字节码文件才能运行的;JavaScript是脚本语言,不需要编译,由浏览器直接解析并执行。
JavaScript 是用来控制网页行为的,它能使网页可交互;那么它可以做什么呢? 如改变页面内容、修改指定元素的属性值、对表单进行校验等。
作用: 负责给页面添加动态效果
语言特点:
属于脚本语言(不需要编译直接由浏览器解析执行)
基于面向对象
属于弱类型语言
安全性强: JS语言只能访问浏览器内部的数据,浏览器以外电脑上的数据禁止访问
交互性强: 因为JS语言是嵌入到html页面中最终执行在客户端的语言 可以和用户直接进行交互,而像Java语言是运行在服务器的语言和用户交互需要借助于网络,所以交互性JS语言会更强一些
3.2 JavaScript引入方式
JavaScript 引入方式就是 HTML 和 JavaScript 的结合方式。JavaScript引入方式有两种:
内联: 在标签的事件属性中添加js代码,当事件触发时执行.
内部:将 JS代码定义在HTML页面中
外部:将 JS代码定义在外部 JS文件中,然后引入到 HTML页面中
3.2.1 内联
在标签的事件属性中添加js代码,当事件触发时执行
事件: 是系统提供的一系列时间点
点击事件: 当点击元素时触发的时间点
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> JS内联引入方式 title>
head>
< body>
< input type = " button" value = " 按钮" onclick = " alert ( '按钮点击了!' ) " >
body>
html>
3.2.2 内部
在 HTML 中,JavaScript 代码必须位于
与
标签之间
代码如下:
alert(数据)
是 JavaScript 的一个方法,作用是将参数数据以浏览器弹框的形式输出出来。
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> JS内部引入方式 title>
head>
< body>
< script>
alert ( "hello js1" ) ;
script>
body>
html>
从结果可以看到 js 代码已经执行了。
提示:
在 HTML 文档中可以在任意地方,放置任意数量的
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> JS内部引入方式 title>
< script>
alert ( "hello js1" ) ;
script>
head>
< body>
< script>
alert ( "hello js1" ) ;
script>
body>
html>
< script>
alert ( "hello js1" ) ;
script>
一般把脚本置于 元素的底部,可改善显示速度
因为浏览器在加载页面的时候会从上 往下进行加载并解析。 我们应该让用户看到页面内容,然后再展示动态的效果。
3.2.3 外部
第一步:定义外部 js 文件。如定义名为 demo.js的文件
demo.js 文件内容如下:
alert ( "hello js" ) ;
第二步:在页面中引入外部的js文件
在页面使用 script
标签中使用 src
属性指定 js 文件的 URL 路径。
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> JS外部引入方式 title>
head>
< body>
< script src = " js/my.js" > script>
body>
html>
注意:
3.3 JavaScript基础语法
3.3.1 书写语法
区分大小写:与 Java 一样,变量名、函数名以及其他一切东西都是区分大小写的
每行结尾的分号可有可无
如果一行上写多个语句时,必须加分号用来区分多个语句。
注释
单行注释:// 注释内容
多行注释:/* 注释内容 */
注意:JavaScript 没有文档注释
大括号表示代码块
下面语句大家肯定能看懂,和 java 一样 大括号表示代码块。
if ( count == 3 ) {
alert ( count) ;
}
3.3.2 输出语句
js 可以通过以下方式进行内容的输出,只不过不同的语句输出到的位置不同
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> Title title>
head>
< body>
< script>
window. alert ( "hello js" ) ;
script>
body>
html>
上面代码通过浏览器打开,我们可以看到弹框效果
使用 document.write() 写入 HTML 输出
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> Title title>
head>
< body>
< script>
document. write ( "hello js 2~" ) ;
script>
body>
html>
上面代码通过浏览器打开,我们可以在页面上看到 document.write(内容)
输出的内容
使用 console.log() 写入浏览器控制台
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> Title title>
head>
< body>
< script>
console. log ( "hello js 3" ) ;
script>
body>
html>
3.3.3 变量
JavaScript 中用 var 关键字(variable 的缩写)来声明变量。格式 var 变量名 = 数据值;
。而在JavaScript 是一门弱类型语言,变量可以存放不同类型的值 ;如下在定义变量时赋值为数字数据,还可以将变量的值改为字符串类型的数
var test = 20 ;
test = "张三" ;
js 中的变量名命名也有如下规则,和java语言基本都相同
组成字符可以是任何字母、数字、下划线(_)或美元符号($)
数字不能开头
建议使用驼峰命名
JavaScript 中 var
关键字有点特殊,有以下地方和其他语言不一样
{
var age = 20 ;
}
alert ( age) ;
{
var age = 20 ;
var age = 30 ;
}
alert ( age) ;
针对如上的问题,==ECMAScript 6 新增了 let
关键字来定义变量。==它的用法类似于 var
,但是所声明的变量,只在 let
关键字所在的代码块内有效,且不允许重复声明。
例如:
{
let age = 20 ;
}
alert ( age) ;
结果并没有弹出
ECMAScript 6 新增了 const关键字,用来声明一个只读的常量。一旦声明,常量的值就不能改变。 通过下面的代码看一下常用的特点就可以了
const PI = 3.14 ;
PI = 1 ;
我们可以看到给 PI 这个常量重新赋值时报错了。
let和var关键字的区别, 作用域有区别
使用let声明的变量,作用域和Java语言的作用域类似
使用var声明的变量,不管在什么位置声明 都相当于是一个全局变量
java :
for ( int i= 0 ; i< 10 ; i++ ) {
int y = i+ 1 ;
}
int z = i+ y;
JS :
for ( let i= 0 ; i< 10 ; i++ ) {
let y = i+ 1 ;
}
let z = i+ y;
for ( var i= 0 ; i< 10 ; i++ ) {
var y = i+ 1 ;
}
var z = i+ y;
3.3.4 数据类型
JavaScript 中提供了两类数据类型:原始类型 和 引用类型。
使用 typeof 运算符可以获取数据类型
alert(typeof age);
以弹框的形式将 age 变量的数据类型输出
原始数据类型:
number :数字(整数、小数、NaN(Not a Number))
var age = 20 ;
var price = 99.8 ;
alert ( typeof age) ;
alert ( typeof price) ;
注意: NaN是一个特殊的number类型的值,后面用到再说
string :字符、字符串,单双引皆可
var ch = 'a' ;
var name = '张三' ;
var addr = "北京" ;
alert ( typeof ch) ;
alert ( typeof name) ;
alert ( typeof addr) ;
==注意:==在 js 中 双引号和单引号都表示字符串类型的数据
boolean :布尔。true,false
var flag = true ;
var flag2 = false ;
alert ( typeof flag) ;
alert ( typeof flag2) ;
null :对象为空
var obj = null ;
alert ( typeof obj) ;
undefined :当声明的变量未初始化时,该变量的默认值是 undefined
var a ;
alert ( typeof a) ;
3.3.5 运算符
JavaScript 提供了如下的运算符。大部分和 Java语言 都是一样的,不同的是 JS 关系运算符中的 ==
和 ===
,一会我们只演示这两个的区别,其他运算符将不做演示
一元运算符:++,–
算术运算符:+,-,*,/,%
赋值运算符:=,+=,-=…
关系运算符:>,<,>=,<=,!=,==,===…
==: 先统一两个变量的类型 再比较值,例如 “666”==666 为true
===:先比较类型,类型相同后再比较值,例如"666" ===666 为false
逻辑运算符:&&,||,!
三元运算符:条件表达式 ? true_value : false_value
1. ==和===区别
概述:
==:
判断类型是否一样,如果不一样,则进行类型转换
再去比较其值
===:js 中的全等于
判断类型是否一样,如果不一样,直接返回false
再去比较其值
代码:
var age1 = 20 ;
var age2 = "20" ;
alert ( age1 == age2) ;
alert ( age1 === age2) ;
2. 类型转换
上述讲解 ==
运算符时,发现会进行类型转换,所以接下来我们来详细的讲解一下 JavaScript 中的类型转换。
var str = + "20" ;
alert ( str + 1 )
* 使用 `parseInt()` 函数(方法):
var str = "20" ;
alert ( parseInt ( str) + 1 ) ;
> ==建议使用 `parseInt()` 函数进行转换。==
var flag = undefined ;
if ( flag) {
alert ( "转为true" ) ;
} else {
alert ( "转为false" ) ;
}
使用场景:
在 Java 中使用字符串前,一般都会先判断字符串不是null,并且不是空字符才会做其他的一些操作,JavaScript也有类型的操作,代码如下:
var str = "abc" ;
if ( str != null && str. length > 0 ) {
alert ( "转为true" ) ;
} else {
alert ( "转为false" ) ;
}
但是由于 JavaScript 会自动进行类型转换,所以上述的判断可以进行简化,代码如下:
var str = "abc" ;
if ( str) {
alert ( "转为true" ) ;
} else {
alert ( "转为false" ) ;
}
3.3.6 流程控制语句
JavaScript 中提供了和 Java 一样的流程控制语句,如下
if
switch
for
while
dowhile
1. if 语句
var count = 3 ;
if ( count == 3 ) {
alert ( count) ;
}
2. switch 语句
var num = 3 ;
switch ( num) {
case 1 :
alert ( "星期一" ) ;
break ;
case 2 :
alert ( "星期二" ) ;
break ;
case 3 :
alert ( "星期三" ) ;
break ;
case 4 :
alert ( "星期四" ) ;
break ;
case 5 :
alert ( "星期五" ) ;
break ;
case 6 :
alert ( "星期六" ) ;
break ;
case 7 :
alert ( "星期日" ) ;
break ;
default :
alert ( "输入的星期有误" ) ;
break ;
}
3. for 循环语句
var sum = 0 ;
for ( let i = 1 ; i <= 100 ; i++ ) {
sum += i;
}
alert ( sum) ;
4. while 循环语句
var sum = 0 ;
var i = 1 ;
while ( i <= 100 ) {
sum += i;
i++ ;
}
alert ( sum) ;
5. do-while 循环语句
var sum = 0 ;
var i = 1 ;
do {
sum += i;
i++ ;
}
while ( i <= 100 ) ;
alert ( sum) ;
3.4 函数(方法)
函数(就是Java中的方法
)是被设计为执行特定任务的代码块;JavaScript 函数通过 function 关键词进行定义。
3.4.1 定义格式
函数定义格式有两种:
function 函数名 ( 参数1 , 参数2. . ) {
要执行的代码
}
var 函数名 = function ( 参数列表 ) {
要执行的代码
}
let f6 = new Function ( "name" , "age" , "console.log('f6:'+name+':'+age)" )
注意:
形式参数不需要类型。因为JavaScript是弱类型语言
function add ( a, b ) {
return a + b;
}
上述函数的参数 a 和 b 不需要定义数据类型,因为在每个参数前加上 var 也没有任何意义。
返回值也不需要定义类型,可以在函数内部直接使用return返回即可
function f1 ( ) {
console. log ( "f1方法" )
}
f1 ( ) ;
function f2 ( name, age ) {
console. log ( "f2:" + name + ":" + age)
}
f2 ( "萧炎" , 18 ) ;
function f3 ( ) {
return "f3:我是返回值"
}
let info = f3 ( ) ;
console. log ( info)
function f4 ( x, y ) {
return x * y;
}
let result = f4 ( 8 , 8 ) ;
console. log ( "f4:" + result)
let f5 = function ( name, age ) {
console. log ( "f5:" + name + ":" + age)
}
f5 ( "美杜莎" , 20 ) ;
let f6 = new Function ( "name" , "age" , "console.log('f6:'+name+':'+age)" )
f6 ( "药老" , 60 ) ;
3.4.2 函数调用
函数调用函数:
函数名称 ( 实际参数列表) ;
eg:
let result = add ( 10 , 20 ) ;
注意:
JS中,函数调用可以传递任意个数参数
例如 let result = add(1,2,3);
它是将数据 1 传递给了变量a,将数据 2 传递给了变量 b,而数据 3 没有变量接收。
3.4.3 页面相关方法
通过选择器获取页面中的元素对象 let 元素对象 = document.querySelector(“选择器”)
获取和修改元素的文本内容 元素对象.innerText = “xxx” 修改文本内容 元素对象.innerText 获取文本内容
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 03页面相关方法 title>
head>
< body>
< div>
这是div
div>
< input type = " text" id = " i1" >
< input type = " button" value = " 按钮" onclick = " f ( ) " >
< script>
function f ( ) {
let i = document. querySelector ( "#i1" ) ;
let d = document. querySelector ( "div" ) ;
d. innerText = i. value;
}
script>
body>
html>
计算器练习:
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 计算器练习 title>
head>
< body>
< input type = " text" id = " i1" >
< input type = " text" id = " i2" >
< input type = " button" value = " 平方" onclick = " f ( 5 ) " >
< input type = " button" value = " 加" onclick = " f ( 1 ) " >
< input type = " button" value = " 减" onclick = " f ( 2 ) " >
< input type = " button" value = " 乘" onclick = " f ( 3 ) " >
< input type = " button" value = " 除" onclick = " f ( 4 ) " >
< div> 结果:< span> span> div>
< script>
function f ( x ) {
let i1 = document. querySelector ( "#i1" ) ;
let i2 = document. querySelector ( "#i2" ) ;
let s = document. querySelector ( "span" ) ;
if ( isNaN ( i1. value) || isNaN ( i2. value) ) {
s. innerHTML = "输入错误 " ;
return ;
}
switch ( x) {
case 1 :
s. innerText = i1. value* 1 + i2. value* 1 ;
break ;
case 2 :
s. innerText = i1. value- i2. value;
break ;
case 3 :
s. innerText = i1. value* i2. value;
break ;
case 4 :
s. innerText = i1. value/ i2. value;
break ;
case 5 : / / 平方
s. innerText = i1. value * i1. value;
}
}
script>
body>
html>
3.4.4 NaN
Not a Number: 不是一个数
isNaN(xxx) 判断变量是否是NaN
3.5 JavaScript常用对象
JavaScript 提供了很多对象供使用者来使用。这些对象总共分类三类
基本对象 包括string,number,boolean等
BOM 对象 Browser Object Model, 浏览器对象模型, 包括和浏览器相关的内容
DOM对象 Document Object Model, 文档对象模型,包括和页面标签相关的内容
3.5.1 Array对象
JavaScript Array对象用于定义数组
1. 定义格式
数组的定义格式有两种:
var 变量名 = new Array ( 元素列表) ;
例如:
var arr = new Array ( 1 , 2 , 3 ) ;
var 变量名 = [ 元素列表] ;
例如:
var arr = [ 1 , 2 , 3 ] ;
注意:Java中的数组静态初始化使用的是{}定义,而 JavaScript 中使用的是 [] 定义
2. 元素访问
访问数组中的元素和 Java 语言的一样,格式如下:
arr[ 索引] = 值;
代码演示:
var arr = new Array ( 1 , 2 , 3 ) ;
var arr2 = [ 1 , 2 , 3 ] ;
arr2[ 0 ] = 10 ;
alert ( arr2)
3. 特点
JavaScript 中的数组相当于 Java 中集合。数组的长度是可以变化的,而 JavaScript 是弱类型,所以可以存储任意的类型的数据。
例如如下代码:
var arr3 = [ 1 , 2 , 3 ] ;
arr3[ 10 ] = 10 ;
alert ( arr3[ 10 ] ) ;
alert ( arr3[ 9 ] ) ;
上面代码在定义数组中给了三个元素,又给索引是 10 的位置添加了数据 10,那么 索引3
到 索引9
位置的元素是什么呢?我们之前就介绍了,在 JavaScript 中没有赋值的话,默认就是 undefined
。
如果给 arr3
数组添加字符串的数据,也是可以添加成功的
arr3[ 5 ] = "hello" ;
alert ( arr3[ 5 ] ) ;
4. 属性
Array 对象提供了很多属性,如下图是官方文档截取的
而我们只讲解 length
属性,该数组可以动态的获取数组的长度。而有这个属性,我们就可以遍历数组了
var arr = [ 1 , 2 , 3 ] ;
for ( let i = 0 ; i < arr. length; i++ ) {
alert ( arr[ i] ) ;
}
5. 方法
Array 对象同样也提供了很多方法,如下图是官方文档截取的
而我们在课堂中只演示 push
函数和 splice
函数。
var arr5 = [ 1 , 2 , 3 ] ;
arr5. push ( 10 ) ;
alert ( arr5) ;
splice 函数:删除元素
参数1:索引。表示从哪个索引位置删除
参数2:个数。表示删除几个元素
var arr5 = [ 1 , 2 , 3 ] ;
arr5. splice ( 0 , 1 ) ;
alert ( arr5) ;
3.5.2 String对象
String对象的创建方式有两种
var 变量名 = new String ( s) ;
var 变量名 = "数组" ;
属性:
String对象提供了很多属性,下面给大家列举了一个属性 length
,该属性是用于动态的获取字符串的长度
函数:
String对象提供了很多函数(方法),下面给大家列举了两个方法。
String对象还有一个函数 trim()
,该方法在文档中没有体现,但是所有的浏览器都支持;它是用来去掉字符串两端的空格。
代码演示:
var str4 = ' abc ' ;
alert ( 1 + str4 + 1 ) ;
上面代码会输出内容 1 abc 1
,很明显可以看到 abc 字符串左右两边是有空格的。接下来使用 trim()
函数
var str4 = ' abc ' ;
alert ( 1 + str4. trim ( ) + 1 ) ;
输出的内容是 1abc1
。这就是 trim()
函数的作用。
trim()
函数在以后开发中还是比较常用的,例如下图所示是登陆界面
用户在输入用户名和密码时,可能会习惯的输入一些空格,这样在我们后端程序中判断用户名和密码是否正确,结果肯定是失败。所以我们一般都会对用户输入的字符串数据进行去除前后空格的操作。
3.5.3 自定义对象
在 JavaScript 中自定义对象特别简单,下面就是自定义对象的格式:
var 对象名称 = {
属性名称1 : 属性值1 ,
属性名称2 : 属性值2 ,
... ,
函数名称 : function ( 形参列表 ) { } ,
...
} ;
调用属性的格式:
对象名. 属性名
调用函数的格式:
对象名. 函数名 ( )
接下来通过代码演示一下,让大家体验一下 JavaScript 中自定义对象
var person = {
name : "zhangsan" ,
age : 23 ,
eat : function ( ) {
alert ( "干饭~" ) ;
}
} ;
alert ( person. name) ;
alert ( person. age) ;
person. eat ( ) ;
3.6 BOM
BOM:Browser Object Model 浏览器对象模型。也就是 JavaScript 将浏览器的各个组成部分封装为对象。
我们要操作浏览器的各个组成部分就可以通过操作 BOM 中的对象来实现。
BOM 中包含了如下对象:
Window:浏览器窗口对象
Navigator:浏览器对象
Screen:屏幕对象
History:历史记录对象
Location:地址栏对象
3.6.1 Window对象
window 对象是 JavaScript 对浏览器的窗口进行封装的对象。
1. 获取window对象
该对象不需要创建直接使用 window
,其中 window.
可以省略。比如我们之前使用的 alert()
函数,其实就是 window
对象的函数,在调用是可以写成如下两种
window. alert ( "abc" ) ;
alert ( "abc" )
2. window对象属性
window
对象提供了用于获取其他 BOM 组成对象的属性
名
描述
history
对History对象的只读引用。
location
用于宙口或框架的 Location对象。
Navigator
对Navigator对象的只读引用。
Screen
对screen对象的只读引用。
也就是说,我们想使用 Location
对象的话,就可以使用 window
对象获取;写成 window.location
,而 window.
可以省略,简化写成 location
来获取 Location
对象。
3. window对象函数(方法)
window
对象提供了很多函数供我们使用,而很多都不常用;下面给大家列举了一些比较常用的方法
方法
描述
alert()
显示带有一段消息和一个确认按钮的警告框。
confirm()
显示带有一段消息以及确认按钮和取消按钮的对话框。
setInterval()
按照指定的周期(以毫秒计)来调用函数或计算表达式,定时器。
setTimeout()
在指定的毫秒数后调用函数或计算表达式,只执行一次的定时器。
isNaN()
判断变量是否是NaN
parseInt()和parseFloat()
把字符串转成整数或小数
console.log()
控制台输出
clearInterval(timer)
停止定时器
setTimeout(function,毫秒值)
: 在一定的时间间隔后执行一个function,只执行一次 setInterval(function,毫秒值)
:在一定的时间间隔后执行一个function,循环执行
confirm代码演示:
var flag = confirm ( "确认删除?" ) ;
alert ( flag) ;
定时器代码演示:
setTimeout ( function ( ) {
alert ( "hehe" ) ;
} , 3000 ) ;
当我们打开浏览器,3秒后才会弹框输出 hehe
,并且只会弹出一次。
setInterval ( function ( ) {
alert ( "hehe" ) ;
} , 2000 ) ;
当我们打开浏览器,每隔2秒都会弹框输出 hehe
。
4. 案例
定时器案例:
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 定时器 title>
head>
< body>
< h1> 0 h1>
< h2> 0 h2>
< script>
let count = 0 ;
setInterval ( f, 1000 ) ;
function f ( ) {
count++ ;
let h = document. querySelector ( "h1" ) ;
h. innerText = count;
}
let num = 0 ;
setInterval ( function ( ) {
num++ ;
let h = document. querySelector ( "h2" ) ;
h. innerText = num;
} , 100 )
script>
body>
html>
3.6.2 History对象
History 对象是 JavaScript 对历史记录进行封装的对象。
使用 window.history获取,其中window. 可以省略
History 对象的函数
history.length 获取历史页面数量
history.back() 返回上一页面
history.forward() 前往下一页面
history.go(n) n=1是前往下1页面 n=-1 返回上一页面 n=2 前往下2个页面 n=0代表刷新
当我们点击向左的箭头,就跳转到前一个访问的页面,这就是 back()
函数的作用;当我们点击向右的箭头,就跳转到下一个访问的页面,这就是 forward()
函数的作用。
3.6.3 Location对象
Location 对象是 JavaScript 对地址栏封装的对象。可以通过操作该对象,跳转到任意页面。
1. 获取Location对象
使用 window.location获取,其中window. 可以省略
window. location. 方法 ( ) ;
location. 方法 ( ) ;
2. Location对象属性
Location对象提供了很对属性。以后常用的只有一个属性 href
代码演示:
alert ( "要跳转了" ) ;
location. href = "https://www.baidu.com" ;
在浏览器首先会弹框显示 要跳转了
,当我们点击了 确定
就会跳转到 百度 的首页。
3. 案例
需求:3秒跳转到百度首页
分析:
3秒跳转,由此可以确定需要使用到定时器,而只跳转一次,所以使用 setTimeOut()
要进行页面跳转,所以需要用到 location
对象的 href
属性实现
代码实现:
document. write ( "3秒跳转到首页..." ) ;
setTimeout ( function ( ) {
location. href = "https://www.baidu.com"
} , 3000 ) ;
3.7 DOM
3.7.1 概述
DOM:Document Object Model 文档对象模型。也就是 JavaScript 将 HTML 文档的各个组成部分封装为对象。
DOM 其实我们并不陌生,之前在学习 XML 就接触过,只不过 XML 文档中的标签需要我们写代码解析,而 HTML 文档是浏览器解析。封装的对象分为
Document:整个文档对象
Element:元素对象
Attribute:属性对象
Text:文本对象
Comment:注释对象
作用:
JavaScript 通过 DOM, 就能够对 HTML进行操作了
改变 HTML 元素的内容
改变 HTML 元素的样式(CSS)
对 HTML DOM 事件作出反应
添加和删除 HTML 元素
DOM相关概念:
DOM 是 W3C(万维网联盟)定义了访问 HTML 和 XML 文档的标准。该标准被分为 3 个不同的部分:
核心 DOM:针对任何结构化文档的标准模型。 XML 和 HTML 通用的标准
Document:整个文档对象
Element:元素对象
Attribute:属性对象
Text:文本对象
Comment:注释对象
XML DOM: 针对 XML 文档的标准模型
HTML DOM: 针对 HTML 文档的标准模型
该标准是在核心 DOM 基础上,对 HTML 中的每个标签都封装成了不同的对象
3.7.2 元素对象
创建元素对象 let 元素对象 = document.createElement(“标签名”);
添加元素对象到某个元素里面
document.body.appendChild(元素对象);
父对象.append(元素对象) let tabel = document.querySelector(“table”); tabel.append( 元素对象);
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> Dom相关 title>
head>
< body>
< script>
let d= document. createElement ( "div" )
d. innerText = "我是div" ;
document. body. appendChild ( d)
let h1 = document. createElement ( "h1" ) ;
let h2 = document. createElement ( "h2" ) ;
h1. innerText = "这是h1" ;
h2. innerText = "这是h2" ;
document. body. append ( h1, h2) ;
let i = document. createElement ( "img" ) ;
i. src = "images/b.jpg" ;
document. body. append ( i) ;
script>
body>
html>
练习:
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> Doc相关练习 title>
head>
< body>
< input type = " text" id = " i1" >
< input type = " button" value = " 添加老婆1" onclick = " f ( 1 ) " >
< input type = " button" value = " 添加老婆2" onclick = " f ( 2 ) " >
< input type = " button" value = " 添加老婆3" onclick = " f ( 3 ) " > < br>
< script>
let i1 = document. querySelector ( "#i1" ) ;
function f ( sum ) {
switch ( sum) {
case 1 :
for ( let i = 0 ; i < i1. value; i++ ) {
let img1 = document. createElement ( "img" ) ;
img1. src = "images/a.jpg" ;
img1. style. width = "300px" ;
document. body. append ( img1) ;
}
break ;
case 2 :
for ( let i = 0 ; i < i1. value; i++ ) {
let img2 = document. createElement ( "img" ) ;
img2. src = "images/b.jpg" ;
img2. style. width = "300px" ;
document. body. append ( img2) ;
}
break ;
case 3 :
for ( let i = 0 ; i < i1. value; i++ ) {
let img3 = document. createElement ( "img" ) ;
img3. src = "images/c.jpg" ;
img3. style. width = "300px" ;
document. body. append ( img3) ;
}
break ;
}
}
script>
body>
html>
3.7.3 获取 Element对象
HTML 中的 Element 对象可以通过 Document
对象获取,而 Document
对象是通过 window
对象获取。
Document
对象中提供了以下获取 Element
元素对象的函数
getElementById()
:根据id属性值获取,返回单个Element对象
getElementsByTagName()
:根据标签名称获取,返回Element对象数组
getElementsByName()
:根据name属性值获取,返回Element对象数组
getElementsByClassName()
:根据class属性值获取,返回Element对象数组
代码演示:
下面有提前准备好的页面:
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> Title title>
head>
< body>
< img id = " light" src = " ../imgs/off.gif" > < br>
< div class = " cls" > 斗罗大陆 div> < br>
< div class = " cls" > 唐三 div> < br>
< input type = " checkbox" name = " hobby" > 电影
< input type = " checkbox" name = " hobby" > 旅游
< input type = " checkbox" name = " hobby" > 游戏
< br>
< script>
script>
body>
html>
根据 id
属性值获取上面的 img
元素对象,返回单个对象
var img = document. getElementById ( "light" ) ;
alert ( img) ;
结果如下:
从弹框输出的内容,也可以看出是一个图片元素对象。
根据标签名称获取所有的 div
元素对象
var divs = document. getElementsByTagName ( "div" ) ;
for ( let i = 0 ; i < divs. length; i++ ) {
alert ( divs[ i] ) ;
}
获取所有的满足 name = 'hobby'
条件的元素对象
var hobbys = document. getElementsByName ( "hobby" ) ;
for ( let i = 0 ; i < hobbys. length; i++ ) {
alert ( hobbys[ i] ) ;
}
获取所有的满足 class='cls'
条件的元素对象
var clss = document. getElementsByClassName ( "cls" ) ;
for ( let i = 0 ; i < clss. length; i++ ) {
alert ( clss[ i] ) ;
}
3.7.4 HTML Element对象使用
HTML 中的 Element
元素对象有很多,不可能全部记住,以后是根据具体的需求查阅文档使用。
下面我们通过具体的案例给大家演示文档的查询和对象的使用;下面提前给大家准备好的页面
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> Title title>
head>
< body>
< img id = " light" src = " ../imgs/off.gif" > < br>
< div class = " cls" > 斗罗大陆 div> < br>
< div class = " cls" > 唐三 div> < br>
< input type = " checkbox" name = " hobby" > 电影
< input type = " checkbox" name = " hobby" > 旅游
< input type = " checkbox" name = " hobby" > 游戏
< br>
< script>
script>
body>
html>
3.8 事件监听
要想知道什么是事件监听,首先先聊聊什么是事件?
HTML 事件是发生在 HTML 元素上的“事情”。比如:页面上的 按钮被点击
、鼠标移动到元素之上
、按下键盘按键
等都是事件。
事件监听是JavaScript 可以在事件被侦测到时==执行一段逻辑代码。==例如当我们输入了用户名 光标离开
输入框,就需要通过 js 代码对输入的内容进行校验,没通过校验就在输入框后提示 用户名格式有误!
3.8.1 事件绑定
JavaScript 提供了两种事件绑定方式:
下面是点击事件绑定的 on()
函数
function on ( ) {
alert ( "我被点了" ) ;
}
< input type = " button" id = " btn" >
下面 js 代码是获取了 id='btn'
的元素对象,然后将 onclick
作为该对象的属性,并且绑定匿名函数。该函数是在事件触发后自动执行
document. getElementById ( "btn" ) . onclick = function ( ) {
alert ( "我被点了" ) ;
}
代码演示:
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> Title title>
head>
< body>
< input type = " button" value = " 点我" onclick = " on ( ) " > < br>
< input type = " button" value = " 再点我" id = " btn" >
< script>
function on ( ) {
alert ( "我被点了" ) ;
}
document. getElementById ( "btn" ) . onclick = function ( ) {
alert ( "我被点了" ) ;
}
script>
body>
html>
3.8.2 常见事件
上面案例中使用到了 onclick
事件属性,那都有哪些事件属性供我们使用呢?下面就给大家列举一些比较常用的事件属性
事件属性名
说明
onclick
鼠标单击事件
onblur
元素失去焦点
onfocus
元素获得焦点
onload
某个页面或图像被完成加载
onsubmit
当表单提交时触发该事件
onmouseover
鼠标被移到某元素之上
onmouseout
鼠标从某元素移开
onfocus
获得焦点事件。
onblur
失去焦点事件。
onmouseout
鼠标移出事件。
onmouseover
鼠标移入事件。
onsubmit
表单提交事件
如下是带有表单的页面
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> Title title>
head>
< body>
< form id = " register" action = " #" >
< input type = " text" name = " username" />
< input type = " submit" value = " 提交" >
form>
< script>
script>
body>
html>
如上代码的表单,当我们点击 提交
按钮后,表单就会提交,此处默认使用的是 GET
提交方式,会将提交的数据拼接到 URL 后。现需要通过 js 代码实现阻止表单提交的功能,js 代码实现如下:
获取 form
表单元素对象。
给 form
表单元素对象绑定 onsubmit
事件,并绑定匿名函数。
该匿名函数如果返回的是true,提交表单;如果返回的是false,阻止表单提交。
document. getElementById ( "register" ) . onsubmit = function ( ) {
return true ;
}
3.9 表单验证案例
3.9.1 需求
有如下注册页面,对表单进行校验,如果输入的用户名、密码、手机号符合规则,则允许提交;如果不符合规则,则不允许提交。
完成以下需求:
当输入框失去焦点时,验证输入内容是否符合要求
当点击注册按钮时,判断所有输入框的内容是否都符合要求,如果不合符则阻止表单提交
3.9.2 环境准备
下面是初始页面
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 欢迎注册 title>
< link href = " ../css/register.css" rel = " stylesheet" >
head>
< body>
< div class = " form-div" >
< div class = " reg-content" >
< h1> 欢迎注册 h1>
< span> 已有帐号? span> < a href = " #" > 登录 a>
div>
< form id = " reg-form" action = " #" method = " get" >
< table>
< tr>
< td> 用户名 td>
< td class = " inputs" >
< input name = " username" type = " text" id = " username" >
< br>
< span id = " username_err" class = " err_msg" style = " display : none" > 用户名不太受欢迎 span>
td>
tr>
< tr>
< td> 密码 td>
< td class = " inputs" >
< input name = " password" type = " password" id = " password" >
< br>
< span id = " password_err" class = " err_msg" style = " display : none" > 密码格式有误 span>
td>
tr>
< tr>
< td> 手机号 td>
< td class = " inputs" > < input name = " tel" type = " text" id = " tel" >
< br>
< span id = " tel_err" class = " err_msg" style = " display : none" > 手机号格式有误 span>
td>
tr>
table>
< div class = " buttons" >
< input value = " 注 册" type = " submit" id = " reg_btn" >
div>
< br class = " clear" >
form>
div>
< script>
script>
body>
html>
register.css:
* {
margin : 0;
padding : 0;
list-style-type : none;
}
.reg-content {
padding : 30px;
margin : 3px;
}
a, img {
border : 0;
}
body {
background-image : url ( "../imgs/reg_bg_min.jpg" ) ;
text-align : center;
}
table {
border-collapse : collapse;
border-spacing : 0;
}
td, th {
padding : 0;
height : 90px;
}
.inputs {
vertical-align : top;
}
.clear {
clear : both;
}
.clear:before, .clear:after {
content : "" ;
display : table;
}
.clear:after {
clear : both;
}
.form-div {
background-color : rgba ( 255, 255, 255, 0.27) ;
border-radius : 10px;
border : 1px solid #aaa;
width : 424px;
margin-top : 150px;
margin-left : 1050px;
padding : 30px 0 20px 0px;
font-size : 16px;
box-shadow : inset 0px 0px 10px rgba ( 255, 255, 255, 0.5) , 0px 0px 15px rgba ( 75, 75, 75, 0.3) ;
text-align : left;
}
.form-div input[type="text"], .form-div input[type="password"], .form-div input[type="email"] {
width : 268px;
margin : 10px;
line-height : 20px;
font-size : 16px;
}
.form-div input[type="checkbox"] {
margin : 20px 0 20px 10px;
}
.form-div input[type="button"], .form-div input[type="submit"] {
margin : 10px 20px 0 0;
}
.form-div table {
margin : 0 auto;
text-align : right;
color : rgba ( 64, 64, 64, 1.00) ;
}
.form-div table img {
vertical-align : middle;
margin : 0 0 5px 0;
}
.footer {
color : rgba ( 64, 64, 64, 1.00) ;
font-size : 12px;
margin-top : 30px;
}
.form-div .buttons {
float : right;
}
input[type="text"], input[type="password"], input[type="email"] {
border-radius : 8px;
box-shadow : inset 0 2px 5px #eee;
padding : 10px;
border : 1px solid #D4D4D4;
color : #333333;
margin-top : 5px;
}
input[type="text"]:focus, input[type="password"]:focus, input[type="email"]:focus {
border : 1px solid #50afeb;
outline : none;
}
input[type="button"], input[type="submit"] {
padding : 7px 15px;
background-color : #3c6db0;
text-align : center;
border-radius : 5px;
overflow : hidden;
min-width : 80px;
border : none;
color : #FFF;
box-shadow : 1px 1px 1px rgba ( 75, 75, 75, 0.3) ;
}
input[type="button"]:hover, input[type="submit"]:hover {
background-color : #5a88c8;
}
input[type="button"]:active, input[type="submit"]:active {
background-color : #5a88c8;
}
.err_msg {
color : red;
padding-right : 170px;
}
#password_err,#tel_err {
padding-right : 195px;
}
#reg_btn {
margin-right : 50px; width : 285px; height : 45px; margin-top : 20px;
}
3.9.3 验证输入框
此小节完成如下功能:
校验用户名。当用户名输入框失去焦点时,判断输入的内容是否符合 长度是 6-12 位
规则,不符合使 id='username_err'
的span标签显示出来,给出用户提示。
校验密码。当密码输入框失去焦点时,判断输入的内容是否符合 长度是 6-12 位
规则,不符合使 id='password_err'
的span标签显示出来,给出用户提示。
校验手机号。当手机号输入框失去焦点时,判断输入的内容是否符合 长度是 11 位
规则,不符合使 id='tel_err'
的span标签显示出来,给出用户提示。
代码如下:
var usernameInput = document. getElementById ( "username" ) ;
usernameInput. onblur = function ( ) {
var username = usernameInput. value. trim ( ) ;
if ( username. length >= 6 && username. length <= 12 ) {
document. getElementById ( "username_err" ) . style. display = 'none' ;
} else {
document. getElementById ( "username_err" ) . style. display = '' ;
}
}
var passwordInput = document. getElementById ( "password" ) ;
passwordInput. onblur = function ( ) {
var password = passwordInput. value. trim ( ) ;
if ( password. length >= 6 && password. length <= 12 ) {
document. getElementById ( "password_err" ) . style. display = 'none' ;
} else {
document. getElementById ( "password_err" ) . style. display = '' ;
}
}
var telInput = document. getElementById ( "tel" ) ;
telInput. onblur = function ( ) {
var tel = telInput. value. trim ( ) ;
if ( tel. length == 11 ) {
document. getElementById ( "tel_err" ) . style. display = 'none' ;
} else {
document. getElementById ( "tel_err" ) . style. display = '' ;
}
}
3.9.4 验证表单
当用户点击 注册
按钮时,需要同时对输入的 用户名
、密码
、手机号
,如果都符合规则,则提交表单;如果有一个不符合规则,则不允许提交表单。实现该功能需要获取表单元素对象,并绑定 onsubmit
事件
var regForm = document. getElementById ( "reg-form" ) ;
regForm. onsubmit = function ( ) {
}
onsubmit
事件绑定的函数需要对输入的 用户名
、密码
、手机号
进行校验,这些校验我们之前都已经实现过了,这里我们还需要再校验一次吗?不需要,只需要对之前校验的代码进行改造,把每个校验的代码专门抽象到有名字的函数中,方便调用;并且每个函数都要返回结果来去决定是提交表单还是阻止表单提交,代码如下:
var usernameInput = document. getElementById ( "username" ) ;
usernameInput. onblur = checkUsername;
function checkUsername ( ) {
var username = usernameInput. value. trim ( ) ;
var flag = username. length >= 6 && username. length <= 12 ;
if ( flag) {
document. getElementById ( "username_err" ) . style. display = 'none' ;
} else {
document. getElementById ( "username_err" ) . style. display = '' ;
}
return flag;
}
var passwordInput = document. getElementById ( "password" ) ;
passwordInput. onblur = checkPassword;
function checkPassword ( ) {
var password = passwordInput. value. trim ( ) ;
var flag = password. length >= 6 && password. length <= 12 ;
if ( flag) {
document. getElementById ( "password_err" ) . style. display = 'none' ;
} else {
document. getElementById ( "password_err" ) . style. display = '' ;
}
return flag;
}
var telInput = document. getElementById ( "tel" ) ;
telInput. onblur = checkTel;
function checkTel ( ) {
var tel = telInput. value. trim ( ) ;
var flag = tel. length == 11 ;
if ( flag) {
document. getElementById ( "tel_err" ) . style. display = 'none' ;
} else {
document. getElementById ( "tel_err" ) . style. display = '' ;
}
return flag;
}
而 onsubmit
绑定的函数需要调用 checkUsername()
函数、checkPassword()
函数、checkTel()
函数。
var regForm = document. getElementById ( "reg-form" ) ;
regForm. onsubmit = function ( ) {
var flag = checkUsername ( ) && checkPassword ( ) && checkTel ( ) ;
return flag;
}
3.9 RegExp对象
RegExp 是正则对象。正则对象是判断指定字符串是否符合规则。
3.9.1 正则对象使用
1. 创建对象
正则对象有两种创建方式:
var reg = / 正则表达式 / ;
var reg = new RegExp ( "正则表达式" ) ;
2. 函数
test(str)
:判断指定字符串是否符合规则,返回 true或 false
3.9.2 正则表达式
从上面创建正则对象的格式中可以看出不管哪种方式都需要正则表达式,那么什么是正则表达式呢?
正则表达式定义了字符串组成的规则。也就是判断指定的字符串是否符合指定的规则,如果符合返回true,如果不符合返回false。
正则表达式是和语言无关的。很多语言都支持正则表达式,Java语言也支持,只不过正则表达式在不同的语言中的使用方式不同,js 中需要使用正则对象来使用正则表达式。
正则表达式常用的规则如下:
量词:
+:至少一个
*:零个或多个
?:零个或一个
{x}:x个
{m,}:至少m个
{m,n}:至少m个,最多n个
代码演示:
var reg = / ^\w{6,12}$ / ;
var str = "abcccc" ;
var flag = reg. test ( str) ;
alert ( flag) ;
4 Vue
4.1 MVVM模式
Model: 模型, 指数据模型,这个数据一般来自于服务器
View: 视图, 指页面标签内容
ViewModel:视图模型,将页面中可能发生改变的元素和某个变量在内存中进行绑定,当变量的值发生改变时会从内存中直接找到对应的元素让其改变
4.2 Vue相关概念
Vue框架是目前最流行的前端框架,免除原生JavaScript中的DOM操作。
Vue对象相当于MVVM设计模式中的VM, 负责将页面中可能发生改变的元素和变量进行绑定, 绑定完之后会不断监听变量的改变, 当变量的值发生改变时会自动找到对应的元素并改变其显示内容
Vue的官网https://cn.vuejs.org/
4.3 快速入门Hello Vue!
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 06HelloVue title>
< script src = " js/vue.js" > script>
head>
< body>
< div id = " app" >
< h1> {{info}} h1>
div>
< script>
let v = new Vue ( {
el : "#app" ,
data : {
info : "Hello Vue!"
}
} ) ;
setTimeout ( function ( ) {
v. info = "值改变了!" ;
} , 5000 ) ;
script>
body>
html>
4.4 Vue 指令
**指令:**HTML 标签上带有 v- 前缀的特殊属性,不同指令具有不同含义。例如:v-if,v-for…
常用的指令有:
指令
作用
v-bind
为HTML标签绑定属性值,如设置 href , css样式等
v-model
在表单元素上创建双向数据绑定
v-on
为HTML标签绑定事件
v-if
条件性的渲染某元素,判定为true时渲染,否则不渲染
v-else
条件性的渲染某元素,判定为true时渲染,否则不渲染
v-else-if
条件性的渲染某元素,判定为true时渲染,否则不渲染
v-show
根据条件展示某元素,区别在于切换的是display属性的值
v-for
列表渲染,遍历容器的元素或者对象的属性
v-text
让元素的文本内容和变量进行绑定
v-html
让元素的html内容和变量进行绑定
1. vue文本相关指令
v-text:让元素的文本内容和变量进行绑定
v-html:让元素的html内容和变量进行绑定
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> vue文本相关指令 title>
< script src = " js/vue.js" > script>
head>
< body>
< div>
< h1> {{info}} h1>
< p v-text = " info" > p>
< p v-html = " info" > p>
{{info}}
div>
< script>
let v = new Vue ( {
el : "div" ,
data : {
info : "文本相关练习加粗 "
}
} )
script>
body>
html>
2. v-bind:属性绑定
v-bind: 为HTML标签绑定属性值,如设置 href , css样式等。
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 属性绑定 title>
< script src = " js/vue.js" > script>
head>
< body>
< div>
< input type = " text" v-bind: value= " msg" >
< input type = " text" :value = " msg" >
< a :href = " url" > 超链接 a>
< img :src = " imgUrl" alt = " " width = " 300px" >
div>
< script>
let v = new Vue ( {
el : "div" ,
data : {
msg : "属性绑定测试" ,
url : "http://www.baidu.com" ,
imgUrl : "images/b.jpg"
}
} ) ;
script>
body>
html>
3. v-model双向绑定
v-model: 在表单元素上创建双向数据绑定,当变量的值发生改变页面会跟着改变, 页面的内容改变时变量也会跟着改变,只有使用form表单中的控件时才会涉及到双向绑定。
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 双向绑定 title>
< script src = " js/vue.js" > script>
head>
< body>
< div>
< input type = " text" v-model = " msg" >
< h1> {{msg}} h1>
< hr>
< input type = " radio" v-model = " gender" value = " 男" > 男
< input type = " radio" v-model = " gender" value = " 女" > 女
< h2> {{gender}} h2>
div>
< script>
let v = new Vue ( {
el : "div" ,
data : {
msg : "双向绑定测试aaa" ,
gender : "男"
}
} )
script>
body>
html>
4. v-on事件绑定
v-on: 为HTML标签绑定事件 可以简写为@click
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 事件绑定 title>
< script src = " js/vue.js" > script>
head>
< body>
< div>
< input type = " button" value = " 按钮1" v-on: click= " f()" >
< input type = " button" value = " 按钮2" @click = " f1()" >
{{info}}
div>
< script>
let v = new Vue ( {
el : "div" ,
data : {
info : "事件绑定"
} ,
methods : {
f : function ( ) {
v. info = "按钮1点击了" ;
} ,
f1 ( ) {
v. info = "按钮2点击了" ;
}
}
} )
script>
body>
html>
5. v-for循环遍历指令
指令使用的格式如下:
< 标签 v-for = " 变量名 in 集合模型数据" >
{{变量名}}
标签>
注意:需要循环那个标签,v-for
指令就写在那个标签上。
如果在页面需要使用到集合模型数据的索引,就需要使用如下格式:
< 标签 v-for = " (变量名,索引变量) in 集合模型数据" >
{{索引变量 + 1}} {{变量名}}
标签>
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> vue循环遍历 title>
< script src = " js/vue.js" > script>
head>
< body>
< div id = " app" >
< h1 v-for = " car in arr" > {{car.name}}-----{{car.price}} h1>
< hr>
< table border = " 1px" >
< caption> 国产优秀纯电汽车 caption>
< tr>
< th> 编号 th>
< th> 名字 th>
< th> 价格 th>
< th> 类型 th>
tr>
< tr v-for = " (car,i) in arr" >
< td> {{i+1}} td>
< td> {{car.name}} td>
< td> {{car.price}} td>
< td> {{car.type}} td>
tr>
table>
div>
< script>
let v = new Vue ( {
el : "#app" ,
data : {
arr : [
{ name : "比亚迪汉EV" , price : 250000 , type : "轿车" } ,
{ name : "奥迪GTR" , price : 2500000 , type : "轿跑" } ,
{ name : "极氪001" , price : 250000 , type : "轿跑" } ,
]
}
} ) ;
script>
body>
html>
6. 条件判断指令
指令
作用
v-if
条件性的渲染某元素,判定为true时渲染,否则不渲染
v-else
条件性的渲染某元素,判定为true时渲染,否则不渲染
v-else-if
条件性的渲染某元素,判定为true时渲染,否则不渲染
v-show
根据条件展示某元素,区别在于切换的是display属性的值
7. 案例
1 @click、v-model猜数字练习
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 猜数字练习 title>
< script src = " js/vue.js" > script>
head>
< body>
< div>
< input type = " text" placeholder = " 请输入0-100之间的整数" v-model = " number" >
< input type = " button" value = " 猜一猜" @click = " f()" >
< h1> 结果:{{msg}} h1>
div>
< script>
let num = parseInt ( Math. random ( ) * 101 ) ;
let count = 0 ;
console. log ( "随机数为:" + num) ;
let v = new Vue ( {
el : "div" ,
data : {
msg : "" ,
number : ""
} ,
methods : {
f ( ) {
count++ ;
console. log ( "你输入的数为" + v. number) ;
if ( v. number > num) {
v. msg= "猜大了!" ;
} else if ( v. number < num) {
v. msg= "猜小了!" ;
} else {
v. msg = "恭喜老板在第" + count + "次猜对了!" ;
count = 0 ;
num = parseInt ( Math. random ( ) * 101 ) ;
console. log ( "随机数为:" + num) ;
}
}
}
} ) ;
script>
body>
html>
2 @click、v-model计算器练习
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 计算器练习 title>
< script src = " js/vue.js" > script>
head>
< body>
< div>
< input type = " text" v-model = " i1" >
< input type = " text" v-model = " i2" >
< input type = " button" value = " 加" @click = " f(' +' )" >
< input type = " button" value = " 减" @click = " f(' -' )" >
< input type = " button" value = " 乘" @click = " f(' *' )" >
< input type = " button" value = " 除" @click = " f(' /' )" >
< h1> 结果:{{result}} h1>
div>
< script>
let v = new Vue ( {
el : "div" ,
data : {
result : "" ,
i1 : "" ,
i2 : ""
} ,
methods : {
f ( x ) {
if ( isNaN ( v. i1 || v. i2) ) {
v. result = "输入错误" ;
}
v. result = eval ( v. i1 + x+ v. i2) ;
}
}
} )
script>
body>
html>
3 @click、v-model员工列表练习
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 员工列表练习 title>
< script src = " js/vue.js" > script>
head>
< body>
< div id = " app" >
< input type = " text" placeholder = " 姓名" v-model = " name" >
< input type = " text" placeholder = " 工资" v-model = " salary" >
< input type = " text" placeholder = " 工作" v-model = " job" >
< input type = " button" value = " 添加" @click = " f()" >
< table border = " 1px" >
< caption> 员工列表 caption>
< tr>
< th> 编号 th>
< th> 姓名 th>
< th> 工资 th>
< th> 工作 th>
< th> 操作 th>
tr>
< tr v-for = " (e,i) in arr" >
< td> {{i+1}} td>
< td> {{e.name}} td>
< td> {{e.salary}} td>
< td> {{e.job}} td>
< td> < input type = " button" @click = " del(i)" value = " 删除" > td>
tr>
table>
div>
< script>
let v = new Vue ( {
el : "#app" ,
data : {
name : "" ,
salary : "" ,
job : "" ,
arr : [
{ name : "唐三" , salary : 1000 , job : "销售" } ,
{ name : "小舞" , salary : 1200 , job : "人事" } ,
]
} ,
methods : {
f ( ) {
v. arr. push ( { name : v. name, salary : v. salary, job : v. job} ) ;
v. name = "" ;
v. salary = "" ;
v. job = "" ;
} ,
del ( i ) {
v. arr. splice ( i, 1 ) ;
}
}
} ) ;
script>
body>
html>
4 v-for、v-bind:个人信息练习
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 个人信息练习 title>
< script src = " js/vue.js" > script>
< style>
input {
display : block;
}
table,input {
margin : 0 auto;
}
style>
head>
< body>
< div id = " app" >
< table border = " 1px" >
< caption> 个人信息 caption>
< tr>
< td> 照片: td>
< td> < img width = " 300px" alt = " " :src = " person.imgUrl" > td>
tr>
< tr>
< td> 名字: td>
< td> {{person.name}} td>
tr>
< tr>
< td> 年龄: td>
< td> {{person.age}} td>
tr>
< tr>
< td> 好友: td>
< td>
< ul>
< li v-for = " name in person.friend" >
{{name}}
li>
ul>
td>
tr>
table>
< input type = " button" value = " 请求数据" @click = " f()" >
div>
< script>
let v = new Vue ( {
el : "#app" ,
data : {
person : {
name : "xxx" ,
age : "x" ,
imgUrl : "" ,
friend : [ "xxx" , "xxx" , "xxx" ]
} ,
} ,
methods : {
f ( ) {
let person = {
name : "小舞" ,
age : 18 ,
imgUrl : "images/c.jpg" ,
friend : [ "宁荣荣" , "奥斯卡" , "马红俊" ]
} ;
v. person = person;
}
}
} ) ;
script>
body>
html>
5 显示隐藏相关条件判断指令综合练习
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 显示隐藏相关条件判断指令综合练习 title>
< script src = " js/vue.js" > script>
head>
< body>
< div id = " app" >
< div v-if = " !isLogin" >
< a href = " javascript:void(0)" > 注册 a>
< a href = " javascript:void(0)" @click = " isLogin=true" > 登录 a>
div>
< div v-else >
< input type = " text" v-model = " newName" >
< input type = " button" value = " 添加" @click = " f()" >
< a href = " javascript:void(0)" @click = " isLogin=false" > 登出 a>
div>
< ul>
< li v-for = " name in arr" > {{name}} li>
ul>
div>
< script>
let v = new Vue ( {
el : "#app" ,
data : {
arr : [ "刘备" , "关羽" ] ,
isLogin : false ,
newName : ""
} ,
methods : {
f ( ) {
v. arr. push ( v. newName) ;
}
}
} ) ;
script>
body>
html>
4.5 Vue的生命周期
状态
阶段周期
beforeCreate
创建前
created
创建后
beforeMount
载入前
mounted
挂载完成
beforeUpdate
更新前
updated
更新后
beforeDestroy
销毁前
destroyed
销毁后
beforeCreate(创建前) 在数据观测和初始化事件还未开始
created(创建后) 完成数据观测,属性和方法的运算,初始化事件,$el属性还没有显示出来
beforeMount(载入前) 在挂载开始之前被调用,相关的render函数首次被调用。实例已完成以下的配置:编译模板,把data里面的数据和模板生成html。注意此时还没有挂载html到页面上。
mounted(载入后) 在el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用。实例已完成以下的配置:用上面编译好的html内容替换el属性指向的DOM对象。完成模板中的html渲染到html页面中。此过程中进行ajax交互。
beforeUpdate(更新前) 在数据更新之前调用,发生在虚拟DOM重新渲染和打补丁之前。可以在该钩子中进一步地更改状态,不会触发附加的重渲染过程。
updated(更新后) 在由于数据更改导致的虚拟DOM重新渲染和打补丁之后调用。调用时,组件DOM已经更新,所以可以执行依赖于DOM的操作。然而在大多数情况下,应该避免在此期间更改状态,因为这可能会导致更新无限循环。该钩子在服务器端渲染期间不被调用。
beforeDestroy(销毁前) 在实例销毁之前调用。实例仍然完全可用。
destroyed(销毁后) 在实例销毁之后调用。调用后,所有的事件监听器会被移除,所有的子实例也会被销毁。该钩子在服务器端渲染期间不被调用。
mounted
:挂载完成,Vue初始化成功,HTML页面渲染成功。而以后我们会在该方法中发送异步请求,加载数据。 created
的使用: 在data{},之后
created : function ( ) {
axios. get ( "/currentUser" ) . then ( function ( response ) {
v. user = response. data;
v. isLogin = v. user == "" ? false : true ;
} ) ;
axios. get ( "/select" ) . then ( function ( response ) {
v. arr = response. data;
} ) ;
} ,
vue官网的生命周期图示:
4.6 Vue发起异步请求
通过Axios框架发出异步请求,所以需要引入Axios.js
< script src = " js/axios.min.js" > script>
axios. post ( "/login" , v. user) . then ( function ( response ) {
if ( response. data == 1 ) {
alert ( "登录成功!" ) ;
location. href = "/" ;
} else if ( response. data == 2 ) {
alert ( "用户名不存在!" ) ;
} else {
alert ( "密码错误!" ) ;
}
} ) ;
let cid = location. search. split ( "=" ) [ 1 ] ;
this . currentIndex = cid;
axios. get ( "/product/select/category?cid=" + cid) . then ( function ( response ) {
v. productArr = response. data;
} ) ;
4.7 Get请求和Post请求
从字面意思理解, Get是跟服务器要数据, Post是给服务器传数据
Get: 请求参数写在请求地址的后面(可见),请求参数有大小限制只能穿几k的数据(不能处理文件上传) 应用场景: 查询请求一般都会使用get, 删除也会使用get请求
Post:请求参数放在请求体里面(不可见),参数没有大小限制 应用场景: 文件上传, 带有敏感信息的请求(比如注册登录时有密码)
5 ElementUI
官网:https://element.eleme.cn/
DOCTYPE html >
< html>
< head>
< meta charset = " UTF-8" >
< title> 01helloEUI title>
< link rel = " stylesheet" href = " ../css/eui.css" >
head>
< body>
< div id = " app" >
div>
body>
< script src = " ../js/vue.js" > script>
< script src = " ../js/eui.js" > script>
< script>
let v = new Vue ( {
el : '#app' ,
data : function ( ) {
return {
} ;
}
} )
script>
html>
DOCTYPE html >
< html>
< head>
< meta charset = " UTF-8" >
< title> 02按钮 title>
< link rel = " stylesheet" href = " ../css/eui.css" >
head>
< body>
< div id = " app" >
< el-row>
< el-button> 默认按钮 el-button>
< el-button type = " primary" > 主要按钮 el-button>
< el-button type = " success" > 成功按钮 el-button>
< el-button type = " info" > 信息按钮 el-button>
< el-button type = " warning" > 警告按钮 el-button>
< el-button type = " danger" > 危险按钮 el-button>
el-row>
< el-row>
< el-button plain > 朴素按钮 el-button>
< el-button type = " primary" plain > 主要按钮 el-button>
< el-button type = " success" plain > 成功按钮 el-button>
< el-button type = " info" plain > 信息按钮 el-button>
< el-button type = " warning" plain > 警告按钮 el-button>
< el-button type = " danger" plain > 危险按钮 el-button>
el-row>
< el-row>
< el-button round > 圆角按钮 el-button>
< el-button type = " primary" round > 主要按钮 el-button>
< el-button type = " success" round > 成功按钮 el-button>
< el-button type = " info" round > 信息按钮 el-button>
< el-button type = " warning" round > 警告按钮 el-button>
< el-button type = " danger" round > 危险按钮 el-button>
el-row>
< el-row>
< el-button icon = " el-icon-search" circle > el-button>
< el-button type = " primary" icon = " el-icon-edit" circle > el-button>
< el-button type = " success" icon = " el-icon-check" circle > el-button>
< el-button type = " info" icon = " el-icon-message" circle > el-button>
< el-button type = " warning" icon = " el-icon-star-off" circle > el-button>
< el-button type = " danger" icon = " el-icon-delete" circle > el-button>
el-row>
< hr>
< el-button type = " success" plain > 默认按钮 el-button>
< el-button type = " success" plain size = " medium" > 中等按钮 el-button>
< el-button type = " success" plain size = " small" > 小型按钮 el-button>
< el-button type = " success" plain size = " mini" > 超小按钮 el-button>
div>
body>
< script src = " ../js/vue.js" > script>
< script src = " ../js/eui.js" > script>
< script>
let v = new Vue ( {
el : '#app' ,
data : function ( ) {
return {
}
}
} )
script>
html>
DOCTYPE html >
< html>
< head>
< meta charset = " UTF-8" >
< title> 03字体图标 title>
< link rel = " stylesheet" href = " ../css/eui.css" >
head>
< body>
< div id = " app" >
< i class = " el-icon-edit" > i>
< i class = " el-icon-share" > i>
< i class = " el-icon-delete" > i>
< i class = " el-icon-delete-solid" > 删除 i>
< i class = " el-icon-platform-eleme" style = " color : yellow; font-size : 50px; " > 饿了么 i>
< el-button type = " primary" icon = " el-icon-search" > 搜索 el-button>
< el-button type = " primary" icon = " el-icon-refresh" > 刷新 el-button>
div>
body>
< script src = " ../js/vue.js" > script>
< script src = " ../js/eui.js" > script>
< script>
let v = new Vue ( {
el : '#app' ,
data : function ( ) {
return {
}
}
} )
script>
html>
DOCTYPE html >
< html>
< head>
< meta charset = " UTF-8" >
< title> 04图片 title>
< link rel = " stylesheet" href = " ../css/eui.css" >
< style>
img {
background-color : yellow;
}
style>
head>
< body>
< div id = " app" >
< div class = " demo-image" >
< div class = " block" v-for = " fit in fits" :key = " fit" >
< span class = " demonstration" > {{ fit }} span>
< el-image
style = " width : 100px; height : 100px"
:src = " url"
:fit = " fit" > el-image>
div>
< h1> 1. 保证图片完整显示并且不能变形 h1>
< el-image style = " width : 200px; height : 200px" :src = " url" fit = " contain" > el-image>
< h1> 2. 保证图片完整显示 h1>
< el-image style = " width : 200px; height : 200px" :src = " url" fit = " fill" > el-image>
< h1> 3. 保证图片宽高比,并且沾满200*200 h1>
< el-image style = " width : 200px; height : 200px" :src = " url" fit = " cover" > el-image>
div>
div>
body>
< script src = " ../js/vue.js" > script>
< script src = " ../js/eui.js" > script>
< script>
let v = new Vue ( {
el : '#app' ,
data : function ( ) {
return {
fits : [ 'fill' , 'contain' , 'cover' , 'none' , 'scale-down' ] ,
url : 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg' ,
url2 : '../images/a.jpg'
}
}
} )
script>
html>
DOCTYPE html >
< html>
< head>
< meta charset = " UTF-8" >
< title> 05消息提示 title>
< link rel = " stylesheet" href = " ../css/eui.css" >
head>
< body>
< div id = " app" >
< template>
< el-button :plain = " true" @click = " open2" > 成功 el-button>
< el-button :plain = " true" @click = " open3" > 警告 el-button>
< el-button :plain = " true" @click = " open1" > 消息 el-button>
< el-button :plain = " true" @click = " open4" > 错误 el-button>
< el-button :plain = " true" @click = " open5" > 成功提示 el-button>
< el-button :plain = " true" @click = " open6" > 错误提示 el-button>
template>
div>
body>
< script src = " ../js/vue.js" > script>
< script src = " ../js/eui.js" > script>
< script>
let v = new Vue ( {
el : '#app' ,
data : function ( ) {
return {
}
} ,
methods : {
open1 ( ) {
this . $message ( '这是一条消息提示' ) ;
} ,
open2 ( ) {
this . $message ( {
message : '恭喜你,这是一条成功消息' ,
type : 'success'
} ) ;
} ,
open3 ( ) {
this . $message ( {
message : '警告哦,这是一条警告消息' ,
type : 'warning'
} ) ;
} ,
open4 ( ) {
this . $message. error ( '错了哦,这是一条错误消息' ) ;
} ,
open5 ( ) {
v. $message. success ( '登录成功!' ) ;
} ,
open6 ( ) {
this . $message. error ( '登录失败!' ) ;
} ,
}
} )
script>
html>
DOCTYPE html >
< html>
< head>
< meta charset = " UTF-8" >
< title> 06下拉菜单 title>
< link rel = " stylesheet" href = " ../css/eui.css" >
head>
< body>
< div id = " app" >
< el-dropdown>
< span class = " el-dropdown-link" >
下拉菜单< i class = " el-icon-arrow-down el-icon--right" > i>
span>
< el-dropdown-menu slot = " dropdown" >
< el-dropdown-item> 黄金糕 el-dropdown-item>
< el-dropdown-item> 狮子头 el-dropdown-item>
< el-dropdown-item> 螺蛳粉 el-dropdown-item>
< el-dropdown-item disabled > 双皮奶 el-dropdown-item>
< el-dropdown-item divided > 蚵仔煎 el-dropdown-item>
el-dropdown-menu>
el-dropdown>
< el-dropdown @command = " handleCommand" >
< span class = " el-dropdown-link" >
选择你的英雄< i class = " el-icon-arrow-down el-icon--right" > i>
span>
< el-dropdown-menu slot = " dropdown" >
< el-dropdown-item :command = " name" v-for = " name in arr" > {{name}} el-dropdown-item>
el-dropdown-menu>
el-dropdown>
< h1> {{info}} h1>
div>
body>
< script src = " ../js/vue.js" > script>
< script src = " ../js/eui.js" > script>
< script>
let v = new Vue ( {
el : '#app' ,
data : function ( ) {
return {
arr : [ "刘备" , "关羽" , "张飞" ] ,
info : ""
}
} ,
methods : {
handleCommand ( command ) {
this . $message. success ( '你选择的是:' + command) ;
this . info = command;
}
}
} )
script>
html>
DOCTYPE html >
< html>
< head>
< meta charset = " UTF-8" >
< title> 07导航菜单 title>
< link rel = " stylesheet" href = " ../css/eui.css" >
head>
< body>
< div id = " app" >
< el-menu default-active = " 4" class = " el-menu-demo" mode = " horizontal" @select = " handleSelect" >
< el-menu-item index = " 1" > 处理中心 el-menu-item>
< el-submenu index = " 2" >
< template slot = " title" > 我的工作台 template>
< el-menu-item index = " 2-1" > 选项1 el-menu-item>
< el-menu-item index = " 2-2" > 选项2 el-menu-item>
< el-menu-item index = " 2-3" > 选项3 el-menu-item>
< el-submenu index = " 2-4" >
< template slot = " title" > 选项4 template>
< el-menu-item index = " 2-4-1" > 选项1 el-menu-item>
< el-menu-item index = " 2-4-2" > 选项2 el-menu-item>
< el-menu-item index = " 2-4-3" > 选项3 el-menu-item>
el-submenu>
el-submenu>
< el-menu-item index = " 3" disabled > 消息中心 el-menu-item>
< el-menu-item index = " 4" > < a href = " " target = " _blank" > 订单管理 a> el-menu-item>
el-menu>
< br>
< br>
< br>
< el-menu
default-active = " 1"
class = " el-menu-demo"
mode = " horizontal"
@select = " handleSelect"
background-color = " #545c64"
text-color = " #fff"
active-text-color = " #ffd04b" >
< el-menu-item index = " 1" > 首页 el-menu-item>
< el-menu-item index = " 2" disabled > 直播课 el-menu-item>
< el-menu-item index = " 3" > 免费课 el-menu-item>
< el-menu-item index = " 4" > 线上课 el-menu-item>
< el-menu-item index = " 5" > 关于我们 el-menu-item>
el-menu>
div>
body>
< script src = " ../js/vue.js" > script>
< script src = " ../js/eui.js" > script>
< script>
let v = new Vue ( {
el : '#app' ,
data : function ( ) {
return {
} ;
} ,
methods : {
handleSelect ( key, keyPath ) {
console. log ( key, keyPath) ;
} ,
}
} )
script>
html>
DOCTYPE html >
< html>
< head>
< meta charset = " UTF-8" >
< title> 08表格 title>
< link rel = " stylesheet" href = " css/eui.css" >
head>
< body>
< div id = " app" >
< template>
< el-table
:data = " tableData"
style = " width : 100%" >
< el-table-column
prop = " date"
label = " 日期"
width = " 180" >
el-table-column>
< el-table-column
prop = " name"
label = " 姓名"
width = " 180" >
el-table-column>
< el-table-column
prop = " address"
label = " 地址" >
el-table-column>
el-table>
template>
< hr>
< el-input
placeholder = " 请输入名字"
v-model = " name"
clearable style = " width : 180px" >
el-input>
< el-input
placeholder = " 请输入工资"
v-model = " salary"
clearable style = " width : 180px" >
el-input>
< el-input
placeholder = " 请输入工作"
v-model = " job"
clearable style = " width : 180px" >
el-input>
< el-button type = " primary" plain @click = " f()" > 添加 el-button>
< h1> 员工列表 h1>
< el-table
:data = " arr"
style = " width : 100%" >
< el-table-column
prop = " name"
label = " 姓名"
width = " 180" >
el-table-column>
< el-table-column
prop = " salary"
label = " 工资"
width = " 180" >
el-table-column>
< el-table-column
prop = " job"
label = " 工作" width = " 180" >
el-table-column>
< el-table-column label = " 操作" width = " 180" > >
< template slot-scope = " scope" >
< el-button
size = " mini"
@click = " " > 编辑 el-button>
< el-button
size = " mini"
type = " danger"
@click = " handleDelete(scope.$index)" > 删除 el-button>
template>
el-table-column>
el-table>
div>
body>
< script src = " js/vue.js" > script>
< script src = " js/eui.js" > script>
< script>
let v = new Vue ( {
el : '#app' ,
data : function ( ) {
return {
tableData : [ {
date : '2016-05-02' ,
name : '王小虎' ,
address : '上海市普陀区金沙江路 1518 弄'
} , {
date : '2016-05-04' ,
name : '王小虎' ,
address : '上海市普陀区金沙江路 1517 弄'
} , {
date : '2016-05-01' ,
name : '王小虎' ,
address : '上海市普陀区金沙江路 1519 弄'
} , {
date : '2016-05-03' ,
name : '王小虎' ,
address : '上海市普陀区金沙江路 1516 弄'
} ] ,
arr : [
{ name : "唐三" , salary : 400 , job : "程序员" } ,
{ name : "小舞" , salary : 1000 , job : "销售" } ,
{ name : "千仞雪" , salary : 2000 , job : "人事" } ,
] ,
input : '' ,
name : '' ,
salary : '' ,
job : ""
} ;
} ,
methods : {
f ( ) {
if ( v. name == null || v. salary == null || v. job == null ) {
v. $message. error ( '添加失败,信息填写错误!' ) ;
} else {
this . arr. push ( { name : v. name, salary : v. salary, job : v. job} ) ;
v. $message. success ( '添加成功!' ) ;
v. name= "" ;
v. salary= "" ;
v. job= ""
}
} ,
handleDelete ( index ) {
v. arr. splice ( index, 1 ) ;
v. $message. success ( '删除成功!' ) ;
}
}
} )
script>
html>
DOCTYPE html >
< html>
< head>
< meta charset = " UTF-8" >
< title> 09员工练习表EUI title>
< link rel = " stylesheet" href = " css/eui.css" >
head>
< body>
< div id = " app" >
< h1> 添加员工 h1>
< el-input
placeholder = " 请输入名字"
v-model = " name"
clearable style = " width : 180px" >
el-input>
< el-input
placeholder = " 请输入工资"
v-model = " salary"
clearable style = " width : 180px" >
el-input>
< el-input
placeholder = " 请输入工作"
v-model = " job"
clearable style = " width : 180px" >
el-input>
< el-button type = " primary" plain @click = " f()" > 添加 el-button>
< h1> 员工列表 h1>
< el-table
:data = " arr" >
< el-table-column
type = " index"
label = " 编号"
>
el-table-column>
< el-table-column
prop = " name"
label = " 姓名"
>
el-table-column>
< el-table-column
prop = " salary"
label = " 工资" >
el-table-column>
< el-table-column
prop = " job"
label = " 工作" >
el-table-column>
< el-table-column label = " 操作" >
< template slot-scope = " scope" >
< el-button
size = " mini"
@click = " " > 编辑
el-button>
< el-popconfirm
icon = " el-icon-delete"
icon-color = " red"
title = " 这是一段内容确定删除吗?"
@confirm = " handleDelete(scope.$index,scope.row)"
>
< el-button slot = " reference"
size = " mini"
type = " danger" > 删除 el-button>
el-popconfirm>
template>
el-table-column>
el-table>
div>
body>
< script src = " js/vue.js" > script>
< script src = " js/eui.js" > script>
< script>
let v = new Vue ( {
el : '#app' ,
data : function ( ) {
return {
arr : [
{ name : "唐三" , salary : 400 , job : "程序员" } ,
{ name : "小舞" , salary : 1000 , job : "销售" } ,
{ name : "千仞雪" , salary : 2000 , job : "人事" } ,
] ,
input : '' ,
name : '' ,
salary : '' ,
job : "" ,
} ;
} ,
methods : {
f ( ) {
if ( v. name. trim ( ) == "" || v. salary. trim ( ) == "" || v. job. trim ( ) == "" ) {
v. $message. error ( '添加失败,信息填写错误!' ) ;
return ;
}
v. arr. push ( { name : v. name, salary : v. salary, job : v. job} ) ;
v. $message. success ( '添加成功!' ) ;
v. name = "" ;
v. salary = "" ;
v. job = ""
} ,
handleDelete ( index, row ) {
console. log ( index, row) ;
v. arr. splice ( index, 1 ) ;
v. $message. success ( '删除成功!' ) ;
}
}
} )
script>
html>
DOCTYPE html >
< html>
< head>
< meta charset = " UTF-8" >
< title> 10布局 title>
< link rel = " stylesheet" href = " css/eui.css" >
< style>
.c1 {
border : 1px solid red;
border-radius : 5px;
}
.c2 {
border : 1px solid green;
border-radius : 5px;
}
.c3 {
border : 1px solid blue;
border-radius : 5px;
}
style>
head>
< body>
< div id = " app" >
< el-row>
< el-col :span = " 12" > < div class = " c1" > 占12 div> el-col>
< el-col :span = " 12" > < div class = " c1" > 占12 div> el-col>
el-row>
< br>
< el-row gutter = " 20" >
< el-col :span = " 8" > < div class = " c2" > 占8 div> el-col>
< el-col :span = " 8" > < div class = " c2" > 占8 div> el-col>
< el-col :span = " 8" > < div class = " c2" > 占8 div> el-col>
el-row> < br>
< el-row>
< el-col :span = " 6" > < div class = " c3" > 占6 div> el-col>
< el-col :span = " 6" > < div class = " c3" > 占6 div> el-col>
< el-col :span = " 6" > < div class = " c3" > 占6 div> el-col>
< el-col :span = " 6" > < div class = " c3" > 占6 div> el-col>
el-row>
< h1> 练习:3:1 h1>
< el-row gutter = " 10" style = " width : 1200px; margin : 0 auto" >
< el-col :span = " 18" > < div class = " c1" > 占18 div> el-col>
< el-col :span = " 6" > < div class = " c1" > 占6 div> el-col>
el-row>
< h1> 分栏偏移 h1>
< el-row>
< el-col :span = " 20" offset = " 2" > < div class = " c1" > 占20 div> el-col>
el-row>
div>
body>
< script src = " js/vue.js" > script>
< script src = " js/eui.js" > script>
< script>
let v = new Vue ( {
el : '#app' ,
data : function ( ) {
return {
loading : true ,
} ;
}
} )
script>
html>
DOCTYPE html >
< html>
< head>
< meta charset = " UTF-8" >
< title> 11布局容器 title>
< link rel = " stylesheet" href = " css/eui.css" >
< style>
header {
background-color : red;
text-align : center;
}
main {
background-color : green;
height : 200px;
text-align : center;
}
footer {
background-color : blue;
height : 50px;
text-align : center;
}
aside {
background-color : burlywood;
}
style>
head>
< body>
< div id = " app" >
< h1> 头体 h1>
< el-container>
< el-header> Header el-header>
< el-main> Main el-main>
el-container>
< h1> 头体脚 h1>
< el-container>
< el-header> Header el-header>
< el-main> Main el-main>
< el-footer> Footer el-footer>
el-container>
< h1> 侧体 h1>
< el-container>
< el-aside width = " 200px" > Aside el-aside>
< el-main> Main el-main>
el-container>
< h1> 头侧体上下结构 h1>
< el-container>
< el-header> Header el-header>
< el-container>
< el-aside width = " 200px" > Aside el-aside>
< el-main> Main el-main>
el-container>
el-container>
< hr>
< el-container>
< el-header> Header el-header>
< el-container>
< el-aside width = " 200px" > Aside el-aside>
< el-container>
< el-main> Main el-main>
< el-footer> Footer el-footer>
el-container>
el-container>
el-container>
< hr>
< el-container>
< el-aside width = " 100px" > Aside el-aside>
< el-container>
< el-header> Header el-header>
< el-container>
< el-main> Main el-main>
< el-footer> Footer el-footer>
el-container>
el-container>
el-container>
div>
body>
< script src = " js/vue.js" > script>
< script src = " js/eui.js" > script>
< script>
let v = new Vue ( {
el : '#app' ,
data : function ( ) {
return {
} ;
}
} )
script>
html>
DOCTYPE html >
< html>
< head>
< meta charset = " UTF-8" >
< title> 12分割线 title>
< link rel = " stylesheet" href = " css/eui.css" >
head>
< body>
< div id = " app" >
< template>
< div>
< span> 青春是一个短暂的美梦, 当你醒来时, 它早已消失无踪 span>
< el-divider> el-divider>
< span> 少量的邪恶足以抵消全部高贵的品质, 害得人声名狼藉 span>
div>
< br>
< br>
< br>
< br>
< div>
< span> 头上一片晴天,心中一个想念 span>
< el-divider content-position = " left" > 少年包青天 el-divider>
< span> 饿了别叫妈, 叫饿了么 span>
< el-divider> < i class = " el-icon-loading" > i> el-divider>
< span> 为了无法计算的价值 span>
< el-divider content-position = " right" > 阿里云 el-divider>
div>
< br>
< br>
< br>
< br>
< div>
< span> 雨纷纷 span>
< el-divider direction = " vertical" > el-divider>
< span> 旧故里 span>
< el-divider direction = " vertical" > el-divider>
< span> 草木深 span>
< el-divider direction = " vertical" > el-divider>
< span> 我听闻 span>
< el-divider direction = " vertical" > el-divider>
< span> 你始终 span>
< el-divider direction = " vertical" > el-divider>
< span> 一个人 span>
div>
template>
div>
body>
< script src = " js/vue.js" > script>
< script src = " js/eui.js" > script>
< script>
let v = new Vue ( {
el : '#app' ,
data : function ( ) {
return {
} ;
}
} )
script>
html>
DOCTYPE html >
< html>
< head>
< meta charset = " UTF-8" >
< title> 13卡片 title>
< link rel = " stylesheet" href = " css/eui.css" >
head>
< body>
< div id = " app" >
< el-card class = " box-card" shadow = " hover" >
< div slot = " header" class = " clearfix" >
< span> 卡片名称 span>
< el-button style = " float : right; padding : 3px 0" type = " text" > 操作按钮 el-button>
div>
< div v-for = " o in 4" :key = " o" class = " text item" >
{{'列表内容 ' + o }}
div>
el-card>
< el-divider content-position = " left" > < span style = " font-size : 30px" > 带图片的卡片 span> el-divider>
< el-row>
< el-col :span = " 8" v-for = " (o, index) in 2" :key = " o" :offset = " index > 0 ? 2 : 0" >
< el-card :body-style = " { padding: ' 20px' }" shadow = " hover" >
< img src = " https://shadow.elemecdn.com/app/element/hamburger.9cf7b091-55e9-11e9-a976-7f4d0b07eef6.png" class = " image" >
< div style = " padding : 14px; " >
< span> 好吃的汉堡 span>
< div class = " bottom clearfix" >
< time class = " time" > {{ new Date() }} time>
< el-button type = " text" class = " button" > 操作按钮 el-button>
div>
div>
el-card>
el-col>
el-row>
div>
body>
< script src = " js/vue.js" > script>
< script src = " js/eui.js" > script>
< script>
let v = new Vue ( {
el : '#app' ,
data : function ( ) {
return {
} ;
}
} )
script>
html>
DOCTYPE html >
< html>
< head>
< meta charset = " UTF-8" >
< title> 14走马灯(轮播图) title>
< link rel = " stylesheet" href = " css/eui.css" >
< style>
.el-carousel__item h3 {
color : #475669;
font-size : 14px;
opacity : 0.75;
line-height : 150px;
margin : 0;
}
.el-carousel__item:nth-child(2n) {
background-color : #99a9bf;
}
.el-carousel__item:nth-child(2n+1) {
background-color : #d3dce6;
}
style>
head>
< body>
< div id = " app" >
< template>
< div class = " block" style = " width : 800px" >
< span class = " demonstration" > 默认 Hover 指示器触发 span>
< el-carousel height = " 400px" >
< el-carousel-item v-for = " item in arr" :key = " item" >
< img :src = " item" alt = " " style = " width : 100%; height : 100%" >
el-carousel-item>
el-carousel>
div>
< div class = " block" style = " width : 800px" >
< span class = " demonstration" > Click 指示器触发 span>
< el-carousel trigger = " click" height = " 400px" >
< el-carousel-item v-for = " item in arr" :key = " item" >
< img :src = " item" alt = " " style = " width : 100%; height : 100%" >
el-carousel-item>
el-carousel>
div>
template>
div>
body>
< script src = " js/vue.js" > script>
< script src = " js/eui.js" > script>
< script>
let v = new Vue ( {
el : '#app' ,
data : function ( ) {
return {
arr : [ "images/b1.jpg" , "images/b2.jpg" , "images/b3.jpg" , "images/image1.jpg" ]
} ;
}
} )
script>
html>
DOCTYPE html >
< html>
< head>
< meta charset = " UTF-8" >
< title> 15设置页面 title>
< link rel = " stylesheet" href = " css/eui.css" >
< style>
.el-header {
background-color : #B3C0D1;
color : #333;
line-height : 60px;
}
.el-aside {
color : #333;
}
style>
head>
< body>
< div id = " app" >
< el-container style = " height : 500px; border : 1px solid #eee" >
< el-aside width = " 200px" style = " background-color : rgb ( 238, 241, 246) " >
< el-menu :default-openeds = " []" >
< el-submenu index = " 1" >
< template slot = " title" > < i class = " el-icon-message" > i> 导航一 template>
< el-menu-item-group>
< template slot = " title" > 分组一 template>
< el-menu-item index = " 1-1" > 选项1 el-menu-item>
< el-menu-item index = " 1-2" > 选项2 el-menu-item>
el-menu-item-group>
< el-menu-item-group title = " 分组2" >
< el-menu-item index = " 1-3" > 选项3 el-menu-item>
el-menu-item-group>
< el-submenu index = " 1-4" >
< template slot = " title" > 选项4 template>
< el-menu-item index = " 1-4-1" > 选项4-1 el-menu-item>
el-submenu>
el-submenu>
< el-submenu index = " 2" >
< template slot = " title" > < i class = " el-icon-menu" > i> 导航二 template>
< el-menu-item-group>
< template slot = " title" > 分组一 template>
< el-menu-item index = " 2-1" > 选项1 el-menu-item>
< el-menu-item index = " 2-2" > 选项2 el-menu-item>
el-menu-item-group>
< el-menu-item-group title = " 分组2" >
< el-menu-item index = " 2-3" > 选项3 el-menu-item>
el-menu-item-group>
< el-submenu index = " 2-4" >
< template slot = " title" > 选项4 template>
< el-menu-item index = " 2-4-1" > 选项4-1 el-menu-item>
el-submenu>
el-submenu>
< el-submenu index = " 3" >
< template slot = " title" > < i class = " el-icon-setting" > i> 导航三 template>
< el-menu-item-group>
< template slot = " title" > 分组一 template>
< el-menu-item index = " 3-1" > 选项1 el-menu-item>
< el-menu-item index = " 3-2" > 选项2 el-menu-item>
el-menu-item-group>
< el-menu-item-group title = " 分组2" >
< el-menu-item index = " 3-3" > 选项3 el-menu-item>
el-menu-item-group>
< el-submenu index = " 3-4" >
< template slot = " title" > 选项4 template>
< el-menu-item index = " 3-4-1" > 选项4-1 el-menu-item>
el-submenu>
el-submenu>
el-menu>
el-aside>
< el-container>
< el-header style = " text-align : right; font-size : 12px" >
< el-dropdown @command = " handleCommand" >
< i class = " el-icon-setting" style = " margin-right : 15px" > i>
< el-dropdown-menu slot = " dropdown" >
< el-dropdown-item :command = " name" v-for = " name in arr2" > {{name}} el-dropdown-item>
el-dropdown-menu>
el-dropdown>
< span> 王小虎 span>
el-dropdown>
el-header>
< el-main>
< el-input
placeholder = " 请输入名字"
v-model = " name"
clearable style = " width : 300px" >
el-input>
< el-input
placeholder = " 请输入工资"
v-model = " salary"
clearable style = " width : 300px" >
el-input>
< el-input
placeholder = " 请输入工作"
v-model = " job"
clearable style = " width : 300px" >
el-input>
< el-button type = " primary" plain @click = " add()" > 添加 el-button>
< el-table
:data = " arr"
height = " 250" >
< el-table-column
prop = " name"
label = " 姓名" >
el-table-column>
< el-table-column
prop = " salary"
label = " 工资" >
el-table-column>
< el-table-column
prop = " job"
label = " 工作" >
el-table-column>
< el-table-column label = " 操作" width = " 180" > >
< template slot-scope = " scope" >
< el-button
size = " mini"
@click = " " > 编辑 el-button>
< el-button
size = " mini"
type = " danger"
@click = " handleDelete(scope.$index)" > 删除 el-button>
template>
el-table-column>
el-table>
el-main>
el-container>
el-container>
div>
body>
< script src = " js/vue.js" > script>
< script src = " js/eui.js" > script>
< script>
let v = new Vue
你可能感兴趣的:(CSDN文章,html,css,javascript)
程翔授《评价一篇记叙文》
行吟斯基
桂林十一中高一2中学生自读程老师学生文章板书课题师巡看。看完举手。问:它是记叙文。不商量。独立打分。学生评价打分。师:高低都正常,不受干扰。师巡,略评。打完举手。调查:分层次举手——高分先举手。最低分。最高95分。最低45分。女:差距太大!师:同一篇,相差55分。若是你的文章,愿落谁手?男:身临其境感觉。师:你有此经历?没也没关系。女:不优美……,结尾无升华……无感悟……师:辞藻不美?(师追问)男
移动端城市区县二级联动选择功能实现包
good2know
本文还有配套的精品资源,点击获取简介:本项目是一套为移动端设计的jQuery实现方案,用于简化用户在选择城市和区县时的流程。它包括所有必需文件:HTML、JavaScript、CSS及图片资源。通过动态更新下拉菜单选项,实现城市到区县的联动效果,支持数据异步加载。开发者可以轻松集成此功能到移动网站或应用,并可基于需求进行扩展和优化。1.jQuery移动端解决方案概述jQuery技术简介jQuery
日更006 终极训练营day3
懒cici
人生创业课(2)今天的主题:学习方法一:遇到有用的书,反复读,然后结合自身实际,列践行清单,不要再写读书笔记思考这本书与我有什么关系,我在哪些地方能用到,之后我该怎么用方法二:读完书没映像怎么办?训练你的大脑,方法:每读完一遍书,立马合上书,做一场分享,几分钟都行对自己的学习要求太低,要逼自己方法三:学习深度不够怎么办?找到细分领域的榜样,把他们的文章、书籍、产品都体验一遍,成为他们的超级用户,向
25-1-2019
树藤与海岛呢
hello八月来报道了今天看到了一篇文章就只想记下那两句话:良田千顷不过一日三餐广夏万间只睡卧榻三尺大概的意思就是要珍惜当下不要等来不及的时候才珍惜分享今天的两餐最近没有时间运动呢下个月补回好了说完了哈哈goodnight图片发自App图片发自App
日更50天有什么收益?
星湾二宝
坚持在平台上日更50天了,平台也为我生成了日更50天徽章,小开心一下这份坚持。日更50天徽章那坚持50天都有哪些收益呢?收益一,就是最直观的那些钻和贝,我这边确实不太高,但是这些贝足够支撑我保持会员的资格,能够在发文的时候帮助友友们去除广告,方便阅读。钻和贝收益二,文章的收获,日更50天,坚持写作3.7万文字,书写的文字也从开始的流水账/碎碎念逐渐加入自己的思考和观点。以前,一个念头会一晃而过,如
别再讲道理啦,对方听不进去的
方所
我之前写过一篇叫做《你总妄想改变他人》,然后就有朋友跟我说,有一些方法可以改变他人之类的。嗯,是这样,但是任何具体的问题,都要限定好语境,描述清楚前提条件,然后再表达观点,我的这位朋友的说法就犯了一刀切的错误,这样并不能让讨论正常展开(这篇我得先给她看看,不然可能会挨揍)。好了,hhhh,谁让她不能写文章呢,我就来再说一说吧。我前面说过,我们在学到一个道理、学会一种方法之后,总是迫不及待地想要去与
【C++算法】76.优先级队列_前 K 个高频单词
流星白龙
优选算法C++ c++ 算法 开发语言
文章目录题目链接:题目描述:解法C++算法代码:题目链接:692.前K个高频单词题目描述:解法利用堆来解决TopK问题预处理一下原始的字符串数组,用一个哈希表统计一下每一个单词出现的频次。创建一个大小为k的堆频次:小根堆字典序(频次相同的时候):大根堆循环让元素依次进堆判断提取结果C++算法代码:classSolution{//定义类型别名,PSI表示对typedefpairPSI;//自定义比较
Flowable 高级扩展:自定义元素与性能优化实战
练习时长两年半的程序员小胡
Flowable 流程引擎实战指南 流程图 flowable BPMN 流程引擎 java
在前五篇文章中,我们从基础概念、流程设计、API实战、SpringBoot集成,到外部系统协同,逐步构建了Flowable的应用体系。但企业级复杂场景中,原生功能往往难以满足定制化需求——比如需要特殊的审批规则网关、与决策引擎联动实现动态路由,或是在高并发场景下优化流程引擎性能。本文将聚焦Flowable的高级扩展能力,详解如何自定义流程元素、集成规则引擎,并掌握大型系统中的性能调优策略。一、自定
《实际生活是我们的指南针》——教育中寻找曙光
托克托126何芳
陶行知先生的文章相对《致青年教师》比较难理解,但是他热爱学生,在书中处处能感受到。在《实际生活是我们的指南针》文中他说道:“我虽觉得我有好多地方可以帮助诸位,但指志针确是有些不敢当。我和诸位同是在乡村里摸路的人。我们的真正指南针只是实际生活。”这些话不仅使人感到他非常谦虛,既不夸大自己的作用也不轻视自己的作用。图片发自App我们的真正指南针只是实际生活。实际生活向我们供给无穷的问题,要求不断的解决
SpringMVC的执行流程
1、什么是MVCMVC是一种设计模式。MVC的原理图如下所示M-Model模型(完成业务逻辑:有javaBean构成,service+dao+entity)V-View视图(做界面的展示jsp,html……)C-Controller控制器(接收请求—>调用模型—>根据结果派发页面2、SpringMVC是什么SpringMVC是一个MVC的开源框架,SpringMVC=Struts2+Spring,
免费排版助手:智能修正段落 + 删除干扰符,杂乱文本一键变规范
各位文字工作者们!你们有没有被排版折磨到崩溃的时候?我跟你们说,我之前排版一篇文章,那简直就像在走迷宫,头晕眼花的!不过后来我发现了一款软件——排版助手!软件下载地址安装包这玩意儿是个文章智能排版工具,专门给新闻编辑、文摘网站这些文字工作者用的。它功能老多了,能修正段落,把那些乱七八糟的段落变得规规矩矩;还能删除干扰符,就像给文章做了个大扫除,把没用的东西都清理掉;简繁转换也不在话下,不管是简体还
最佳好女婿赵倩王城(精彩热门小说)最佳好女婿赵倩王城&全集目录免费阅读
海边书楼
最佳好女婿赵倩王城(精彩热门小说)最佳好女婿赵倩王城&全集目录免费阅读主角:赵倩王城简介:女人叫赵倩,三十八岁,很漂亮,----阅读全文小说内容请翻阅文章最底部---王城根本没有想到,女友的妈妈在自乐的时候,叫的竟然是自己的名字。女人叫赵倩,三十八岁,很漂亮,腰很细,腿很长,王城有些怪异赵倩为什么会放过自己,但赵倩没有发怒,却也让王城长长的舒了一口气,坐到沙发上点了根烟抽了起来。“王城,什么时候回
我最喜欢的公众号
素颜创始人小云
一年多前,也是因为工作的原因。认识了她,她是我七个人物法其一,她在我心里也是很敬佩的一个女孩子。她会讲一些护肤知识,哪些产品好用哪些不好用而他讲解的产品都是我跃跃欲试的。图片发自App她做的每一篇文章都很精美,可以吸引到我从头看到尾,看每一个字都会很珍惜很期待,做事也特别的认真仔细。去年出了一本《活得漂亮》我也看了她的创业故事,很厉害!她的认真及敬业精神我觉得是很难学得来的,现在怀孕3个月了,依然
js操作样式
郝加升
DOM样式属性和方法:指定的元素,它的style有这么几个属性和方法:cssText:通过这个属性可以访问到元素的特性style设置的属性,并且可以直接赋值设置。removeProperty(属性名称):从样式中删除给定属性。setProperty(属性名称,值,权重):可以通过这个方法设置给定样式的同时设置其权重,可以传入”important”或者一个空字符串。获取计算后样式:window.ge
仿品百达翡丽男表价格(仿品百达翡丽价格一览表)
爱表之家
百达翡丽作为世界顶级的钟表品牌,其男表以精湛的工艺、卓越的品质和独特的设计赢得了众多钟表爱好者的青睐。然而,由于其高昂的价格,许多消费者转向仿品市场,以较低的价格体验类似的设计与风格【重要提醒】文章最下面有联系方式将对仿品百达翡丽男表的价格进行详细解析,帮助消费者更好地了解这一市场。一、仿品百达翡丽男表价格区间仿品百达翡丽男表的价格因其品质、材质、功能等因素而差异较大,大致可以分为以下几个价格区间
Android 应用权限管理详解
文章目录1.权限类型2.权限请求机制3.权限组和分级4.权限管理的演进5.权限监控和SELinux强制访问控制6.应用权限审核和GooglePlayProtect7.开发者最佳实践8.用户权限管理9.Android应用沙箱模型10.ScopedStorage(分区存储)11.背景位置权限(BackgroundLocationAccess)12.权限回收和自动清理13.权限请求的用户体验设计14.G
日常
黄梅飘香
这几天,没有写文。不过也一直关注,关注上好友的文章。最近看小红书看到邓为,又看了长相思。看了杨紫演的小六。邓为演的叶十七。还挺好。杨紫还挺让人开心,喜欢的。可爱。邓为演的也很迷人。很温顺。最近小孩高三,开始返校上课了。我也决定每天晚上老早睡,不拖到十一点,或更晚。早起,锻炼也行,下地刨地种菜要紧。说的容易,做起来难。前两天下雨,我净在家玩了。看手机没够。拼多多一看就想买。想给小孩买件新衣服。又想买
Selenium 特殊控件操作与 ActionChains 实践详解
小馋喵知识杂货铺
selenium 测试工具
1.下拉框单选操作(a)使用SeleniumSelect类(标准HTML标签)Selenium提供了内置的Select类用于操作标准下拉框,这种方式简单且直观。fromselenium.webdriver.support.uiimportSelect#定位下拉框dropdown=Select(driver.find_element("id","dropdown_id"))#通过以下三种方式选择单个
Pktgen-DPDK:开源网络测试工具的深度解析与应用
艾古力斯
本文还有配套的精品资源,点击获取简介:Pktgen-DPDK是基于DPDK的高性能流量生成工具,适用于网络性能测试、硬件验证及协议栈开发。它支持多种网络协议,能够模拟高吞吐量的数据包发送。本项目通过利用DPDK的高速数据包处理能力,允许用户自定义数据包内容,并实现高效的数据包管理与传输。文章将指导如何安装DPDK、编译Pktgen、配置工具以及使用方法,最终帮助开发者和网络管理员深入理解并优化网络
微信公众号回调java_处理微信公众号消息回调
weixin_39607620
微信公众号回调java
1、背景在上一节中,咱们知道如何接入微信公众号,可是以后公众号会与咱们进行交互,那么微信公众号如何通知到咱们本身的服务器呢?咱们知道咱们接入的时候提供的url是GET/mp/entry,那么公众号以后产生的事件将会以POST/mp/entry发送到咱们本身的服务器上。html2、代码实现,此处仍是使用weixin-java-mp这个框架实现一、引入weixin-java-mpcom.github.
手把手教你用C语言实现顺序表
hello,大家好,本篇文章旨在为大家讲解如何使用C语言实现顺序表,还有就是小编自己复习一下相关知识,OK,那我们现在开始。在通讯录中,有增删查改等功能,那么顺序表我们也会对以上功能进行实现。一、创建并初始化顺序表1.创建typedefintSLDataType;#defineINIT_CAPACITY4//动态顺序表--按需申请typedefstructSeqList{SLDataType*a;
selenium特殊场景处理
Monica_ll
Selenium selenium chrome python
文章目录前言一、多窗口处理二、浏览器弹窗处理包含alert、confirm、prompt三、鼠标和键盘事件处理前言在使用selenium操作浏览器的过程中可能需要借助键盘和鼠标功能完成一些操作,或者操作弹窗处理,本文主要是整理自己工作过程中使用过的一些方法一、多窗口处理在实际测试过程中经常会有通过点击或者连接打开新的窗口,这种情况下就需要切换webDriver到对应浏览器对象才能操作新窗口的元素。
听覃杰007写作精进课第五天分享心得
曹端春
早上听覃老大直播007写作精进课程第五天,获益良多。关于写作的黄金三法:多读,多写,多动,确实说到了写作的真谛。一,多读,扩大阅读面,精读相关经典作家的经典作品,逐步构建自己的知识体系;阅读方面推荐指读法,这是聪明人用的笨办法,读本离眼睛远些,可让视野更开阔些,能提高30%的速度;二,多写,象高手一样靠汗水写作,写不出来硬写,找准自己的定位,在一个行业内了解100个关键词,输出糸列文章,并且多分享
Qwen3 大模型实战:使用 vLLM 部署与函数调用(Function Call)全攻略
曦紫沐
大模型 大模型部署 Qwen3 vLLM 函数调用
文章摘要本文将带你从零开始,深入掌握如何使用Qwen3-8B大语言模型,结合vLLM进行高性能部署,并通过函数调用(FunctionCall)实现模型与外部工具的智能联动。我们将详细讲解部署命令、调用方式、代码示例及实际应用场景,帮助你快速构建基于Qwen3的智能应用。一、Qwen3简介与部署环境准备Qwen3是通义千问系列的最新一代大语言模型,具备强大的自然语言理解和生成能力,尤其在函数调用、工
你竟然还在用克隆删除?Conda最新版rename命令全攻略!
曦紫沐
Python基础知识 conda 虚拟环境管理
文章摘要Conda虚拟环境管理终于迎来革命性升级!本文揭秘Conda4.9+版本新增的rename黑科技,彻底告别传统“克隆+删除”的繁琐操作。从命令解析到实战案例,手把手教你如何安全高效地重命名Python虚拟环境,附带版本检测、环境迁移、故障排查等进阶技巧,助你提升开发效率10倍!一、颠覆认知:Conda居然自带重命名功能?很多开发者仍停留在“Conda无法直接重命名环境”的认知阶段,实际上自
链商拉不到人能赚钱么,谈谈我的看法
糖葫芦不甜
链商作为一种新兴的商业形态,往往依赖于用户网络的扩展和交易量的增加来实现价值增长,但这并不意味着没有直接拉新就无法盈利。以下是我对这一问题的几点看法:招合作伙伴↓微信在文章底部。首先,链商能否赚钱,关键在于其是否能提供独特且有价值的产品或服务。如果链商平台能够构建出高效、透明、安全的价值交换体系,解决行业痛点,提升用户体验,那么即使没有大规模的拉新活动,也能通过现有用户的口碑传播和持续使用来产生稳
Zread.AI:一键将GitHub项目转化为结构化中文手册的AI代码维基工具
Zread.AI:一键将GitHub项目转化为结构化中文手册的AI代码维基工具文章来源:PoixeAI文章目录Zread.AI工具概述核心功能优势亮点典型应用场景上手指南注意事项官网地址Zread.AI由智谱Z.ai推出,是一款面向开发者的AI代码维基工具,可在几秒内把任何公开GitHub仓库转化为结构化中文手册,并通过独家Buzz面板聚合commits、issues与相关新闻,让项目脉搏一目了然
人工智能应用研究快讯 2021-11-30
峰谷皆平
[HTML]ArtificialIntelligenceforSkinCancerDetection:ScopingReviewATakiddin,JSchneider,YYang,AAbd-Alrazaq...JournalofMedicalInternet...,2021ABSTACT:Background:Skincanceristhemostcommoncancertypeaffectin
Android 基础知识:Android 应用权限详解
流水mpc
android
这篇文章为大家系统的梳理一下Android权限相关的知识,在日常开发中,我们都用过权限,但是对于权限的一些细节我们可能掌握的还不够全面,这篇文章会全面的为大家介绍权限相关的知识。当然,本篇文章依然是参考了Google的官方文档:应用权限。本文目录一、认识Android权限(一)Android系统为什么需要权限?Android系统设置权限的目的是保护Android用户的隐私。对于用户的敏感数据And
Android GreenDao介绍和Generator生成表对象代码
目录(?)[-]介绍创建工程转载请注明:http://blog.csdn.net/sinat_30276961/article/details/50052109最近无意中发现了GreenDao,然后查看了一些资料后,发现这个数据库框架很适合用,于是乎,查看了官网的api,并自己写了一个小应用总结一下它的使用方法。介绍按照国际惯例,在开篇,总要先介绍一下什么是GreenDao吧。首先需要说明的是Gr
Java序列化进阶篇
g21121
java序列化
1.transient
类一旦实现了Serializable 接口即被声明为可序列化,然而某些情况下并不是所有的属性都需要序列化,想要人为的去阻止这些属性被序列化,就需要用到transient 关键字。
escape()、encodeURI()、encodeURIComponent()区别详解
aigo
JavaScript Web
原文:http://blog.sina.com.cn/s/blog_4586764e0101khi0.html
JavaScript中有三个可以对字符串编码的函数,分别是: escape,encodeURI,encodeURIComponent,相应3个解码函数:,decodeURI,decodeURIComponent 。
下面简单介绍一下它们的区别
1 escape()函
ArcgisEngine实现对地图的放大、缩小和平移
Cb123456
添加矢量数据 对地图的放大、缩小和平移 Engine
ArcgisEngine实现对地图的放大、缩小和平移:
个人觉得是平移,不过网上的都是漫游,通俗的说就是把一个地图对象从一边拉到另一边而已。就看人说话吧.
具体实现:
一、引入命名空间
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.Controls;
二、代码实现.
Java集合框架概述
天子之骄
Java集合框架概述
集合框架
集合框架可以理解为一个容器,该容器主要指映射(map)、集合(set)、数组(array)和列表(list)等抽象数据结构。
从本质上来说,Java集合框架的主要组成是用来操作对象的接口。不同接口描述不同的数据类型。
简单介绍:
Collection接口是最基本的接口,它定义了List和Set,List又定义了LinkLi
旗正4.0页面跳转传值问题
何必如此
java jsp
跳转和成功提示
a) 成功字段非空forward
成功字段非空forward,不会弹出成功字段,为jsp转发,页面能超链接传值,传输变量时需要拼接。接拼接方式list.jsp?test="+strweightUnit+"或list.jsp?test="+weightUnit+&qu
全网唯一:移动互联网服务器端开发课程
cocos2d-x小菜
web开发 移动开发 移动端开发 移动互联 程序员
移动互联网时代来了! App市场爆发式增长为Web开发程序员带来新一轮机遇,近两年新增创业者,几乎全部选择了移动互联网项目!传统互联网企业中超过98%的门户网站已经或者正在从单一的网站入口转向PC、手机、Pad、智能电视等多端全平台兼容体系。据统计,AppStore中超过85%的App项目都选择了PHP作为后端程
Log4J通用配置|注意问题 笔记
7454103
DAO apache tomcat log4j Web
关于日志的等级 那些去 百度就知道了!
这几天 要搭个新框架 配置了 日志 记下来 !做个备忘!
#这里定义能显示到的最低级别,若定义到INFO级别,则看不到DEBUG级别的信息了~!
log4j.rootLogger=INFO,allLog
# DAO层 log记录到dao.log 控制台 和 总日志文件
log4j.logger.DAO=INFO,dao,C
SQLServer TCP/IP 连接失败问题 ---SQL Server Configuration Manager
darkranger
sql c windows SQL Server XP
当你安装完之后,连接数据库的时候可能会发现你的TCP/IP 没有启动..
发现需要启动客户端协议 : TCP/IP
需要打开 SQL Server Configuration Manager...
却发现无法打开 SQL Server Configuration Manager..??
解决方法: C:\WINDOWS\system32目录搜索framedyn.
[置顶] 做有中国特色的程序员
aijuans
程序员
从出版业说起 网络作品排到靠前的,都不会太难看,一般人不爱看某部作品也是因为不喜欢这个类型,而此人也不会全不喜欢这些网络作品。究其原因,是因为网络作品都是让人先白看的,看的好了才出了头。而纸质作品就不一定了,排行榜靠前的,有好作品,也有垃圾。 许多大牛都是写了博客,后来出了书。这些书也都不次,可能有人让为不好,是因为技术书不像小说,小说在读故事,技术书是在学知识或温习知识,有些技术书读得可
document.domain 跨域问题
avords
document
document.domain用来得到当前网页的域名。比如在地址栏里输入:javascript:alert(document.domain); //www.315ta.com我们也可以给document.domain属性赋值,不过是有限制的,你只能赋成当前的域名或者基础域名。比如:javascript:alert(document.domain = "315ta.com");
关于管理软件的一些思考
houxinyou
管理
工作好多看年了,一直在做管理软件,不知道是我最开始做的时候产生了一些惯性的思维,还是现在接触的管理软件水平有所下降.换过好多年公司,越来越感觉现在的管理软件做的越来越乱.
在我看来,管理软件不论是以前的结构化编程,还是现在的面向对象编程,不管是CS模式,还是BS模式.模块的划分是很重要的.当然,模块的划分有很多种方式.我只是以我自己的划分方式来说一下.
做为管理软件,就像现在讲究MVC这
NoSQL数据库之Redis数据库管理(String类型和hash类型)
bijian1013
redis 数据库 NoSQL
一.Redis的数据类型
1.String类型及操作
String是最简单的类型,一个key对应一个value,string类型是二进制安全的。Redis的string可以包含任何数据,比如jpg图片或者序列化的对象。
Set方法:设置key对应的值为string类型的value
Tomcat 一些技巧
征客丶
java tomcat dos
以下操作都是在windows 环境下
一、Tomcat 启动时配置 JAVA_HOME
在 tomcat 安装目录,bin 文件夹下的 catalina.bat 或 setclasspath.bat 中添加
set JAVA_HOME=JAVA 安装目录
set JRE_HOME=JAVA 安装目录/jre
即可;
二、查看Tomcat 版本
在 tomcat 安装目
【Spark七十二】Spark的日志配置
bit1129
spark
在测试Spark Streaming时,大量的日志显示到控制台,影响了Spark Streaming程序代码的输出结果的查看(代码中通过println将输出打印到控制台上),可以通过修改Spark的日志配置的方式,不让Spark Streaming把它的日志显示在console
在Spark的conf目录下,把log4j.properties.template修改为log4j.p
Haskell版冒泡排序
bookjovi
冒泡排序 haskell
面试的时候问的比较多的算法题要么是binary search,要么是冒泡排序,真的不想用写C写冒泡排序了,贴上个Haskell版的,思维简单,代码简单,下次谁要是再要我用C写冒泡排序,直接上个haskell版的,让他自己去理解吧。
sort [] = []
sort [x] = [x]
sort (x:x1:xs)
| x>x1 = x1:so
java 路径 配置文件读取
bro_feng
java
这几天做一个项目,关于路径做如下笔记,有需要供参考。
取工程内的文件,一般都要用相对路径,这个自然不用多说。
在src统计目录建配置文件目录res,在res中放入配置文件。
读取文件使用方式:
1. MyTest.class.getResourceAsStream("/res/xx.properties")
2. properties.load(MyTest.
读《研磨设计模式》-代码笔记-简单工厂模式
bylijinnan
java 设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
package design.pattern;
/*
* 个人理解:简单工厂模式就是IOC;
* 客户端要用到某一对象,本来是由客户创建的,现在改成由工厂创建,客户直接取就好了
*/
interface IProduct {
SVN与JIRA的关联
chenyu19891124
SVN
SVN与JIRA的关联一直都没能装成功,今天凝聚心思花了一天时间整合好了。下面是自己整理的步骤:
一、搭建好SVN环境,尤其是要把SVN的服务注册成系统服务
二、装好JIRA,自己用是jira-4.3.4破解版
三、下载SVN与JIRA的插件并解压,然后拷贝插件包下lib包里的三个jar,放到Atlassian\JIRA 4.3.4\atlassian-jira\WEB-INF\lib下,再
JWFDv0.96 最新设计思路
comsci
数据结构 算法 工作 企业应用 公告
随着工作流技术的发展,工作流产品的应用范围也不断的在扩展,开始进入了像金融行业(我已经看到国有四大商业银行的工作流产品招标公告了),实时生产控制和其它比较重要的工程领域,而
vi 保存复制内容格式粘贴
daizj
vi 粘贴 复制 保存原格式 不变形
vi是linux中非常好用的文本编辑工具,功能强大无比,但对于复制带有缩进格式的内容时,粘贴的时候内容错位很严重,不会按照复制时的格式排版,vi能不能在粘贴时,按复制进的格式进行粘贴呢? 答案是肯定的,vi有一个很强大的命令可以实现此功能 。
在命令模式输入:set paste,则进入paste模式,这样再进行粘贴时
shell脚本运行时报错误:/bin/bash^M: bad interpreter 的解决办法
dongwei_6688
shell脚本
出现原因:windows上写的脚本,直接拷贝到linux系统上运行由于格式不兼容导致
解决办法:
1. 比如文件名为myshell.sh,vim myshell.sh
2. 执行vim中的命令 : set ff?查看文件格式,如果显示fileformat=dos,证明文件格式有问题
3. 执行vim中的命令 :set fileformat=unix 将文件格式改过来就可以了,然后:w
高一上学期难记忆单词
dcj3sjt126com
word english
honest 诚实的;正直的
argue 争论
classical 古典的
hammer 锤子
share 分享;共有
sorrow 悲哀;悲痛
adventure 冒险
error 错误;差错
closet 壁橱;储藏室
pronounce 发音;宣告
repeat 重做;重复
majority 大多数;大半
native 本国的,本地的,本国
hibernate查询返回DTO对象,DTO封装了多个pojo对象的属性
frankco
POJO hibernate查询 DTO
DTO-数据传输对象;pojo-最纯粹的java对象与数据库中的表一一对应。
简单讲:DTO起到业务数据的传递作用,pojo则与持久层数据库打交道。
有时候我们需要查询返回DTO对象,因为DTO
Partition List
hcx2013
partition
Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x.
You should preserve the original relative order of th
Spring MVC测试框架详解——客户端测试
jinnianshilongnian
上一篇《Spring MVC测试框架详解——服务端测试》已经介绍了服务端测试,接下来再看看如果测试Rest客户端,对于客户端测试以前经常使用的方法是启动一个内嵌的jetty/tomcat容器,然后发送真实的请求到相应的控制器;这种方式的缺点就是速度慢;自Spring 3.2开始提供了对RestTemplate的模拟服务器测试方式,也就是说使用RestTemplate测试时无须启动服务器,而是模拟一
关于推荐个人观点
liyonghui160com
推荐系统 关于推荐个人观点
回想起来,我也做推荐了3年多了,最近公司做了调整招聘了很多算法工程师,以为需要多么高大上的算法才能搭建起来的,从实践中走过来,我只想说【不是这样的】
第一次接触推荐系统是在四年前入职的时候,那时候,机器学习和大数据都是没有的概念,什么大数据处理开源软件根本不存在,我们用多台计算机web程序记录用户行为,用.net的w
不间断旋转的动画
pangyulei
动画
CABasicAnimation* rotationAnimation;
rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
rotationAnimation.toValue = [NSNumber numberWithFloat: M
自定义annotation
sha1064616837
java enum annotation reflect
对象有的属性在页面上可编辑,有的属性在页面只可读,以前都是我们在页面上写死的,时间一久有时候会混乱,此处通过自定义annotation在类属性中定义。越来越发现Java的Annotation真心很强大,可以帮我们省去很多代码,让代码看上去简洁。
下面这个例子 主要用到了
1.自定义annotation:@interface,以及几个配合着自定义注解使用的几个注解
2.简单的反射
3.枚举
Spring 源码
up2pu
spring
1.Spring源代码
https://github.com/SpringSource/spring-framework/branches/3.2.x
注:兼容svn检出
2.运行脚本
import-into-eclipse.bat
注:需要设置JAVA_HOME为jdk 1.7
build.gradle
compileJava {
sourceCompatibilit
利用word分词来计算文本相似度
yangshangchuan
word word分词 文本相似度 余弦相似度 简单共有词
word分词提供了多种文本相似度计算方式:
方式一:余弦相似度,通过计算两个向量的夹角余弦值来评估他们的相似度
实现类:org.apdplat.word.analysis.CosineTextSimilarity
用法如下:
String text1 = "我爱购物";
String text2 = "我爱读书";
String text3 =