前端

HTML

HTML文件介绍

<head>
	<meta charset="UTF-8">  # 指定字符编码的
    <title>Title</title>     
</head> # head标签内写的东西不是让用户看的
<body></body> # body标签内写的东西都是让用户看的,在body中写什么,浏览器中就能看到什么

标签的分类

# 双标签(两个<>)
<h1></h1>
<a></a>

# 单标签(一个<>)
<img />

bead标签内常用的标签

# <style></style>  
<style>
        /*style里面一般写CSS样式*/
        h1 {
            color: red;
        }
</style>

# <script></script>
<script>
// 写js代码
alert(123)
</script>

<link rel="stylesheet" href="mycss.css">  # 引入外部CSS文件
<script src="myjs.js"></script>  # 引入外部js文件

<link rel="stylesheet" href="../../mycss.css">
<script src="../../myjs.js"></script>

body中常用的标签

h1~h6标题标签,其中 h1最大  h6最小
<b>加粗</b>
<i>斜体</i>
<u>下划线</u>
<s>删除</s>
<br> # 换行
<hr> # 水平线

标签的分类

1. 块儿级标签
	# 独自占一行
	h1~h6 p div
2. 行内标签(内联标签)
	# 自身文本有多大,就占多大
    b i u s标签 span 

特殊字符

内容 对应代码
空格 &nbsp 
> &gt
< &lt
& &amp
¥ &yen
版权 &copy
注册 &reg

div标签和span标签

div
span
'''
标签嵌套:
	块儿级标签可以嵌套所有的块儿级元素和行内元素,p标签也是块儿级元素,但是它不能嵌套块儿级标签,可以嵌套行内元素. 如果你就嵌套了,也没有问题,只不过是浏览器会自动把标签解开,不会轻易报错,是因为,它直接与用户打交道的,所以,就算有错,一般也不会报出来.
	行内元素只能嵌套行内标签
'''
# 这两个标签一般在刚开始构建页面的时候用,主要用来占位置的. 

# span占的是文本位置
'''这两个标签没有实际的意义'''

img标签

<img src="" alt="">
1. src
2. alt
# 这两个都叫标签的属性

src:
    里面放图片的地址
    1. 可以放外部的图片地址
    2. 还可以放本地的地址
alt:
    # 图片不存在显示的
title:
	# 是对这个图片的解释
width="100px" height="500"
# 宽和高是等比例缩放的,px是像素,

<img src="图片地址" alt="图片不存在显示的">

a标签

# 超链接标签
<a href=""></a>

href:
    写跳转地址
 target:
    	target="_blank"  # 新打开一个标签页跳转
 title:
    	鼠标放上去显示的内容
        
<a href="https://shimo.im/desktop"  target="_blank" title="金天帝">点我</a>

列表标签

无序列表

# 语法
<ul type="disc">
  <li>第一项</li>
  <li>第二项</li>
</ul>

type属性:
● disc(实心圆点,默认值)
● circle(空心圆圈)
● square(实心方块)
● none(无样式)

有序列表

# 语法
<ol type="1" start="2">
  <li>第一项</li>
  <li>第二项</li>
</ol>

type属性:
● 1 数字列表,默认值
● A 大写字母
● a 小写字母
● Ⅰ大写罗马
● ⅰ小写罗马

标题标签

# 语法
<dl>
  <dt>标题1</dt>
  <dd>内容1</dd>
  <dt>标题2</dt>
  <dd>内容1</dd>
  <dd>内容2</dd>
</dl>

表格标签

# 基本骨架
    <table>
        <thead></thead>
        <tbody></tbody>
    </table>

# 先写表头然后写表单数据
    <table>
        <thead>
            <tr>  # 一个tr标签是一行
                <th>编号</th> # th加粗,一般用于表头
                <th>姓名</th>
                <th>年龄</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>1</td>
                <td>小明</td>
                <td>10</td>
            </tr>

             <tr>
                <td>2</td>
                <td>小红</td>
                <td>12</td>
            </tr>
        </tbody>
    </table>
    
属性:
● border: 表格边框.
● cellpadding: 内边距
● cellspacing: 外边距.
● width: 像素 百分比.(最好通过css来设置长宽)
● rowspan: 单元格竖跨多少行
● colspan: 单元格横跨多少列(即合并单元格)

表单标签

# 可以获取到用户的数据并发送给服务端

form标签属性
    action
    	控制数据的提交地址
        
    method 
    	控制数据的提交方法
        get
        post
        
    enctype 
    	数据的编码格式:
    	urlencode # 只能提交普通文本
        form-data # 支持提交文件数据+普通文本数据
        json # form表单不支持提交json数据
        
    
input标签
	type属性:
    	text:文本展示
        passwword:密文
        date:日期
        email:邮箱
        radio:单选
        checkbox:多选
        file:文件
        submit:触发提交
        reset:重置表单
        button:按钮
      
        
select标签 下拉框
  option 一个个选项
    
textarea:获取大段文本

    <h2>注册</h2>
    <form action="">
            <p>
                用户名:<input type="text">
            </p>

            <p>
                密码: <input type="password">
            </p>

            <p>
                date: <input type="date">
            </p>

            <p>
                email: <input type="email">
            </p>

            <p>
               性别: <input type="radio" name="性别" value="男">男
                <input type="radio" name="性别" value="女">女
                <input type="radio" name="性别" value="其他">其他
            </p>

            <p>
                爱好:
                    <input type="checkbox">篮球
                    <input type="checkbox">足球
                    <input type="checkbox">排球
            </p>

            <p>
                file:
                    <input type="file">
            </p>
            <p>
                files:
                    <input type="file" multiple>
            </p>

            <p>
                <input type="submit">
                <input type="reset">
                <input type="button" value="按钮">
            </p>

            <p>
                province:
                <select name="" id="">
                    <option value="">北京</option>
                    <option value="">上海</option>
                    <option value="">南京</option>
                </select>
            </p>

            <p>
                info:
                    <textarea name="" id="" cols="30" rows="10"></textarea>
            </p>
    </form>
    
    
# 基于form表单发送数据
	用于获取用户数据的标签至少含有name属性
    	name属性相当于字典的键
    用户输入的数据会被保存到标签的value属性中
    	value属性相当于字典的值

属性说明:
● name:表单提交时的“键”,注意和id的区别
● value:表单提交时对应项的值
  ○ type="button", "reset", "submit"时,为按钮上显示的文本年内容
  ○ type="text","password","hidden"时,为输入框的初始值
  ○ type="checkbox", "radio", "file",为输入相关联的值
● checked:radio和checkbox默认被选中的项
● readonly:text和password设置只读
● disabled:所有input均适用
● placeholder:对输入框做一个说明解释


# 如果不需要用户输入 只需要用户选择 那么我们就需要自己写
<input type="radio" name="性别" value="女">
eg:没有name属性的标签,form表单会直接忽略,不会发送

# 针对input标签理论可以配一个lable标签绑定
    <form action="">
        <label for="d1">注册</label>
        <input type="text" id="d1">
    </form>
    
    
    <form action="">
        <label for="d1">注册
            <input type="text" id="d1">
        </label>
    </form>
    
 # 针对选择类型的标签可以提前设置默认值
    <form action="">
        <input type="radio" name="sex">男
        <input type="radio" name="sex" checked>女
        <input type="radio" name="sex">其他
    </form>	

CSS层叠样式表

主要用来调HTML标签的样式

'''
	标签的两大属性:
		class属性:
			分门别类,主要用于批量查找
		id属性:
			精准查询,主要用于点对点
			
	学习css的流程:
		1.先学习如何查找标签
		2.再学习如何调整样式
'''

# css语法结构
	选择器{
        样式名1:样式值1;
        样式名2:样式值2;
    }
 
# 注释语法
/*注释内容*/

# 引入css的多种方式
	<style> h1{color: limegreen} </style>
	<link rel="stylesheet" href="mycss.css">
    <h1 style="color: aqua">1111111111111111111</h1>

CSS选择器

基本选择器
# 标签选择器
div {color: "red";}

# ID 选择器
#i1 {
  background-color: red;
}

# 类选择器
.c1 {
  font-size: 14px;
}

div.c1 {
  color: red;
}

注意:
样式类名不要用数字开头(有的浏览器不认)。
标签中的class属性如果有多个,要用空格分隔。

# 通用选择器
* {
  color: white;
}
组合选择器
# 后代选择器
/*li内部的a标签设置字体颜色*/
li a {
  color: green;
}

# 儿子选择器
/*选择所有父级是 <div> 元素的 <p> 元素*/
div>p {
  font-family: "Arial Black", arial-black, cursive;
}

# 毗邻选择器
/*选择所有紧接着<div>元素之后的<p>元素*/
div+p {
  margin: 5px;
}

# 弟弟选择器
/*i1后面所有的兄弟p标签*/
#i1~p {
  border: 2px solid royalblue;
}

# 属性选择器
/*用于选取带有指定属性的元素。*/
p[title] {
  color: red;
}
/*用于选取带有指定属性和值的元素。*/
p[title="213"] {
  color: green;
}
分组和嵌套
当多个元素的样式相同的时候,我们没有必要重复地为每个元素都设置样式,我们可以通过在多个选择器之间使用逗号分隔的分组选择器来统一设置元素样式。
div, p {
  color: red;
}
# 上面的代码为div标签和p标签统一设置字体为红色。
# 嵌套 多种选择器可以混合起来使用,比如:.c1类内部所有p标签设置字体颜色为红色。
.c1 p {
  color: red;
}
伪类选择器
/* 未访问的链接 */
a:link {
  color: #FF0000
}

/* 鼠标移动到链接上 */
a:hover {
  color: #FF00FF
} 

/* 选定的链接 */ 
a:active {
  color: #0000FF
}

/* 已访问的链接 */
a:visited {
  color: #00FF00
} 

/*input输入框获取焦点时样式*/
input:focus {
  outline: none;
  background-color: #eee;
}
伪元素选择器
# first-letter:常用的给首字母设置特殊样式

p:first-letter {
  font-size: 48px;
  color: red;
}

# before
/*在每个<p>元素之前插入内容*/
p:before {
  content:"*";
  color:red;
}

# after
/*在每个<p>元素之后插入内容*/
p:after {
  content:"[?]";
  color:blue;
} 

选择器的优先级

# 导入方式不同
采取就近原则,谁在上面谁生效

# 选择器不同
内联样式 > id选择器 > 类选择器 > 标签选择器

CSS属性相关

宽和高

width属性可以为元素设置宽度。
height属性可以为元素设置高度。
块级标签才能设置宽度,内联标签的宽度由内容来决定。

字体属性

文字字体

# font-family可以把多个字体名称作为一个“回退”系统来保存。如果浏览器不支持第一个字体,则会尝试下一个。浏览器会使用它可识别的第一个值。

body {
  font-family: "Microsoft Yahei", "微软雅黑", "Arial", sans-serif
}

字体大小

p {
  font-size: 14px;
}

字重(粗细)

font-weight用来设置字体的字重(粗细)。

描述
normal 默认值,标准粗细
bold 粗体
bolder 更粗
lighter 更细
100~900 设置具体粗细,400等同于normal,而700等同于bold
inherit 继承父元素字体的粗细值

文本颜色

颜色属性被用来设置文字的颜色。
颜色是通过CSS最经常的指定:
● 十六进制值 - 如: #FF0000
● 一个RGB值 - 如: RGB(255,0,0)
● 颜色的名称 - 如:  red
还有rgba(255,0,0,0.3),第四个值为alpha, 指定了色彩的透明度/不透明度,它的范围为0.0到1.0之间。

文字属性

文字属性

text-align 属性规定元素中的文本的水平对齐方式。

描述
left 左边对齐 默认值
right 右对齐
center 居中对齐
justify 居中对齐

文字装饰

text-decoration 属性用来给文字添加特殊效果。

描述
none 默认。定义标准的文本。
underline 定义文本下的一条线。
overline 定义文本上的一条线。
line-through 定义穿过文本下的一条线。
inherit 继承父元素的text-decoration属性的值。
# 常用的为去掉a标签默认的自划线:
a {
  text-decoration: none;
}

首行缩进

# 将段落的第一行缩进 32像素:
p {
  text-indent: 32px;
}

背景属性

/*背景颜色*/
background-color: red;
/*背景图片*/
background-image: url('1.jpg');
/*
 背景重复
 repeat(默认):背景图片平铺排满整个网页
 repeat-x:背景图片只在水平方向上平铺
 repeat-y:背景图片只在垂直方向上平铺
 no-repeat:背景图片不平铺
*/
background-repeat: no-repeat; 
/*背景位置*/
background-position: left top;
/*background-position: 200px 200px;*/


# 简写
background:#336699 url('1.png') no-repeat left top;

边框

# 边框属性
● border-width
● border-style
● border-color

#i1 {
  border-width: 2px;
  border-style: solid;
  border-color: red;
}

# 简写
#i1 {
  border: 2px solid red;
}

边框样式

描述
none 无边框。
dotted 点状虚线边框。
dashed 矩形虚线边框。
solid 实线边框。
# 除了可以统一设置边框外还可以单独为某一个边框设置样式,如下所示
#i1 {
  border-top-style:dotted;
  border-top-color: red;
  border-right-style:solid;
  border-bottom-style:dotted;
  border-left-style:none;
}


# border-radius
用这个属性能实现圆角边框的效果。
将border-radius设置为长或高的一半即可得到一个圆形

display属性

用于控制HTML元素的显示效果

意义
display:"none" HTML文档中元素存在,但是在浏览器中不显示。一般用于配合JavaScript代码使用。
display:"block" 默认占满整个页面宽度,如果设置了指定宽度,则会用margin填充剩下的部分。
display:"block" 按行内元素显示,此时再设置元素的width、height、margin-top、margin-bottom和float属性都不会有什么影响。
display:"inline-block" 使元素同时具有行内元素和块级元素的特点。
# display:"none"与visibility:hidden的区别:
visibility:hidden: 可以隐藏某个元素,但隐藏的元素仍需占用与未隐藏之前一样的空间。也就是说,该元素虽然被隐藏了,但仍然会影响布局。

display:none: 可以隐藏某个元素,且隐藏的元素不会占用任何空间。也就是说,该元素不但被隐藏了,而且该元素原本占用的空间也会从页面布局中消失。


"""
行内标签是无法设置长宽 只有块儿级可以设置
"""
display:none  彻彻底底的隐藏标签(页面上不会显示 也不会保留标签的位置)
visibility: hidden  隐藏的不彻底

盒子模型

我们可以将标签看成是一个盒子(快递盒)

1.快递包里面的实际物体			 content(内容)
2.物体与内部盒子墙的距离	       padding(内边距、内填充)
3.快递盒的厚度				   border(边框)
4.快递盒之间的距离				  margin(外边距)

margin外边距

.margin-test {
  margin-top:5px;
  margin-right:10px;
  margin-bottom:15px;
  margin-left:20px;
}

# 简写(顺序:上右下左)
.margin-test {
  margin: 5px 10px 15px 20px;
}


# 常见居中
.mycenter {
  margin: 0 auto;
}

padding内填充

.padding-test {
  padding-top: 5px;
  padding-right: 10px;
  padding-bottom: 15px;
  padding-left: 20px;
}

# 简写(顺序:上右下左)
.padding-test {
  padding: 5px 10px 15px 20px;
}

补充padding的常用简写方式:
● 提供一个,用于四边;
● 提供两个,第一个用于上-下,第二个用于左-右;
● 如果提供三个,第一个用于上,第二个用于左-右,第三个用于下;
● 提供四个参数值,将按上-右-下-左的顺序作用于四边;

float

在 CSS 中,任何元素都可以浮动。

浮动元素会生成一个块级框,而不论它本身是何种元素。

关于浮动的两个特点:

  • 浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止。
  • 由于浮动框不在文档的普通流中,所以文档的普通流中的块框表现得就像浮动框不存在一样。

三种取值

left:向左浮动
right:向右浮动
none:默认值,不浮动

clear

clear属性规定元素的哪一侧不允许其他浮动元素。

描述
left 在左侧不允许浮动元素。
right 在右侧不允许浮动元素。
both 在左右两侧均不允许浮动元素。
none 默认值。允许浮动元素出现在两侧。
inherit 规定应该从父元素继承 clear 属性的值。

清除浮动

清除浮动的副作用(父标签塌陷问题)

主要有三种方式:
● 固定高度
● 伪元素清除法
● overflow:hidden
伪元素清除法(使用较多)

.clearfix:after {
  content: "";
  display: block;
  clear: both;
}

overflow溢出属性

描述
visible 默认值。内容不会被修剪,会呈现在元素框之外。
hidden 内容会被修剪,并且其余内容是不可见的。
scroll 内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容。
auto 如果内容被修剪,则浏览器会显示滚动条以便查看其余的内容。
inherit 规定应该从父元素继承 overflow 属性的值。

圆形头像示例

<!DOCTYPE HTML>
<html>
<head>
  <meta charset="UTF-8">
  <meta http-equiv="x-ua-compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>圆形的头像示例</title>
  <style>
    * {
      margin: 0;
      padding: 0;
      background-color: #eeeeee;
    }
    .header-img {
      width: 150px;
      height: 150px;
      border: 3px solid white;
      border-radius: 50%;
      overflow: hidden;
    }
    .header-img>img {
      width: 100%;
    }
  </style>
</head>
<body>

<div class="header-img">
  <img src="https://pic.cnblogs.com/avatar/1342004/20180304191536.png" alt="">
</div>

</body>
</html>

定位(position)

static

static 默认值,无定位,不能当作绝对定位的参照物,并且设置标签对象的left、top等值是不起作用的的。

relative(相对定位)

相对定位是相对于该元素在文档流中的原始位置,即以自己原始位置为参照物。有趣的是,即使设定了元素的相对定位以及偏移值,元素还占有着原来的位置,即占据文档流空间。对象遵循正常文档流,但将依据top,right,bottom,left等属性在正常文档流中偏移位置。而其层叠通过z-index属性定义。

注意:position:relative的一个主要用法:方便绝对定位元素找到参照物。

absolute(绝对定位)

定义:设置为绝对定位的元素框从文档流完全删除,并相对于最近的已定位祖先元素定位,如果元素没有已定位的祖先元素,那么它的位置相对于最初的包含块(即body元素)。元素原先在正常文档流中所占的空间会关闭,就好像该元素原来不存在一样。元素定位后生成一个块级框,而不论原来它在正常流中生成何种类型的框。

重点:如果父级设置了position属性,例如position:relative;,那么子元素就会以父级的左上角为原始点进行定位。这样能很好的解决自适应网站的标签偏离问题,即父级为自适应的,那我子元素就设置position:absolute;父元素设置position:relative;,然后Top、Right、Bottom、Left用百分比宽度表示。

另外,对象脱离正常文档流,使用top,right,bottom,left等属性进行绝对定位。而其层叠通过z-index属性定义。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>绝对定位</title>
    <style>
        .c1 {
            height: 100px;
            width: 100px;
            background-color: red;
            float: left;
        }
        .c2 {
            height: 50px;
            width: 50px;
            background-color: #ff6700;
            float: right;
            margin-right: 400px;
            position: relative;

        }
        .c3 {
            height: 200px;
            width: 200px;
            background-color: green;
            position: absolute;
            top: 50px;
        }
    </style>
</head>
<body>
<div class="c1"></div>
<div class="c2">
    <div class="c3"></div>
</div>

</body>
</html>

fixed(固定)

fixed:对象脱离正常文档流,使用top,right,bottom,left等属性以窗口为参考点进行定位,当出现滚动条时,对象不会随着滚动。而其层叠通过z-index属性 定义。 注意点: 一个元素若设置了 position:absolute | fixed; 则该元素就不能设置float。这 是一个常识性的知识点,因为这是两个不同的流,一个是浮动流,另一个是“定位流”。但是 relative 却可以。因为它原本所占的空间仍然占据文档流。

在理论上,被设置为fixed的元素会被定位于浏览器窗口的一个指定坐标,不论窗口是否滚动,它都会固定在这个位置。

示例代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="x-ua-compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>返回顶部示例</title>
  <style>
    * {
      margin: 0;
    }

    .d1 {
      height: 1000px;
      background-color: #eeee;
    }

    .scrollTop {
      background-color: darkgrey;
      padding: 10px;
      text-align: center;
      position: fixed;
      right: 10px;
      bottom: 20px;
    }
  </style>
</head>
<body>
<div class="d1">111</div>
<div class="scrollTop">返回顶部</div>
</body>
</html>

顶部导航菜单

<!DOCTYPE HTML>
<html>
<head>
  <meta charset="UTF-8">
  <meta http-equiv="x-ua-compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>li标签的float示例</title>
  <style>
    /*清除浏览器默认外边距和内填充*/
    * {
      margin: 0;
      padding: 0;
    }
    a {
      text-decoration: none; /*去除a标签默认的下划线*/
    }

    .nav {
      background-color: black;
      height: 40px;
      width: 100%;
      position: fixed;
      top: 0;
    }

    ul {
      list-style-type: none; /*删除列表默认的圆点样式*/
      margin: 0; /*删除列表默认的外边距*/
      padding: 0; /*删除列表默认的内填充*/
    }
    /*li元素向左浮动*/
    li {
      float: left;
    }

    li > a {
      display: block; /*让链接显示为块级标签*/
      padding: 0 15px; /*设置左右各15像素的填充*/
      color: #b0b0b0; /*设置字体颜色*/
      line-height: 40px; /*设置行高*/
    }
    /*鼠标移上去颜色变白*/
    li > a:hover {
      color: #fff;
    }

    /*清除浮动 解决父级塌陷问题*/
    .clearfix:after {
      content: "";
      display: block;
      clear: both;
    }
  </style>
</head>
<body>
<!-- 顶部导航栏 开始 -->
<div class="nav">
  <ul class="clearfix">
    <li><a href="">玉米商城</a></li>
    <li><a href="">MIUI</a></li>
    <li><a href="">ioT</a></li>
    <li><a href="">云服务</a></li>
    <li><a href="">水滴</a></li>
    <li><a href="">金融</a></li>
    <li><a href="">优品</a></li>
  </ul>
</div>
<!-- 顶部导航栏 结束 -->
</body>
</html>

JavaScript

JavaScript引入方式

# Script标签内写代码
<script>
  // 在这里写你的JS代码
</script>

# 引入额外的JS文件
<script src="myscript.js"></script>

JavaScript语言规范

// 这是单行注释

/*
这是
多行注释
*/

JavaScript语言基础

变量声明

1. JavaScript的变量名可以使用_,数字,字母,$组成,不能以数字开头。
2. 声明变量使用 var 变量名; 的格式来进行声明

'''
	注意:
        变量名是区分大小写的。
        推荐使用驼峰式命名规则。
        保留字不能用做变量名。
'''

# ES6新增const用来声明常量。一旦声明,其值就不能改变。
const PI = 3.1415;
PI // 3.1415

PI = 3
// TypeError: "PI" is read-only

JavaScript数据类型

JavaScript拥有动态类型

var x;  // 此时x是undefined
var x = 1;  // 此时x是数字
var x = "Alex"  // 此时x是字符串

数值(Number)

# JavaScript不区分整型和浮点型,就只有一种数字类型。
var a = 12.34;
var b = 20;
var c = 123e5;  // 12300000
var d = 123e-5;  // 0.00123

还有一种NaN,表示不是一个数字(Not a Number)。
常用方法:
parseInt("123")  // 返回123
parseInt("ABC")  // 返回NaN,NaN属性是代表非数字值的特殊值。该属性用于指示某个值不是数字。
parseFloat("123.456")  // 返回123.456

字符串(String)

var a = "Hello"
var b = "world;
var c = a + b; 
console.log(c);  // 得到Helloworld
常用方法:
方法 说明
.length 返回长度
.trim() 移除空白
.trimLeft().trimLeft() 移除左边的空白
.trimRight().trimRight() 移除右边的空白
.charAt(n) 返回第n个字符
.concat(value, ...) 拼接
.indexOf(substring, start) 子序列位置
.substring(from, to) 根据索引获取子序列
.slice(start, end) 切片
.toLowerCase() 小写
.toUpperCase() 大写
.split(delimiter, limit) 分割
拼接字符串一般使用“+”
# ES6中引入了模板字符串。模板字符串(template string)是增强版的字符串,用反引号(`)标识。它可以当做普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。

// 普通字符串
`这是普通字符串!`
// 多行文本
`这是多行的
文本`
// 字符串中嵌入变量
var name = "jason", time = "today";
`Hello ${name}, how are you ${time}?`

布尔值(Boolean)

var a = true;
var b = false;

# ""(空字符串)、0、null、undefined、NaN都是false。

'''
    null和undefined
    ● null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;
    ● undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。
    null表示变量的值是空(null可以手动清空一个变量的值,使得该变量变为object类型,值为null),undefined则表示只声明了变量,但还没有赋值。
'''

数组

数组对象的作用是:使用单独的变量名来存储一系列的值。类似于Python中的列表。

var a = [123, "ABC"];
console.log(a[1]);  // 输出"ABC"

常用方法:

方法 说明
.length 数组的大小
.push(ele) 尾部追加元素
.pop() 获取尾部的元素
.unshift(ele) 头部插入元素
.shift() 头部移除元素
.slice(start, end) 切片
.reverse() 反转
.join(seq) 将数组元素连接成字符串
.concat(val, ...) 连接数组
.sort() 排序
.forEach() 将数组的每个元素传递给回调函数
.splice() 删除元素,并向数组添加新元素。
.map() 返回一个数组元素调用函数处理后的值的新数组

运算符

算数运算符

+ - * / % ++ --
var x=10;
var res1=x++;
var res2=++x;

res1;
10
res2;
12

这里由于的x++和++x在出现赋值运算式,x++会先赋值再进行自增1运算,而++x会先进行自增运算再赋值!

比较运算符

> >= < <= != == === !==

'''
    1 == “1”  // true  弱等于
    1 === "1"  // false 强等于
    //上面这张情况出现的原因在于JS是一门弱类型语言(会自动转换数据类型),所以当你用两个等号进行比较时,JS内部会自动先将
    //数值类型的1转换成字符串类型的1再进行比较,所以我们以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
'''

逻辑运算符

= += -= *= /=

流程控制

if-else

var a = 10;
if (a > 5){
  console.log("yes");
}else {
  console.log("no");
}

if-else if-else

var a = 10;
if (a > 5){
  console.log("a > 5");
}else if (a < 5) {
  console.log("a < 5");
}else {
  console.log("a = 5");
}

switch

var day = new Date().getDay();
switch (day) {
  case 0:
  console.log("Sunday");
  break;
  case 1:
  console.log("Monday");
  break;
default:
  console.log("...")
}

# switch中的case子句通常都会加break语句,否则程序会继续执行后续case中的语句

for

for (var i=0;i<10;i++) {
  console.log(i);
}

while

var i = 0;
while (i < 10) {
  console.log(i);
  i++;
}

三元运算

var a = 1;
var b = 2;
var c = a > b ? a : b
//这里的三元运算顺序是先写判断条件a>b再写条件成立返回的值为a,条件不成立返回的值为b;三元运算可以嵌套使用;
var a=10,b=20;
var x=a>b ?a:(b=="20")?a:b;

x
10

函数

# 函数定义
JavaScript中的函数和Python中的非常类似,只是定义方式有点区别

// 普通函数定义
function f1() {
  console.log("Hello world!");
}

// 带参数的函数
function f2(a, b) {
  console.log(arguments);  // 内置的arguments对象
  console.log(arguments.length);
  console.log(a, b);
}

// 带返回值的函数
function sum(a, b){
  return a + b;
}
sum(1, 2);  // 调用函数

// 匿名函数方式
var sum = function(a, b){
  return a + b;
}
sum(1, 2);

// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
(function(a, b){
  return a + b;
})(1, 2);

# 函数中的arguments参数
function add(a,b){
  console.log(a+b);
  console.log(arguments.length);
 console.log(arguments[0]);//arguments相当于将出传入的参数全部包含,这里取得就是第一个元素1
}

add(1,2)

函数的全局变量和局部变量

# 局部变量:
在JavaScript函数内部声明的变量(使用 var)是局部变量,所以只能在函数内部访问它(该变量的作用域是函数内部)。只要函数运行完毕,本地变量就会被删除。

# 全局变量:
在函数外声明的变量是全局变量,网页上的所有脚本和函数都能访问它。

# 变量生存周期:
JavaScript变量的生命期从它们被声明的时间开始。
局部变量会在函数运行以后被删除。
全局变量会在页面关闭后被删除。

# 作用域
首先在函数内部查找变量,找不到则到外层函数查找,逐步找到最外层。与python作用域关系查找一模一样

var city = "BeiJing";
function f() {
  var city = "ShangHai";
  function inner(){
    var city = "ShenZhen";
    console.log(city);
  }
  inner();
}

f();  //输出结果是?



#############################################################
var city = "BeiJing";
function Bar() {
  console.log(city);
}
function f() {
  var city = "ShangHai";
  return Bar;
}
var ret = f();
ret();  // 打印结果是?


#########################################################
var city = "BeiJing";
function f(){
    var city = "ShangHai";
    function inner(){
        console.log(city);
    }
    return inner;
}
var ret = f();
ret();

内置对象和方法

# 自定义对象
JavaScript的对象(Object)本质上是键值对的集合(Hash结构),但是只能用字符串作为键。

var a = {"name": "Alex", "age": 18};
console.log(a.name);
console.log(a["age"]);

# 遍历对象中的内容:
var a = {"name": "Alex", "age": 18};
for (var i in a){
  console.log(i, a[i]);
}


# 创建对象
var person=new Object();  // 创建一个person对象
person.name="Alex";  // person对象的name属性
person.age=18;  // person对象的age属性

Date对象

# 创建Date对象
//方法1:不指定参数
var d1 = new Date();
console.log(d1.toLocaleString());
//方法2:参数为日期字符串
var d2 = new Date("2004/3/20 11:12");
console.log(d2.toLocaleString());
var d3 = new Date("04/03/20 11:12");
console.log(d3.toLocaleString());
//方法3:参数为毫秒数
var d3 = new Date(5000);
console.log(d3.toLocaleString());
console.log(d3.toUTCString());

//方法4:参数为年月日小时分钟秒毫秒
var d4 = new Date(2004,2,20,11,12,0,300);
console.log(d4.toLocaleString());  //毫秒并不直接显示

Date对象的方法:

var d = new Date(); 
//getDate()                 获取日
//getDay ()                 获取星期
//getMonth ()               获取月(0-11)
//getFullYear ()            获取完整年份
//getYear ()                获取年
//getHours ()               获取小时
//getMinutes ()             获取分钟
//getSeconds ()             获取秒
//getMilliseconds ()        获取毫秒
//getTime ()                返回累计毫秒数(从1970/1/1午夜)



// 编写代码,将当前日期按“2017-12-27 11:11 星期三”格式输出。
const WEEKMAP = {  
  0:"星期天",
  1:"星期一",
  2:"星期二",
  3:"星期三",
  4:"星期四",
  5:"星期五",
  6:"星期六"
};  //定义一个数字与星期的对应关系对象


function showTime() {
    var d1 = new Date();
    var year = d1.getFullYear();
    var month = d1.getMonth() + 1;  //注意月份是从0~11
    var day = d1.getDate();
    var hour = d1.getHours();
    var minute = d1.getMinutes() < 10?"0"+d1.getMinutes():d1.getMinutes();  //三元运算

    var week = WEEKMAP[d1.getDay()];  //星期是从0~6

    var strTime = `
    ${year}-${month}-${day} ${hour}:${minute} ${week}
    `;
    console.log(strTime)
};

showTime();

JSON对象

var str1 = '{"name": "Alex", "age": 18}';
var obj1 = {"name": "Alex", "age": 18};
// JSON字符串转换成对象
var obj = JSON.parse(str1); 
// 对象转换成JSON字符串
var str = JSON.stringify(obj1);

RegExp对象

// 定义正则表达式两种方式
var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{5,11}");
var reg2 = /^[a-zA-Z][a-zA-Z0-9]{5,9}$/;

// 正则校验数据
reg1.test('jason666')
reg2.test('jason666')

/*第一个注意事项,正则表达式中不能有空格*/ 

// 全局匹配
var s1 = 'egondsb dsb dsb';
s1.match(/s/)
s1.match(/s/g)
var reg2 = /^[a-zA-Z][a-zA-Z0-9]{5,9}$/g
reg2.test('egondsb');
reg2.test('egondsb');
reg2.lastIndex;
/*第二个注意事项,全局匹配时有一个lastIndex属性*/

// 校验时不传参数
var reg2 = /^[a-zA-Z][a-zA-Z0-9]{5,9}$/
reg2.test();
reg2.test(undefined);

var reg3 = /undefined/;
reg3.test();

Math对象

abs(x)      返回数的绝对值。
exp(x)      返回 e 的指数。
floor(x)    对数进行下舍入。
log(x)      返回数的自然对数(底为e)。
max(x,y)    返回 x 和 y 中的最高值。
min(x,y)    返回 x 和 y 中的最低值。
pow(x,y)    返回 x 的 y 次幂。
random()    返回 0 ~ 1 之间的随机数。
round(x)    把数四舍五入为最接近的整数。
sin(x)      返回数的正弦。
sqrt(x)     返回数的平方根。
tan(x)      返回角的正切。

前端基础之BOM和DOM

BOM

window对象

● window.innerHeight - 浏览器窗口的内部高度
● window.innerWidth - 浏览器窗口的内部宽度
● window.open() - 打开新窗口
● window.close() - 关闭当前窗口

window的子对象

// navigator对象

navigator.appName  // Web浏览器全称
navigator.appVersion  // Web浏览器厂商和版本的详细字符串
navigator.userAgent  // 客户端绝大部分信息
navigator.platform   // 浏览器运行所在的操作系统
history对象
history.forward()  // 前进一页
history.back()  // 后退一页
location对象
location.href  获取URL
location.href="URL" // 跳转到指定页面
location.reload() 重新加载页面
弹出框
// 可以在 JavaScript 中创建三种消息框:警告框、确认框、提示框。

// 警告框
警告框经常用于确保用户可以得到某些信息。
当警告框出现后,用户需要点击确定按钮才能继续进行操作。

alert("你看到了吗?");

// 确认框
确认框用于使用户可以验证或者接受某些信息。
当确认框出现后,用户需要点击确定或者取消按钮才能继续进行操作。
如果用户点击确认,那么返回值为 true。如果用户点击取消,那么返回值为 false。

confirm("你确定吗?")

// 提示框
提示框经常用于提示用户在进入页面前输入某个值。
当提示框出现后,用户需要输入某个值,然后点击确认或取消按钮才能继续操纵。
如果用户点击确认,那么返回值为输入的值。如果用户点击取消,那么返回值为 null。

prompt("请在下方输入","你的答案")
计时相关
// 通过使用 JavaScript,我们可以在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件

// setTimeout() 隔一段时间执行,然后结束
var t=setTimeout("JS语句",毫秒)

`setTimeout() 方法会返回某个值。在上面的语句中,值被储存在名为 t 的变量中。假如你希望取消这个 setTimeout(),你可以使用这个变量名来指定它,第二个参数指示从当前起多少毫秒后执行第一个参数(1000 毫秒等于一秒)`

// clearTimeout() 清除定时器,清除的是setTimeout
clearTimeout(setTimeout_variable)
eg:
    // 在指定时间之后执行一次相应函数
    var timer = setTimeout(function(){alert(123);}, 3000)
    // 取消setTimeout设置
    clearTimeout(timer);

// setInterval()  每隔一段时间都会执行一次
setInterval("JS语句",时间间隔)

// clearInterval() 清除定时器,清除的是setInterval
clearInterval() 方法可取消由 setInterval() 设置的 timeout。
clearInterval() 方法的参数必须是由 setInterval() 返回的 ID 值。
eg:
	// 每隔一段时间就执行一次相应函数
    var timer = setInterval(function(){console.log(123);}, 3000)
    // 取消setInterval设置
    clearInterval(timer);

DOM

查找标签

直接查找

document.getElementById           根据ID获取一个标签
document.getElementsByClassName   根据class属性获取
document.getElementsByTagName     根据标签名获取标签合集

间接查找

parentElement            父节点标签元素
children                 所有子标签
firstElementChild        第一个子标签元素
lastElementChild         最后一个子标签元素
nextElementSibling       下一个兄弟标签元素
previousElementSibling   上一个兄弟标签元素

节点操作

创建节点

// 语法:
createElement(标签名)

var divEle = document.createElement("div");


// 1. 动态创建img标签
  var img = document.createElement('img');  // <img />
  var div = document.getElementById('d1');

// 2. 如何给标签添加属性
img.src = '123.png';

// 设置标签不自带的属性
img.setAttribute('username', 'kevin')  
img.setAttribute('width', '100px')  

// 获取属性
console.log(img.getAttribute('username'));

// 删除属性
img.removeAttribute('username');

// appendChild------------->末尾追加元素
div.appendChild(img)

2. 创建一个a标签
    var a = document.createElement('a');
    var div = document.getElementById('d1');
    // 设置属性
    a.href = 'http://www.baidu.com';  // <a href=''></a>
    a.target = '_blank';
    a.title = '_blank';
    // 给a标签添加文本属性
    // a.innerText = '<h1>点击我</h1>';// <a href=''>点击我</a>  它不能识别html标签
    a.innerHTML = '<h1>点击我</h1>'  // 它可以识别html标签
    console.log(a);

获取值操作

// 语法:
elementNode.value
适用于以下标签:
● .input   
● .select
● .textarea 
● value不能获取文件数据,获取文件数据要用files

var iEle = document.getElementById("i1");
console.log(iEle.value);
var sEle = document.getElementById("s1");
console.log(sEle.value);
var tEle = document.getElementById("t1");
console.log(tEle.value);

class的操作

className  获取所有样式类名(字符串)

classList.remove(cls)  删除指定类
classList.add(cls)  添加类
classList.contains(cls)  存在返回true,否则返回false
classList.toggle(cls)  存在就删除,否则添加

指定CSS操作

obj.style.backgroundColor="red"


obj.style.margin
obj.style.width
obj.style.left
obj.style.position

事件

HTML 4.0 的新特性之一是有能力使 HTML 事件触发浏览器中的动作(action),比如当用户点击某个 HTML 元素时启动一段 JavaScript。下面是一个属性列表,这些属性可插入 HTML 标签来定义事件动作

常用事件

1. onclick        当用户点击某个对象时调用的事件句柄。
2. onfocus        元素获得焦点。
3. onblur         元素失去焦点。  
4. onchange       域的内容被改变。
5. onload         一张页面或一幅图像完成加载。
6. onmouseout     鼠标从某元素移开。
7. onmouseover    鼠标移到某元素之上。

绑定方式:

// 方式一:
<div id="d1" onclick="changeColor(this);">点我</div>
<script>
  function changeColor(ths) {
    ths.style.backgroundColor="green";
  }
</script>


// 方式二:
<div id="d2">点我</div>
<script>
  var divEle2 = document.getElementById("d2");
  divEle2.onclick=function () {
    this.innerText="呵呵";
  }
</script>

事件示例

`开关灯`
<!DOCTYPE html>
  <html lang="en">
  <head>
  <meta charset="UTF-8">
  <title>Title</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <style>
  .c1 {
  height: 400px;
  width: 400px;
  border-radius: 50%;
}
.bg_green {
  background-color: greenyellow;
}
.bg_red {
  background-color: red;
}
</style>
  </head>
  <body>
  <div id="d1" class="c1 bg_red bg_green"></div>
  <button id="d2">变色</button>

  <script>
  let btnEle = document.getElementById('d2')
let divEle = document.getElementById('d1')
btnEle.onclick = function () {  // 绑定点击事件
  // 动态的修改div标签的类属性
  divEle.classList.toggle('bg_red')
}
  </script>
  </body>
  </html>



`input事件`
<!DOCTYPE html>
  <html lang="en">
  <head>
  <meta charset="UTF-8">
  <title>Title</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">

  </head>
  <body>
  <input type="text" value="老板 去吗?" id="d1">

  <script>
  let iEle = document.getElementById('d1')
// 获取焦点事件
iEle.onfocus = function () {
  // 将input框内部值去除
  iEle.value = ''
  //  点value就是获取   等号赋值就是设置
}
// 失去焦点事件
iEle.onblur = function () {
  // 给input标签重写赋值
  iEle.value = '没钱 不去!'
}
  </script>
  </body>
  </html>


`定时器事件`
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<input type="text" id="i1">
<button id="b1">开始</button>
<button id="b2">结束</button>

<script>
    var t;
    function showTime() {
        var i1Ele = document.getElementById('i1');
        var time = new Date();
        i1Ele.value = time.toLocaleString();
    }
    showTime();
    var b1Ele = document.getElementById('b1');
    b1Ele.onclick = function (ev) {
        if (!t){
            t = setInterval(showTime,1000)
        }
    };
    var b2Ele = document.getElementById('b2');
    b2Ele.onclick = function (ev) {
       clearInterval(t);
       t = undefined
    };

</script>
</body>
</html>


`省市联动`
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="x-ua-compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>select联动</title>
</head>
<body>
<select id="province">
  <option>请选择省:</option>
</select>

<select id="city">
  <option>请选择市:</option>
</select>

<script>
  data = {"河北省": ["廊坊", "邯郸"], "北京": ["朝阳区", "海淀区"], "山东": ["威海市", "烟台市"]};

  var p = document.getElementById("province");
  var c = document.getElementById("city");

  for (var i in data) {
    var optionP = document.createElement("option");
    optionP.innerHTML = i;
    p.appendChild(optionP);
  }
  p.onchange = function () {
    var pro = (this.options[this.selectedIndex]).innerHTML;
    var citys = data[pro];
    // 清空option
    c.innerHTML = "";

    for (var i=0;i<citys.length;i++) {
      var option_city = document.createElement("option");
      option_city.innerHTML = citys[i];
      c.appendChild(option_city);
    }
  }
</script>
</body>
</html>

jQuery

// 下载方式
1. 去官网:https://jquery.com/
2. 第三方:https://jquery.cuishifeng.cn/index.html
3. bootcdn网站下载:https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js

查找标签

基本选择器

// id选择器
$('#id')

// 标签选择器
$('div')

// 类选择器
$('.c1')


// 组合使用
$('div.c1') // 找到有c1 class类的div标签
$('div#c1') // 找到有c1 class类的div标签


// 所有
$('*')

组合选择器

$("#id, .className, tagName")

$('#d1,.c1,p')  # 并列+混用
$('div span')  # 后代
$('div>span')  # 儿子
$('div+span')  # 毗邻
$('div~span')  # 弟弟

基本筛选器

:first // 第一个
:last // 最后一个
:eq(index)// 索引等于index的那个元素
:even // 匹配所有索引值为偶数的元素,从 0 开始计数
:odd // 匹配所有索引值为奇数的元素,从 0 开始计数
:gt(index)// 匹配所有大于给定索引值的元素
:lt(index)// 匹配所有小于给定索引值的元素
:not(元素选择器)// 移除所有满足not条件的标签
:has(元素选择器)// 选取所有包含一个或多个标签在其内的标签(指的是从后代元素找)
复制代码


eg:
    $('ul li:first')  # 大儿子 
    $('ul li:last')  # 小儿子
    $('ul li:eq(2)')		# 放索引
    $('ul li:even')  # 偶数索引 0包含在内
    $('ul li:odd')  # 奇数索引
    $('ul li:gt(2)')  # 大于索引
    $('ul li:lt(2)')  # 小于索引
    $('ul li:not("#d1")')  # 移除满足条件的标签
    $("div:has('h1')")// 找到所有后代中有h1标签的div标签
    $("div:has(.c1)")// 找到所有后代中有c1样式类的div标签
    $("li:not(.c1)")// 找到所有不包含c1样式类的li标签
    $("li:not(:has(a))")// 找到所有后代中不含a标签的li标签

属性选择器

[attribute]
[attribute=value]// 属性等于
[attribute!=value]// 属性不等于

eg:
    <input type="text">
    <input type="password">
    <input type="checkbox">
    $("input[type='checkbox']");// 取到checkbox类型的input标签
    $("input[type!='text']");// 取到类型不是text的input标签

表单筛选器

:text
:password
:file
:radio
:checkbox

:submit
:reset
:button

eg:
    $(":checkbox")  // 找到所有的checkbox
    $('input[type="text"]')---------->$(':text') 
    $('input[type="password"]')---------->$(':password') 


// 找到被选中的option
<select id="s1">
  <option value="beijing">北京市</option>
  <option value="shanghai">上海市</option>
  <option selected value="guangzhou">广州市</option>
  <option value="shenzhen">深圳市</option>
</select>

$(":selected")  // 找到所有被选中的option


$(':checked')  # 它会将checked和selected都拿到
$(':selected')  # 它不会 只拿selected
$('input:checked')  # 自己加一个限制条件

筛选器方法

`下一个元素`
$("#id").next()
$("#id").nextAll()
$("#id").nextUntil("#i2")

`上一个元素`
$("#id").prev()
$("#id").prevAll()
$("#id").prevUntil("#i2")

`父元素`
$("#id").parent()
$("#id").parents()  // 查找当前元素的所有的父辈元素
$("#id").parentsUntil() // 查找当前元素的所有的父辈元素,直到遇到匹配的那个元素为止。

`儿子和兄弟元素`
$("#id").children();// 儿子们
$("#id").siblings();// 兄弟们

`查找`
$("div").find("p")----------------->等价于$("div p")
$(".c1").find("a")----------------->等价于$(".c1 a")

`补充`
.first() // 获取匹配的第一个元素
  	$('div span:first')-------------->$('div span').first()
.last() // 获取匹配的最后一个元素
      $('div span:last')----------------->$('div span').last()
.not() // 从匹配元素的集合中删除与指定表达式匹配的元素
      $('div span:not("#d3")') --------------->$('div span').not('#d3')
.has() // 保留包含特定后代的元素,去掉那些不含有指定后代的元素。
.eq() // 索引值等于指定值的元素

操作标签

classList.add()------------------>addClass();// 添加指定的CSS类名。
classList.reomve()----------------->removeClass();// 移除指定的CSS类名。
classList.containes()------------------>hasClass();// 判断样式存不存在
classList.toggle()--------------->toggleClass();// 切换CSS类名,如果有就移除,如果没有就添加。


`CSS`
$("p").css("color", "red"); //将所有p标签的字体设置为红色

文件操作

innerHTML--------------->html()// 取得第一个匹配元素的html内容
html(val)// 设置所有匹配元素的html内容

text()// 取得所有匹配元素的内容
text(val)// 设置所有匹配元素的内容

val()// 取得第一个匹配元素的当前值
val(val)// 设置所有匹配元素的值
val([val1, val2])// 设置多选的checkbox、多选select的值

属性操作

attr(attrName)// 返回第一个匹配元素的属性值
attr(attrName, attrValue)// 为所有匹配元素设置一个属性值
attr({k1: v1, k2:v2})// 为所有匹配元素设置多个属性值
removeAttr()// 从每一个匹配的元素中删除一个属性

# 用于checkbox和radio
prop() // 获取属性
removeProp() // 移除属性

# 我们在处理checkbox和radio的时候尽量使用特定的prop(),不要使用attr("checked", "checked")。
# 对于标签的自定义属性,使用attr方法获取,而不要使用prop方法

总结一下:
1. 对于标签上有的能看到的属性和自定义属性都用attr
2. 对于返回布尔值的比如checkbox、radio和option的是否被选中都用prop。

文档处理

// js中如何创建一个标签出来
var a = document.createElement('a');

// jquery中如何创建一个标签
var a = $('<a>');

let pEle = $('<p>')
pEle.text('你好啊 草莓要不要来几个?')
pEle.attr('id','d1')          
$('#d1').append($pEle)  # 内部尾部追加

克隆

$("#b1").click(function () {
     // console.log($(this));
    // console.log($(this).clone());
    $(this).clone(true).insertAfter(this);// clone克隆默认情况下只克隆标签的样子,不可隆事件
})

常用事件

click(function(){...})
hover(function(){...})
blur(function(){...})
focus(function(){...})
change(function(){...})
keyup(function(){...})
input监控	


// 绑定事件

`方式一:`
// $('#btn').click(function () {
    //     alert(123);
    // })


// 下面这种绑定方式功能更加强大,它支持:事件委托
$('#btn').on('click', function () {
    alert(123);
})

hover事件

<script>
    $("#p1").hover(function () {
        console.log(123);
    }, function () {
        console.log(345);
    })
</script>
# 第一个参数是鼠标移进去触发的动作,第二个参数是鼠标移走触发的动作

input事件

<script>
    $('#d1').on('input', function () {
        console.log(this.value);
        // 只需要在这里向后端发起一个请求携带这此时的值后端给我返回一个结果,我放到页面上去
       // ajax朝后端发起请求----------->django中学
    })
</script>

阻止后续事件执行

<script>
    $("#btn").click(function (e) {
        $('.s1').text('趁年轻,学技能');
        // 组织手续事件的执行1
         return false;
        // 组织手续事件的执行1
        e.preventDefault();
    })
</script>

页面载入

// 等待页面加载完毕之后再执行的代码
// js中如何做的?
window.onload = function () {}

// 在jquery中
// 1. 
$(document).ready(function(){
	// 在这里写你的JS代码...
})

// 2. 
$(function(){
	// 你在这里写你的代码
})

// 3.
// 把你的js代码放在body的最下面,最后加载就可以了

事件委托

 // 利用事件委托
    $('body').on('click', '.btn', function () {
        console.log('触发了');
    })

补充

// each

$('div');
S.fn.init(10) [div, div, div, div, div, div, div, div, div, div, prevObject: S.fn.init(1)]
$('div').each(function (value) {console.log(value);});
VM296:1 0
VM296:1 1
VM296:1 2
VM296:1 3
VM296:1 4
VM296:1 5
VM296:1 6
VM296:1 7
VM296:1 8
VM296:1 9


// BBS项目中用
 var arr = [1, 2, 3, 4, 5];
    $.each(arr, function (index, value) {
        console.log(index, value);
})

// data的用法
$('div').data('username', 'kevin');
S.fn.init(10) [div, div, div, div, div, div, div, div, div, div, prevObject: S.fn.init(1)]
$('div').first().data('username');
'kevin'
$('div').last().data('username');
'kevin'
$('div').first().removeData('username');
S.fn.init [div, prevObject: S.fn.init(10)]
$('div').first().data('username');

bootstrap

如何使用bootstrap

1. 在官网下载
2. 使用CDN
3. bootcdn
####如果你只使用bootstrap 的css样式,直接引入一个css文件即可
####如果你使用了bootstrap 的js代码,必须引入js代码和jQuery文件,因为bootstrap依赖于jQuery文件

布局容器

<div class="container">
      # 左右两边留空白
</div>

<div class="container-fluid">
  	# 不留空白
</div>

# 所以,以后我们在写页面的时候,上来先写一个div class=container,我在写页面的时候,会经常加class=container

栅格系统

<div class="row"></div>  # 把一个div等分成12份

# 如何兼容四种情况的设备呢?
# 给标签添加4个类

表格

table
<table class="table table-striped table-hover table-bordered"> # 务必记住

<!-- On rows -->
<tr class="active">...</tr>
<tr class="success">...</tr>
<tr class="warning">...</tr>
<tr class="danger">...</tr>
<tr class="info">...</tr>
# https://v3.bootcss.com/css/

# https://v3.bootcss.com/components/
posted @ 2023-05-17 20:24  秋洛尘  阅读(26)  评论(0)    收藏  举报