前端

第十二章: 前端开发


12.1 HTML介绍

  1. web服务本质

    import socket
    
    sk = socket.socket()
    sk.bind(('127.0.0.1',8008))
    sk.listen()
    
    while True:
        conn,addr = sk.accept()
        data = conn.recv(1024)
        conn.send(b"HTTP/1.1 200 OK
    
    ")
        conn.send(b'<h1>hello word</h1>')
        conn.close()
    
    • 浏览器发请求 --> HTTP协议 --> 服务端接收请求 --> 服务端返回响应 --> 服务端把HTML文件内容发给浏览器 --> 浏览器渲染页面
  2. HTML 是什么?

    • 超文本标记语言,是一种用于创建网页的标记语言,不是编程语言
    • 本质上是浏览器可识别的规则,我们按照规则写网页,浏览器根据规则渲染我们的网页.对于不同的浏览器,对同一个标签可能会有不同的解释. (兼容性问题)
    • 网页文件的扩展名: .html 或 .htm
  3. HTML 文档结构

    <!DOCTYPE html> 
    <html lang="zh-CN">   #这个lang表示语言,zh-CN是中文的意思,就是说,你整个文档的内容以中文为主,如果以英文为主,就写成lang='en'
    
    <head> 
      <meta charset="UTF-8">  # 编码
      <title>css样式优先级</title>
    </head>
    <body> 
    
    </body>
    </html>
    
    • <!DOCTYPE html> 声明为HTML5文档
    • <html> </html> 是文档的开始标记和结束标记. 是HTML页面的根元素,在它们之间的文档的头部(head) 和主体(body)
    • <head> </head> 定义了HTML文档的开头部分,它们之间的内容不会在浏览器的文档窗口显示. 包含了文档的元 (meta) 数据,配置信息等,是给浏览器看的,我们看到是在body标签里面写的内容
    • 注意: 对于中文网页需要使用<meta charset = 'utf-8'>声明编码,否则会出现乱码. 有些浏览器会设置GBK编码,则需要设置为<meta charset = 'gbk'>
  4. 请求和响应

    • 请求: 浏览器socket客户端给服务端发信息
    • 响应: 服务端socket给客户端回信息

12.2 标签

  • 标签必须是封闭的
  • 标签的语法:
    • <标签名 属性1='属性值1' 属性2='属性值2' ... > 内容部分 </标签名>
    • <标签名 属性1='属性值1' 属性2='属性值' ... />

12.2.1 标签的分类

  • 内敛标签(行内标签): 不独占一行,内敛标签只能嵌套内敛标签 (b / i / u / s / button / span / img / a 等)
  • 块级标签(行外标签): 自己独占一行,可以嵌套内敛标签和某些块级标签 (h1 - h6 / br / hr / p / div)
    • p标签: 不能嵌套p标签,也不能嵌套块级标签

12.2.2 head 标签中的标签

标签 意义
<title> </title> 定义网页标题
<style> </style> 定义内部样式表
<script> </script> 定义JS代码或引入外部JS文件
<link/> 引入外部样式表文件
<meta/> 定义网页原信息
  • meta标签的组成: meta标签共有两个属性,分别是http_equiv属性和name属性,不同的属性又有不同的参数值,这些不同的参数值就实现了不同的网页功能

    • http_equiv属性: 相当于http的文件头作用,它可以向浏览器传回一些有用的信息,以帮助正确地显示网页内容,与之对应的属性值为content,content中的内容其实就是各个参数的变量值。

      <meta http-equiv="refresh" content="2;URL=https://www.oldboyedu.com">
      # 两秒后跳转到相应的网址,如果把URL和后面的内容删掉,就是两秒中刷新一次
      
      <meta http-equiv="content-Type" charset="UTF8">                    # 指定编码的类型          
      
    • name属性: 主要用于描述网页,与之对应的属性值为content,content中的内容主要是便于搜索引擎机器人查找信息和分类信息用的。

      • 红框就是描述的信息

img

12.2.3 body 标签中的基本标签

<b>加粗</b>
<i>斜体</i>
<u>下划线</u>
<s>删除</s>

<p>
    段落标签  # 独占一个段落
</p>

<button>一个按钮</button>

<h1>标题1</h1>
<h2>标题2</h2>
<h3>标题3</h3>
<h4>标题4</h4>
<h5>标题5</h5>
<h6>标题6</h6>
# 从上到下,字体依次变小

<!--换行-->
<br>

<!--水平线 / 分割线-->
<hr>
  • div标签: 用来定义一个块级元素,并无实际的意义. 主要通过CSS样式为其赋予不同的表现
  • span标签: 用来定义内联(行内)元素,并无实际的意义. 主要通过CSS样式为其赋予不同的表现

12.2.4 img标签

  • 图片标签

  • 属性:

    • src = '图片的路径' # 网络地址的绝对路径或本地的相对路径
    • alt = '图片未加载成功时的提示'
    • title = '鼠标悬浮时提示信息'
    • width = '设置图片的宽'
    • height = '设置图片的高'
    # 示例:
    <img src="1.jpg" alt="这是个美女,请稍等.." title="美女" width="200" height="200">
    

12.2.5 a标签

  • 超链接标签

  • 属性:

    • href : 超链接的地址,href的值为空,刷新当前页面,为#号不刷新页面,但是会在url后加#号,

    • target : 是否新建窗口

      • target = '_self' 当前窗口打开某个路径对应的html页面
      • target = '_bland' 新建窗口打开某个路径对应的html页面
      <a href="https://www.baidu.com" target="_blank">
         <button>点击进入百度</button>
      </a>
      

12.2.6 列表标签

  1. 无序列表

    • type属性:

      • disc : 实心圆点(默认值)
      • circle : 空心圆圈
      • square : 实心方块
      • none : 无样式
      <ul type = 'disc'>
          <li>太白</li>
          <li>alex</li>
          <li>wusir</li>
      </ul>
      
  2. 有序列表

    • start属性 : 是从数字几开始

    • type属性

      • 1 : 数字列表 ,默认值
      • A : 大写字母
      • a : 小写字母
      • I : 大写罗马
      • i : 小写罗马
      <ol type="A" start="2">
          <li>太白</li>
          <li>alex</li>
          <li>wusir</li>
      </ol>
      # 表示按照大写字母进行排序,从B开始
      
  3. 标题列表标签

    • 就像大纲一样,有一个层级效果

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

12.2.7 特殊字符

  • html中默认是不显示空格的,也就是说通过空格键加了空格也没有多少个空格的效果,加多少个都是显示一个空格的效果,需要特殊字符才能显示出空格的效果
内容 对应代码
空格 &nbsp;
> &gt;
< &lt
& &amp
&yen
版权标识(写公司网站的时候会用到) &copy
注册 (一个圆圈里面有个R) &reg

12.2.8 表格标签

  • 属性:

    • border : 表格边框 (边框宽度)

    • cellpadding : 内边距 (内边框和内容的距离)

    • cellspacing : 外边距 (内外边框的距离)

    • width : 像数 百分比 (最好通过css来设置长宽)

    • rowspan : 单元格竖跨多少行 (写在td里面)

    • colspan : 单元格横跨多少列(即合并单元格) (写在td里面)

      <table border="5" cellpadding="5" cellspacing="2">
          <thead>   # 表格的标题(头)
              <tr>  # 一行
                  <th>姓名</th>  # 一个单元格的内容
                  <th>年龄</th>
                  <th>爱好</th>
              </tr>
          </thead>
      
          <tbody>   # 表格的正文内容
              <tr>
                  <td>alex</td>
                  <td>83</td>
                  <td>抽烟</td>
              </tr>
              <tr>
                  <td>wusir</td>
                  <td>74</td>
                  <td>喝酒</td>
              </tr>
          </tbody>
      </table>
      
      

12.2.9 form表单

  1. input标签

    • type属性 : 控制输入框的样式
    • name属性 : 分组,携带数据key 传给后台的是: key:value
    • value : 表单提交时对应项的值
      • type="button", "reset", "submit"时,为按钮上显示的文本内容
      • type="text","password","hidden"时,为输入框的初始值
      • type="checkbox", "radio", "file",为输入相关联的值
    • readonly : 只读,针对的是输入框 如: text password
    • disabled : 不允许操作,所有的input都可以设置
    • 设置了readonly的标签,它的数据可以被提交到后台,设置了disabled的数据,是不能提交到后台的
    type属性 表现形式 对应代码
    text 单行输入文本 <input type = 'text' />
    password 密码输入框(不显示明文) <input type = 'password' />
    date 日期输入框 <input type = 'date' />
    checkbox 复选框 <input type = 'checkbox' name = 'x' />
    radio 单选框 <input type = 'radio' name = 'x' />
    submit 提交按钮 <input type = 'submit' value = '提交' />
    reset 重置按钮 <input type = 'reset' value = '重置' />
    button 普通按钮 <input type = 'button' value = '普通按钮' />
    hidden 隐藏输入框 <input type = 'hidden' />
    file 文本选择框 <input type = 'file' />
  • submit : 发送浏览器上输入标签中的内容,配合form表单使用,页面会刷新
  • reset : 页面不会刷新,将所有内容清空
  1. form表单

    <form action="http://127.0.0.1:8008">    # action: 指定数据提交的路径
        用户名:<input type="text" name = 'username'>
        密码:<input type="password" name = 'password'>
        <br>
        <input type="radio" name = 'sex' value="1">男  # 传给后台的数据是 : sex:1
        <input type="radio" name = 'sex' value="2">女
        <br> 
        <input type="checkbox" name = 'hobby' value="a">喝酒  # 传给后台的数据是: hobby:a
        <input type="checkbox" name = 'hobby' value="b">抽烟
        <input type="checkbox" name = 'hobby' value="c">烫头
        <input type="submit" value = '提交按钮'>
        <br>
        <input type="date">
        <input type="button" value = '提交按钮'>
        <input type="reset" value = '重置'>
        <input type="hidden">
        <input type="file">
    </form>
    
    
  • 注意: form表单触发提交数据的操作,必须写在form表单标签里面,写在外面就是普通按钮
    • <input type='submit'>
    • <button>提交按钮</button>
  • checked默认选中
    • <input type="radio" name="sex" value="2" checked>女 #简写方式,当属性名和属性值相同时可简写 # 默认选中 : 女
    • <input type="checkbox" name="hobby" value="a">喝酒
    • <input type="checkbox" name="hobby" value="b" checked="checked">抽烟
    • <input type="checkbox" name="hobby" value="c" checked="checked"> 烫头
    • 默认选中了 : 抽烟,喝酒

12.2.10 select标签下拉选择框

# 单选
<select name="city">
    <option value="1">北京</option>
    <option value="2" selected='selected'>上海</option>  # 默认选中上海
    <option value="3">深圳</option>
</select>

# 多选:multiple
<select name="city" multiple>
    <option value="1">北京</option>
    <option value="2" selected>上海</option>  # # 默认选中上海
    <option value="3">深圳</option>
</select>

  • multiple:布尔属性,设置后为多选下拉框,否则默认单选
  • disabled:禁用
  • selected:默认选中该项
  • value:定义提交时的选项值

12.2.11 label标签

  • 标识标签的功能

    方式一: for:执行对哪个标签进行标识
    效果: 点击label标签中的文字.就能让标识的标签获得光标
    <label for="username">用户名</label>
    <input id="username" type="text" name="username" value="alex">
    
    方式二:
    <label>
        密码:<input type="password" name="password" value="111" disabled>
    </label>
    
    
  • 说明:

    1. label 元素不会向用户呈现任何特殊效果,但是点击label标签里面的文本,那么和他关联的input标签就获得了光标,让你输入内容
    2. label标签的for属性值应当与相关元素的id属性值相同

12.2.12 textarea多行文本

<textarea name="memo" id="memo" cols="30" rows="10">
  默认内容
</textarea>
name:名称
rows:行数   #相当于文本框高度设置
cols:列数   #相当于文本框长度设置
disabled:禁用

12.3 CSS的选择器

12.3.1 css的几种引入方式

  1. 行内样式

    • 行内式是在标记style属性中设定css样式.不推荐大规模使用

      /*写在body标签里面*/
      <p style="color: red">hello word</p>
      
      
  2. 内部样式

    • 嵌入式是将css样式集中写在网页的<head></head>标签对应的<style></style>标签中

      <!DOCTYPE html>
      <html lang="en">
      <head>
          <meta charset="UTF-8">
          <title>玺</title>
          <style>
              div{
                  color: aqua;
              }
          </style>
      </head>
      <body>
          <div>
              你好
          </div>
      </body>
      </html>
      
      
  3. 外部样式

    • 外部样式就是将css写在一个单独的文件中然后在页面进行引入即可. 推荐使用此方式

      # 在一个 aa.css 文件中写入以下内容
      div{
          background-color: aquamarine;
          height:100px;
          200px
      }
      
      # 在另一个文件引入
      <!DOCTYPE html>
      <html lang="en">
      <head>
          <meta charset="UTF-8">
          <title>玺</title>
          <link rel="stylesheet" href="aa.css">
      </head>
      <body>
          <div> </div>
      </body>
      </html>
      
      

12.3.2 基本选择器

  1. 元素选择器

    <style>
    div{  
        color:deepskyblue;
    }
    </style>
    /*渲染div标签中的内容*/
    
    
  2. id选择器: id值不能重复

    <style>
        #name{
            color:red;
        }
    </style>
    
    <body>
        <div id="name">张三</div>
        <div>李四</div>
    </body>
    /*只将张三的名字变成红色*/
    
    
  3. 类选择器: 类值可以重复

    <style>
        /*div.c1{*/    # 仅将div标签中含有class值为c1的文字内容变为绿色
        /*color:green;*/
        /*}*/
    	
    	.c1{    # 将所有标签中含有class值为c1的文字内容变为绿色
                color:green;
            }
    </style>
    
    <body>
        <div class="c1">深圳</div>
        <div class="c1">北京</div>
        <span class="c1">上海</span>
    </body>
    
    
  4. 通用选择器

    *{    # 找到所有的标签
    	color: green;
    }
    
    

12.3.3 组合选择器

  1. 后代选择器

    <style>
        div a{  # 找到div标签后代里面的所有的a标签
            color:red;
        }
    </style>
    
    <body>
        <div>
            <a href="">天猫</a>
            <p>
                <a href="">百度</a>
            </p>
        </div>
    </body>
    # 天猫和百度的颜色变成红色
    
    
  2. 儿子选择器

    <style>
        div>a{  # 找到div的儿子标签这一代的a标签
            color:red;
        }
    </style>
    
    <body>
        <div>
            <a href="">天猫</a>
            <p>
                <a href="">百度</a>
            </p>
        </div>
    </body>
    # 只有天猫的颜色变为红色
    
    
  3. 毗邻选择器

    <style>
        div+a{  # 找到紧挨着div标签的下一个标签(是兄弟标签)
            color:red;
        }
    </style>
    
    <body>
        <p>淘宝</p>
        <div>
            <a href="">天猫</a>
            <p>
                <a href="">百度</a>
            </p>
        </div>
        <a href="">小米</a>
        <a href="">华为</a>
    </body>
    # 只有小米的颜色变为红色
    
    
  4. 弟弟选择器

    <style>
        div~a{  # 找到同级后面的所有兄弟标签
            color:red;
        }
    </style>
    
    <body>
        <p>淘宝</p>
        <div>
            <a href="">天猫</a>
            <p>
                <a href="">百度</a>
            </p>
        </div>
        <a href="">小米</a>
        <a href="">华为</a>
    </body>
    # 小米和华为的颜色变红
    
    

12.3.4 属性选择器

<style>
    [title]{  # 找到所有含有title属性的标签  
        color: red;
    }

    div[title]{  # 找到含有title属性的div标签
        color: red;
    }

    [title=a]{  # 通过属性名对应的值来查找
        color: red;
    }

    [title='1']{  # 当属性名对应的值为数字时,数字要加上引号
        color: red;
    }

    input[type=text]{  # 含有type属性,并且type属性值为text的input标签
        background-color: red;
    }
</style>

<body>
    <div title="a">你好</div>
    <span title="1">我好</span>
    <p title="a">他好</p>
    <input type="text">
    <input type="password">
</body>

12.3.5 分组

多个选择器选择的标签设置相同css样式的时候,就可以用分组

div,p{  # div和p选择器共同设置相同的样式,可以用逗号分隔
    color:red;
}

12.3.5 伪类选择器

a标签自带的效果:未访问过的时候是蓝色的字体颜色,访问过之后是紫色的,自带下划线
<style>
	/* 未访问的链接 */
	a:link{  
        color: red;
    }

 	/* 已访问的链接 */
    a:visited{  
        color: blue;
    }
	
	/* 鼠标移动到链接上变色 */  这个用的比较多,可以应用在其他标签上
    a:hover{  
        color: green;
    }

	/* 选定的链接 */ 就是鼠标点下去还没有抬起来的那个瞬间,可以让它变颜色
    a:active{  
        color:red
    }

	/*input输入框获取焦点时样式*/
    input:focus{  # input默认的有个样式,鼠标点进去的时候,input框会变天蓝色
        #outline:none;
        background-color: deepskyblue;  # 框里面的背景色
    }
</style>

12.3.6 伪元素选择器

<style>
	/*将div标签内的内容的首字符大小改成30,颜色改成天蓝色*/
    div:first-letter{
        color:deepskyblue;
        font-size: 30px;
    }

	/*在p标签内容前面插入大小为40,颜色红色的python内容*/
    p:before{
        content:'python';
        color:red;
        font-size: 40px;
    }

	/*在p标签内容后面插入大小为30,颜色粉色的Java内容*/
    p:after{
        content:'java';
        color:pink;
        font-size:30px;
    }
</style>

12.3.7 选择器的优先级

优先级数字越大,越优先显示其效果,优先级相同的,显示后面定义的选择器对应的样式

继承的优先级为 0
元素选择器的优先级为 1
类选择器的优先级为 10
id选择器的优先级为 100
内敛样式的优先级为 1000
! important 优先级最高,为最重要的  示例: color:red !important;

12.4 CSS属性相关

  • 高度宽度设置 : 只有块级标签可以设置高度宽度,内敛标签不能设置高度宽度,它的高度宽度是由内容决定的

    div{
         100px;  宽度
        height: 100px; 高度
        background-color: pink;
    }
    
    
  • 补充 : a标签的字体颜色设置必须选中a标签才行

    # 通过类选择器选中a标签
    .c1 a{ 
        color: red;
    }
    
    

12.4.1 字体属性

  1. 字体

    div{
        font-family: '楷体','宋体','微软雅黑';
    }
    # 会选择字体中的一种显示文本
    
    
  2. 字体大小

    div{
        font-size: 20px;
    }
    # 设置字体大小为20  默认字体大小是16
    
    
  3. 子重(字体的粗细)

    描述
    normal 默认值,标准粗细
    bold 粗体
    bolder 更粗
    lighter 更细
    • 100 - 900 设置具体粗细,400 等同于normal,700 等同于bold
    div{
        font-weight: bold;
        font-weight: 100;   # 两种表示方式
    }
    
    
  4. 颜色的表示方式

    p{
        color: red;
        color: #78FFC9;
        color: rgb(123,199,255);
        color: rgba(123,199,255,0.3); # 多了一个透明度的数字: 0-1之间的一个数字
    }
    # 四种表示方式
    
    

12.4.2 文字属性

  1. 文字对齐

    • left : 左对齐,默认值
    • right : 右对齐
    • center : 居中对齐
    div{     
        200px;
        height: 200px;
        background-color: pink;
        color: red;
        text-align: center;  # 文本居中对齐
    }    
    
    
  2. 文字装饰

    描述
    none 默认,定义标准的文本
    underline 在文本下方定义一条线
    overline 在文本上方定义一条线
    line-through 定义穿过文本的一条线
    div a{
        text-decoration: none ;  # 给a标签去除下划线
        text-decoration: line-through;
        text-decoration: overline;
    }
    
    
  3. 首行缩进

    p{
        text-indent : 32px;
    }
    # 首行缩进两个字符,一个字符大小在页面上的默认大小是16px,所以缩进32px
    
    

12.4.3 背景属性

  • 图片位置
    • 左上:left top
    • 上中: center top
    • 右上: right top
    • 左中: left center
    • 正中心: center center
    • 右中: right center
    • 左下: left bottom
    • 下中: center bottom
    • 右下: right bottom
div{
     600px;
    height: 600px;
    background-color: pink;
    /*background-repeat: no-repeat;*/  no-repeat:背景图片不平铺 ,不写默认是平铺的
    /*background-image: url('lan.png');*/  图片的地址             
    /*background-position: center center;*/  图片摆放的位置               
    background:url('lan.png') no-repeat right center; 以上三句话可以写成这一句话
    /*background-position: 100px 50px;*/  相对于div标签的,距离左边100px,距离上面50px
}

# 简写方式
background:pink url('1.png') no-repeat right top;
    颜色          图片路径     是否平铺   图片位置

其他:
background-attachment:fiexed;   固定在屏幕的某个位置

12.5 边框

  • 边框样式:

    描述
    none 无边框
    dotted 点状虚线边框
    dashed 矩形虚线边框
    solid 实线边框
    div{
         200px;
        height:200px;
        border-style:solid;
        border-color:red;
        border-10px;
        # 上面三句的简写方式简写方式
        border: 10px solid red;
    
        border-top-style:dashed;    # 单独设置上边框
        border-bottom-style:dashed; # 单独设置下边框
        border-left-style:dashed;   # 单独设置左边框
        border-right-style:dashed;  # 单独设置右边框
        border-left:10px solid red;  单独设置边框的简写方式
        border-radius: 50%;  # 控制圆角,50%以上的都是圆形
    }
    
    

12.6 display 属性

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

    意义
    display:none HTML文档中元素存在,但在浏览器中不显示
    display:block 默认占满整个页面的宽度,如果设置了指定宽度,则会用margin填充剩下的部分
    display:inline 按行内元素显示,此时设置元素的width height margin-top和float属性都不会生效
    display:inline-block 使元素同时具有行内元素和块级元素的特点,不独占一行
    • display:none 和 visibility:hidden 的区别
      • visibility:hidden: 可以隐藏某个元素,但隐藏的元素仍需占用与未隐藏之前一样的空间。也就是说,该元素虽然被隐藏了,但仍然会影响布局。
      • display:none: 可以隐藏某个元素,且隐藏的元素不会占用任何空间。也就是说,该元素不但被隐藏了,而且该元素原本占用的空间也会从页面布局中消失。
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            div{           
                200px;
                height:200px;
                border:5px solid red;
                display:inline;  # 将div标签设置成内敛标签,不独占一行
            }
            span{
                border:5px solid orange;
            }
            .c1{      
                200px;
                height:200px;
                /*display:block;*/      # 将span标签设置成行外标签,独占一行
                display:none;           # 隐藏类c1中的元素,不占用空间
                /*visibility:hidden;*/  # 隐藏类c1中的元素,占用空间
            }
        </style>
    </head>
    <body>
        <div>人生苦短,用毛python</div>
        <span class="c1">开心就好</span>
        <span class="c2">快乐最重要</span>
    </body>
    
    

12.7 CSS盒子模型

  • 在css里面,每个标签可以称为一个盒子模型

    1. margin : 外边距,用于控制元素与元素之间的距离,margin的最基本用途就是控制元素周围的间隔,从视觉角度上达到相互隔开的目的

    2. border : 围绕在内边距和内容外的边框

    3. padding : 内边距,用于控制内容和边框之间的距离

    4. content : 盒子的内容,显示文本和图像

      1562065757159

  • padding : 内边距

    <style>
        .d1{
            border:2px solid red;
            200px;
            height:100px;
            padding-top:10px;   上边距: 10
            padding-left:3px;   左边距: 3
            padding-right:5px;  右边距: 5
            padding-bottom:6px; 下边距: 6
    
            # 简写方式
            padding:10px;	            上下左右边距都为10
            padding:10px 15px;	        上下边距10,左右边距15
            padding:10px 15px 20px;		上边距10,左右边距15,下边距20
            padding:5px 10px 15px 20px;  顺时针表示: 上 右 下 左
            padding:5px 10px 15px 0;     如果不设置内边距,则写 0 即可
        }
    </style>
    
    
  • margin 外边距

    • top : 距离上面标签的距离

    • bottom : 距离下面标签的距离

    • left : 距离左边标签的距离

    • right : 距离右边标签的距离

      <head>
          <meta charset="UTF-8">
          <title>Title</title>
          <style>
              .c1{
                  border: 5px solid red;
                   200px;
                  height:100px;
                  margin-bottom:100px;  # 距离下面标签的距离为100
              }
              .c2{
                  border:5px solid green;
                  200px;
                  height:100px;
                  margin-left:50px;   # 距离上面标签的距离为50,由于100大于50,所有上下标签的距离为100
              }
              .s1{
                  margin-right:100px;  # 距离右标签的距离为100
              }
              .s2{
                  margin-left:200px;   # 距离左标签的距离为200,跟上面结合一起,两者的距离就是300
              }
          </style>
      </head>
      <body>
          <div class="c1">人生苦短</div>
          <div class="c2">用毛python</div>
          <span class="s1">生于忧患</span>
          <span class="s2">死于安乐</span>
      </body>
      
      两种简写方式
      margin: 10px 20px  -->跟上下标签的距离为10,左右标签的距离为20
      margin:2px 5px 8px 10px  --> 顺时针表示: 上 右 下 左
      
      两种情况:
      1.垂直方向如果上下两个标签都设置了margin外边距,则去两者的最大值
      2.水平方向两个标签设置了外边距,则取这两者的边距之和
      
      

12.8 浮动: float

  • 布局用的,设置了浮动的标签会脱离正常文档流
  1. 三种取值:

    • left : 向左取值
    • right : 向右取值
    • none : 默认值,不浮动
  2. clear : 规定元素的哪一侧不允许其他浮动元素

    描述
    left 在左侧不允许浮动元素
    right 在右侧不允许浮动元素
    both 在左右两侧均不允许出现浮动元素
    none 默认值,允许浮动元素出现在两侧
    inherit 规定应该从父元素继承clear属性的值
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
        <style>
            .c1{
                background-color:red;
                100px;
                height:100px;
                float:right;  # 向右浮动
            }
            .c2{
                background-color: orange;
                100px;
                height:100px;
                float:left;  # 向左浮动
            }
            .c3{
                background-color: green;
                height:100px;  # 不设置宽度,让其充满屏幕
            }
    
    		# 浮动会造成父级标签塌陷的问题
    		# 解决方法
    		1. 给父级标签设置高度
               .cc{
                    height: 200px;
                }
    		2. 伪元素选择器清除浮动,给父级标签加上下面这个类值
                .clearfix:after{
                    content:'';
                    display:block;
                    clear:both;  # 清除浮动clear
            }
        </style>
    </head>
    <body>
        <div class="cc clearfix">
        	<div class="c1"></div>
        	<div class="c2"></div>
        </div>
    <div class="c3"></div>
    </body>
    
    

12.9 overflow 溢出属性

描述
visible 默认值,内容不会被修剪,会呈现在元素框之外
hidden 内容会被修剪,并且其余内容是不可见的
scroll 内容会被修剪.但是浏览器会显示滚动以便查看其余的内容,也可以左右滚动
auto 如果内容被修剪,则浏览器会显示滚动条以便查看其余的内容。
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        div{
            200px;
            height:200px;
            border: 3px solid red;
            /*overflow:hidden;*/  # 内容会被修剪,其余内容不可见
            overflow:auto;    # 内容被修剪,浏览器会显示滚动条以便查看其余的内容
        }
    </style>
</head>
<body>
    <div>
        你的理想是诗,理想是梦,理想是远方的田野,理想是穿越世界的旅行。但现在你能做的所有,只是把手握紧,厚积薄发,你只有付出,付出你的时间,赌上你的尊严,拿出你的全部,你的everything。当别人打游戏时,你在学习;当别人睡懒觉时,你在学习;你含着泪在深夜里舞蹈,在回忆里奔跑,没有人在年少时想成为一个普通人。尽管生活它会剥夺你的所爱,践踏你的尊严,把你踩在脚下,遍体鳞伤,但你,怎能倒下!你的身后,是挚爱的人。
    </div>
</body>

12.10 圆形头像示例

<head>
    <meta charset="UTF-8">
    <meta http-equiv="x-ua-compatible" content="IE=edge">
    <title>圆形头像</title>
    <style>
        .c{
            300px;
            height:300px;
            border:5px solid wheat;
            border-radius: 50%;
            overflow: hidden;  # 设置为修剪不可见
        }
        .c>img{
            100%;   # 让img标签按照外层div标签的宽度来显示
        }
    </style>
</head>
<body>
    <div class="c">
        <img src="xiaohua.png" alt="" title="校花">
    </div>
</body>

  • 总结一点:width宽度设置的时候,直接可以写100px,30% 这种百分比的写法,它的宽度按照父级标签的宽度的百分比来计算

12.11 定位position : 相对定位和绝对定位

  • position : relative; -->相对定位,保留原来的空间位置,相对自己原来的位置移动,以左上角为基准

  • position : absolute; -->绝对定位,不保留自己原来的位置,按照父级标签或者祖先级标签设置了position为relative的标签的位置进行移动,如果一直找不到设置了这个属性的标签,那么按照body标签来移动

    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .c1{
                background-color: red;
                height: 100px;
                 100px;
            }
            .c2{
                background-color: blue;
                height: 100px;
                 100px;
                position:relative;  相对定位
                bottom:100px;  往上移100px
                left:100px;    往左移100px
                top:100px;     往下移100px(距离原来位置的上边框100px)
                top:-100px;    往上移100px
    
                position:absolute;   绝对定位
                top:100px;   下移100px
                left:100px;   左移100px
            }
            .c3{
                background-color: green;
                height: 100px;
                 100px;
            }
            .ccc{
                background-color: purple;
                 200px;
                height: 100px;
            }
            .cc{
                position:relative;
                left:200px
            }
        </style>
    </head>
    <body>
        <div class="ccc"></div>
        <div class="cc">
            <div class="c1"></div>
            <div class="c2"></div>
            <div class="c3"></div>
        </div>
    </body>
    
    
  • 回到顶部示例:

    • position为fixed固定定位,通过相对于浏览器窗口的距离来设置位置

      <head>
          <meta charset="UTF-8">
          <title>Title</title>
          <style>
              .c1{
                  background-color: red;
                  height: 500px;
                   200px;
              }
      
              .c2{
                  background-color: green;
                  height: 500px;
                   200px;
              }
      
              .s1{
                  position:fixed;   /*固定位置,位置是根据浏览器窗口来的*/
                  left:20px;
                  bottom:40px;
                  background-color: aqua;
                  height: 40px;
                   80px;
                  text-align: center;
                  line-height: 40px;   /* 和标签高度一致,标签内容就是垂直居中*/
              }
              .s1 a{
                  color:white;
                  text-decoration: none;
              }
          </style>
      </head>
      <body>
          <!--<a name="top">这是顶部 honey</a>  锚点,另一种写法-->
          <div id="top">这是顶部</div>   <!-- 锚点 -->
          <div class="c1"></div>
          <div class="c2"></div>
          <span class="s1">
              <a href="#top">回到顶部</a>  <!--触发锚点-->
          </span>
      </body>
      
      
      • 锚点设置的两种方式:
        • <a name="top">这里是顶部</a>
        • <div id="top">这是顶部</div>
      • 触发锚点的a标签写法
        • <a href='#top'>回到顶部</a>

12.12 z-index 控制层级

  • 模态对话框示例

    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .shadow{
                position: fixed;
                top:0;
                bottom:0;
                left:0;
                right:0;
                background-color: rgba(0,0,0,0.5);
                z-index: 10;
            }
            .mode{
                position: fixed;
                height: 400px;
                 300px;
                background-color: white;
                z-index: 11;    /* 数值越大越在上层显示 */
                left:50%;       /* 按照窗口宽度的50%来移动 */
                top:50%;        /* 按照窗口高度的50%来移动 */
                margin-left:-150px;
                margin-top:-200px;
            }
        </style>
    </head>
    <body>
        <div>
            <h1>
                亚洲最大男性交流平台
            </h1>
        </div>
        <div class="mode"></div>
        <div class="shadow"></div>
    </body>
    
    

12.13 opacity 透明度

.c1{
    background-color: rgba(255,0,0,0.3); /* 背景颜色或者字体颜色等单独的透明度 */
    height: 100px;
     100px;
}
.c2{
    background-color: rgb(255,0,0);
    height: 100px;
     100px;
    opacity: 0.3;  /* 整个标签透明度 */
}
<div class="c1">
    你好
</div>
<div class="c2">
    我好
</div>

12.14 JavaScript

js引入

方式一:
    <script>
        alter('我要学python')
    </script>

方式二: 外部文件引入 xx.js文件
	<script src='xx,js'></script>	

注释

//  这是单行注释

/*
这是
多行注释
*/

结束符:JavaScript中的语句要以分号(;)为结束符。也就是说和缩进没关系了

声明变量var

  • JavaScript的变量名可以使用_,数字,字母,$组成,不能以数字开头。
  • 注意:
    • 变量名是区分大小写的。
    • 推荐使用驼峰式命名规则。首字母大写
    • 保留字不能用做变量名。
  • var a=10;
  • 声明变脸时可以先不赋值:
    • var a; 此时a的值为undefined

基础数据类型

数值类型 Number

  • JavaScript不区分整型和浮点型,就只有一种数值类型

  • 查看数据类型用 : typeof 变量名;

    var a = 10;
    undefined
    typeof a;
    "number"
    var b = 1.11;
    undefined
    typeof b;
    "number"
    查看数据类型用 typeof a;
    
    var c = 123e5;  // 12300000
    var d = 123e-5;  // 0.00123
    
    

字符类型 String

var a = 'alexdsb'   // "alexdsb"
typeof a;           // "string"
var a = "Hello"
var b = "world;
var c = a + b;      //字符串拼接
console.log(c);     // 得到Helloworld

类型转换

parseInt("123")  // 返回123
parseInt("ABC")  // 返回NaN,NaN属性是代表非数字值的特殊值。该属性用于指示某个值不是数字。
parseFloat("123.456")  // 返回123.456

示例:
var a = 'a123';
var b = parseInt(a);  // NaN
typeof b;      // "number"
		
var b = '1.11';
parseFloat(b); // 1.11

字符串中常用方法

  1. length 属性:查看字符串的长度

    var a = 'hello';
    a.length;  // 5
    
    
  2. trim() : 移除两边空白

    var a = '  hello  ';
    a.trim();   // "hello"
    
    
    • trimLeft() 去除左边空白
    • trimRight() 去除右边空白
  3. charAt(n) : 从0开始返回索引为n的那个字符

    var a='hello';
    a.charAt(2);  //  e
    
    
  4. concat() : 字符串的拼接

    var a = 'hello';
    var b = 'world';
    a.concat(b)  //"helloworld"
    
    
  5. indexOf() : 通过元素找索引

    var a='interesting';
    a.indexOf('t');  // 2 : 只找到第一个就不再继续找
    
    start参数 : 索引的起始位置
    var a='interesting';
    a.indexOf('n',2);  // 从第二个位置往后找,得到结果是 : 9
    
    如果找不到就返回 -1:
    a.indexOf('t',8);  // 第八个位置之后没有t元素了,得到结果 : -1
    
    
  6. slice() : 切片(前取后不取)

    var a='happy';
    a.slice(1,-1);  // app
    a.slice(1,4);   // app
    
    
  7. toLowerCase() 全部变小写 , toUpperCase() 全部变大写

    var a='happy';
    a.toUpperCase();  // HAPPY
    
    
  8. split() : 字符串分割,第二个参数是返回多少个数据

    var a='happy';
    a.split('a');  // ["h", "ppy"]
    a.split('a',1);  // ["h"] :返回一个数
    
    

布尔值

在JS里面布尔值首字母为小写
var a=true;
var b=flase;

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

null和undefined

  • null表示值是空,一般在需要指定或清空一个变量时才会使用,如:name=null;
  • undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined,还有就是函数无明确的返回值时,返回的也是undefined
  • null表示变量的值是空,undefined则表示只声明了变量,但还没有赋值

对象类型 object

JavaScript 中的所有事物都是对象:字符串、数值、数组、函数...此外,JavaScript 允许自定义对象。

    JavaScript 提供多个内建对象,比如 Number、String、Date、Array 等等,通过new实例化的对象都是object类型(var s = new String('hello'),var n = new Number(12)等),数组不需要new生命,类型就是object类型。

    对象只是带有属性和方法的特殊数据类型。

复杂数据类型 / 引用数据类型

数组:Array

  • 数组对象的作用是:使用单独的变量名来存储一系列的值

  • 创建数组

    var a = [11,22,33];
    var b = new Array([22,33]
    typeof a;  //object类型
    
    

数组常用方法和属性

  1. 索引取值

    var a = [123, "ABC"]; 
    console.log(a[1]);  // 输出"ABC"
    
    
  2. length属性 :

    var a = [123, "ABC"]; 
    a.length;  // 2
    
    
  3. push() : 尾部追加 pop() : 尾部删除

    var a = [11,22,33]
    a.push('123');   // [11, 22, 33, "123"]
    a.pop();  //"123"
    a  --  [11, 22, 33]  
    
    
  4. unshift() : 头部追加 shift() : 头部删除

    	var a = [11,22,33]
    	a   // [11, 22, 33]
    	a.unshift('aa');
    	a   // ["aa", 11, 22, 33]
        
    	a.shift();  // "aa"
    	a   // [11, 22, 33]
    
    
  5. sort() : 排序

    	var a = [11,4,84,73];
    
    	a.sort();  // [11, 4, 73, 84] 首字符会按照ASCII的大小排序
    	function sortNumber(a,b){
        	return a - b;    // 从小到大排
    	}
    	a.sort(sortNumber);  // [4, 11, 73, 84]
    
    	function sortNumber(a,b){
        	return b - a     // 从大到小排
    	}
    	a.sort(sortNumber);  // [84, 73, 11, 4]
    
    

    解释:

    • 如果想按照其他标准进行排序,就需要提供比较函数,也就是自己提供一个函数提供排序规则,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:
    • 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
    • 若 a 等于 b,则返回 0。
    • 若 a 大于 b,则返回一个大于 0 的值。
  6. splice() : 删除元素

    var a=[11,22,33,44];
    a.splice(1,2,'aa','bb'); // 从索引为1的位置往后删两个,并将内容替换
    a;  // 得到结果 : [11, "aa", "bb", 44]
    // 参数: 1.根据索引从哪删,2.删几个,3.删除位置替换的新元素(可多个元素)
    
    
  7. reverse() : 在原数组上的反转

    var a=[11,22,33,44];
    a.reverse();  // [44, 33, 22, 11]
    
    
  8. join() : 将数组元素连接成字符串

    var a=['aa','bb'];
    a.join('+');  // 'aa+bb' 通过+号将数组里面的元素拼接
    
    
  9. concat() : 连接组合并,得到一个新数组,原数组不变(类似于python列表的extend)

    var a=["aa", "bb"]
    var b=[11,22];
    a.concat(b);  // ["aa", "bb", 11, 22]
    
    

自定义对象 { }

var a = {"name": "Alex", "age": 18};
var d = {'name':'chao',age:18};  // 键可以不加引号

console.log(a.name);    // alex
console.log(a["name"]); // alex

for循环遍历自定义对象
var a = {"name": "Alex", "age": 18};
for (var i in a){    // 拿到的i是字典的key
  console.log(i, a[i]);  // 得到结果:name alex   age 18
}

  • 类型查询

    1562156106839

运算符

算数运算

  • + - * / % ++ --
  • i++,是i自加1,i--是i自减1
  • i++的这个加1操作优先级低,先执行后面逻辑,然后再自加1,而++i,这个加1操作优先级高,先自加1,然后再执行代码后面的逻辑

比较运算

  • > >= < <= != == === !==
  • ==是弱等于(不比较数据类型)
  • ===强等于 强等于会比较数据类型

逻辑运算

  • && || ! #and,or,非(取反)
  • !null返回true

赋值运算

  • = += -= *= /=
  • n += 1其实就是n = n + 1

流程控制

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 a = 10;
switch (a){    
    case 9:
		console.log('999');
	break;
    case 10:
		console.log('101010');
	break;
    case 11:
		console.log('111111');
	break;
}
// 如果写成switch (++a) 会先自加1,再执行下面代码

加上default示例:
    var a = 20;
    switch (a){
        case 9:
            console.log('999');
        break;
        case 10:
            console.log('101010');
        break;
        case 11:
            console.log('111111');
        break;
        default :  //上面的条件都不成立的时候,走default
            console.log('啥也不对!!')
    }

for循环

for (var i=0;i<10;i++) {  
  console.log(i);
} //先执行代码再自加1
// 打印0-9 ,相当于 for i in range(10):

循环数组:
var l2 = ['aa','bb','dd','cc']
方式1
for (var i in l2){  //  i是索引的位置
   console.log(i,l2[i]);  //得到结果: 0 aa  1 bb  2 cc  3 dd
}

方式2
for (var i=0;i<l2.length;i++){
  console.log(i,l2[i])
}

循环自定义对象:
var d = {aa:'xxx',bb:'ss',name:'小明'};
for (var i in d){
    console.log(i,d[i],d.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这个条件成立,就把冒号前面的值给c,否则把冒号后面的值给c

函数

基本函数

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

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

/ 带返回值的函数
function sum(a, b){
  return a + b;  //在js中,如果你想返回多个值是不行的,比如return a ,b;只能给你返回最后一个值,如果就想返回多个值,你可以用数组包裹起来 return [a,b];
}
sum(1, 2);  // 调用函数  sum(1,2,3,4,5)参数给多了,也不会报错,还是执行前两个参数的和,sum(1),少参数或者没参数也不报错,不过返回值就会是NAN

// 匿名函数方式,多和其他函数配合使用,后面我们就会用到了
var sum = function(a, b){  //在es6中,使用var,可能会飘黄,是因为在es6中,建议你使用let来定义变量,不过不影响你使用
  return a + b;  
}
sum(1, 2);

// 立即执行函数,页面加载到这里,这个函数就直接执行了,不需要被调用执行
(function(a, b){
  return a + b;
})(1, 2);  //python中写可以这么写:ret=(lambda x,y:x+y)(10,20) 然后print(ret)

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

  • 局部变量:在JavaScript函数内部声明的变量(使用 var)是局部变量,所以只能在函数内部访问它(该变量的作用域是函数内部)。只要函数运行完毕,本地变量就会被删除。
  • 全局变量: 在函数外声明的变量是全局变量,网页上的所有脚本和函数都能访问它。
  • 变量生存周期:
    • JavaScript变量的生命期从它们被声明的时间开始。
    • 局部变量会在函数运行以后被删除。
    • 全局变量会在页面关闭后被删除。

作用域

  • 首先在函数内部查找变量,找不到则到外层函数查找,逐步找到最外层。

闭包

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

面向对象

  • 面向对象,在ES5中没有类的概念,只有个构造函数,命名的首字母要大写,实例化的时候使用new关键字进行实例化

  • 创建对象

    var person=new Object();  // 创建一个person对象
    person.name="Alex";  // person对象的name属性
    person.age=18;  // person对象的age属性
    
    
  • es5封装方式

    function Person(name){
        this.name=name
    }
    
    console.log(p1.name)  
    Person.prototype.func1 = function(hobby){  //添加一些方法,使用prototype,叫做原型链 方法
        console.log(this.name,hobby)
    }
    var p1 = new Person('chao');
    p1.func1(爱编程)  // 方法和属性只能通过对象来调用,不能使用类名来调用
    // xin
    // xin 爱编程!
    
    

date对象

var d1 = new Date(); //获取当前时间
console.log(d1.toLocaleString());  //当前时间日期的字符串表示

//方法2:参数为日期字符串
var d2 = new Date("2004/3/20 11:12");
console.log(d2.toLocaleString());
var d3 = new Date("04/03/20 11:12");  // 月/日/年(可以写成04/03/2020)
console.log(d3.toLocaleString());

//方法3:参数为毫秒数,了解一下就行
var d3 = new Date(5000);  
console.log(d3.toLocaleString());
console.log(d3.toUTCString());  
 
//方法4:参数为年月日小时分钟秒毫秒
var d4 = new Date(2004,2,20,11,12,0,300);
console.log(d4.toLocaleString());  //毫秒并不直接显

date对象的其他方法

var d = new Date(); 
d.getDate()                 获取日
d.getDay ()                 获取星期 ,数字表示(0-6),周日数字是0
d.getMonth ()               获取月(0-11,0表示1月,依次类推)
d.getFullYear ()            获取完整年份
d.getHours ()               获取小时
d.getMinutes ()             获取分钟
d.getSeconds ()             获取秒
d.getMilliseconds ()        获取毫秒
d.getTime ()                返回累计毫秒数(从1970/1/1午夜),时间戳

json

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

RegExp 正则对象

创建正则对象的方法
	var reg = new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,11}$");
简写方式:
	var reg = /^[a-zA-Z][a-zA-Z0-9_]{5,11}$/;

test方法.测试某个字符串是否符合正则规则
	var s = 'hello'
	reg.test(s)  符合返回True,不符合返回false
	
一个坑:
    reg1.test() 里面什么也不写,会默认放一个"undefined"字符串
    reg1.test("undefined") 

其他正则方法

var s2 = "hello world";

s2.match(/o/g);   // ["o", "o"]  查找字符串中 符合正则 的内容 ,/o/g后面这个g的意思是匹配所有的o,
s2.search(/h/g);  // 0  查找字符串中符合正则表达式的内容位置,返回第一个配到的元素的索引位置,加不加g效果相同
s2.split(/o/g);   // ["hell", " w", "rld"]  按照正则表达式对字符串进行切割,得到一个新值,原数据不变
s2.replace(/o/g, "s");  // "hells wsrld"    对字符串按照正则进行替换

var s1 = "name:Alex age:18";

s1.replace(/a/, "哈哈哈");      // "n哈哈哈me:Alex age:18"
s1.replace(/a/g, "哈哈哈");     // "n哈哈哈me:Alex 哈哈哈ge:18"      全局匹配
s1.replace(/a/gi, "哈哈哈");    // "n哈哈哈me:哈哈哈lex 哈哈哈ge:18"  不区分大小写

坑:
	var reg = /a/g;
	var s = 'alex a sb';
	reg.test(s); //true
	reg.lastIndex; // 1
	reg.test(s); //true
	reg.lastIndex; // 6
	reg.test(s); //false
	
	reg.lastIndex = 0;重新赋值,让其归零

Math计算模块

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

12.15 JS中的BOM

  • 浏览器对象模型,能使JS有能力和浏览器进行交互

window对象的子对象中的location

location.href;   // 获取当前的URL
location.href="URL" // 跳转到指定页面
	示例:location.href = 'http://www.baidu.com';直接跳转到百度
location.reload();  // 重新加载页面,就是刷新一下页面

  • 确认框(了解即可)
    • confirm('你确定吗?'); 如果用户点击确认,那么返回值为 true。如果用户点击取消,那么返回值为 false。

计时器相关(计时器是异步的)

  1. setTimeout 计时器,一段时间之后做某些事

    var t=setTimeout("JS语句",毫秒)  第一个参数js语句多数是写一个函数,不然一般的js语句到这里就直接执行了,先用函数封装一下,返回值t其实就是一个id值(浏览器给你自动分配的
    
    
    • setTimeout() 方法会返回某个值。在上面的语句中,值被储存在名为 t 的变量中。假如你希望取消这个 setTimeout(),你可以使用这个变量名来指定它。

    • setTimeout() 的第一个参数是含有 JavaScript 语句的字符串。这个语句可能诸如 "alert('5 seconds!')",或者对函数的调用,诸如 alertMsg()"。

    • 第二个参数指示从当前起多少毫秒后执行第一个参数(1000 毫秒等于一秒)。

      setTimeout('confirm("你好");',3000);  // 3秒之后执行前面的js代码
      setTimeout(confirm('xxx'),3000);  // 如果写的不是字符串,会直接执行
      setTimeout(function(){confirm('xxx')},3000);  // 最好写成函数
      
      var a = setTimeout(function(){console.log('xxx')},3000);  // a是浏览器来记录计时器的一个随机数字
      clearTimeout(a)    // 清除计时器,通过这个数字可以清除
      
      
  2. setInterval() 计时器,每隔一段时间做某些事

    • setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式。
    • setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的参数。
    var a = setInterval(function(){console.log('xxx')},3000);  
    clearInterval(a);
    
    

12.16 JS中的DOM

认识DOM

  • HTML DOM 模型被构造为对象的树。
  • 是一套对文档的内容进行抽象和概念化的方法。
  • DOM标准规定HTML文档中的每个成分都是一个节点(node):
    • 文档节点(document对象):代表整个文档
    • 元素节点(element 对象):代表一个元素(标签)
    • 文本节点(text对象):代表元素(标签)中的文本
    • 属性节点(attribute对象):代表一个属性,元素(标签)才有属性
    • 注释是注释节点(comment对象) 
  • JavaScript 可以通过DOM创建动态的 HTML:
    • JavaScript 能够改变页面中的所有 HTML 元素 / HTML 属性 / CSS 样式

查找标签

  • 和css一样,你想操作某个标签需要先找到它

直接查找

  • document.getElementById(id值); 根据ID获取一个标签

  • document.getElementsByClassName(类值); 根据class属性获取(可以获取多个元素,所以返回的是一个数组)

  • document.getElementsByTagName(标签名); 根据标签名获取标签合集(得到的是数组,可以通过索引拿到值)

    <div class="c1" id="d1">
        待到将军归来日,朕与将军解战袍!
        </div>
    
    <div class="c1" id="d2">
        日照香炉生紫烟,遥看瀑布挂前川!
        </div>
    	
    var a = document.getElementById('d1');  // 获取id属性值为d1的标签  拿到的直接是标签对象
    var a = document.getElementsByClassName('c1'); // 获取class值为c1的所有标签  拿到的是数组
    var a = document.getElementsByTagName('div');  // 获取所有div标签  拿到的是数组
    
    

间接查找

var a = document.getElementById('d1');
a.parentElement;            // 获取a这个标签的父级标签
a.children;                 所有子标签 得到的一个数组,可以通过索引取值
a.firstElementChild;        第一个子标签元素
a.lastElementChild;         最后一个子标签元素
a.nextElementSibling;       下一个兄弟标签元素
a.previousElementSibling;   上一个兄弟标签元素

  • 如果查找出来的内容是个数组,那么就可以通过索引来取对应的标签对象

节点操作

创建节点(创建标签) 
	var a = document.createElement('标签名称'); 
	示例,创建a标签
		var a = document.createElement('a');
	var dd = document.getElementById('dd');  // 找到div标签
	
添加节点
	// 添加节点,添加到了最后
	dd.appendChild(a);     // 将创建的a标签添加到dd这个div标签里面的最后.

	// 某个节点前面添加节点
	父级标签.insertBefore(新标签,某个儿子标签)
	示例:
		var dd = document.getElementById('dd');  // 找到父级标签
		var a = document.createElement('a');   // 创建一个新的a标签
		var d2 = dd.children[1];  // 找到父级标签下的某个儿子标签
		dd.insertBefore(a,d2);   // 将a标签插入到上面这个儿子标签的前面.
删除节点
	dd.removeChild(d2);  父级标签中删除子标签
        
替换节点
	var dd = document.getElementById('dd');  // 找到父级标签
	var a = document.createElement('a');  // 创建a标签
	a.innerText = '百度';  
	var d1 = dd.children[0];  // 找到要被替换的子标签
	dd.replaceChild(a,d1);  // 替换

文本操作

var divEle = document.getElementById("d1")
divEle.innerText; // 输入这个指令,一执行就能获取该标签和内部所有标签的文本内容
divEle.innerHTML;  // 获取的是该标签内的所有内容,包括文本和标签

d1.innerText; 查看

设置一个文本:
	d1.innerText = "<a href=''>百度</a>";  
	d1.innerHTML = "<a href=''>百度</a>";  能够识别标签

属性操作

var divEle = document.getElementById("d1");
divEle.setAttribute("age","18")  // 比较规范的写法 给某一标签增加属性
divEle.getAttribute("age")     // 查看属性
divEle.removeAttribute("age")  // 删除属性

// 自带的属性还可以直接.属性名来获取和设置,如果是你自定义的属性,是不能通过.来获取属性值的
标签对象.属性;  // 设置属性
标签对象.属性="..."    // 修改属性

获取值操作

  • 适用于用户输入或者选择类型的标签如:input / select / textarea

    var inp = document.getElementById('username');
    inp.value;              // 查看值
    inp.value = 'taibai';   // 设置值
    
    选择框
    	<select name="city" id="city">
            <option value="1">上海</option>
            <option value="2">北京</option>
            <option value="3">深圳</option>
        </select>
    	
    	var inp = document.getElementById('city');
    	inp.value;        // 查看值
    	inp.value = '1';  设置值
    
    

class的操作

var d = document.getElementById('dd'); 
d.classList;  // 获得这个标签的class属性的所有的值
d.classList.add('xx2');       // 添加class值
d.classList.remove('xx2');    // 删除class值
d.classList.contains('xx2');  // 判断是否有某个class值,有返回true,没有返回false
d.classList.toggle('xx2');    // 有就删除,没有就增加

css操作

  • 对于没有中横线的CSS属性一般直接使用style.属性名即可

  • 对含有中横线的CSS属性,将中横线后面的第一个字母换成大写即可。

    var d = document.getElementById('d');
    d.style.backgroundColor = 'deeppink';  
    d.style.height = '1000px'
    
    

事件

  1. onclick 当用户点击某个对象时调用的事件句柄。

    • 绑定事件的方式有两种

    • 方式一:

      <div id="d1" onclick="f1();"></div>
      
      <script>  // 可写在body标签里也可写在head标签里
          function f1() {
              var d = document.getElementById('d1');
              d.style.backgroundColor = 'yellow';
          }
      </script>
      
      
    • 方式二: (常用这种方式)

      <div id="d1"></div>
      <script>  // 只能写在body标签里面
          var a=document.getElementById('d1');
      	a.onclick=function () {
          	a.style.backgroundColor='red';
      }
      </script>
      
      其他:
      <body>
          <div id="d1"></div>
          <div id="d2"></div>
          <script>
              var a=document.getElementById('d1');
              a.onclick=function () {
                  var b=document.getElementById('d2');
                  b.style.backgroundColor='yellow';    // 点击d1所属标签时,d2所属标签会变色
              }
          </script>
      </body>
      
      
  2. 事件里面的this

    • 绑定方式一:

      this表示当前标签对象
      <div id="d1" class="c1" onclick="f1(this);"></div>
      <script>
          function f1(ths) {
                  // var d = document.getElementById('d1');
                  // d.style.backgroundColor = 'yellow';
                  ths.style.backgroundColor = 'yellow';
              }
      </script>
      
      
    • 绑定方式二:

      <div id="d1" class="c1"></div>
      <script>
          var d = document.getElementById('d1');
          d.onclick = function () {
              this.style.backgroundColor = 'yellow';
              // d.style.backgroundColor = 'yellow'; //this表示当前标签对象
          }
      </script>
      
      
  3. onfocus 元素获得焦点 ; onblur 元素失去焦点

    <body>
        用户名<input type="text" id="username">
        <div id="d1"></div>
        <div id="d2"></div>
        <script>
            var a=document.getElementById('username');
            a.onclick=function () {
                var b=document.getElementById('d1');
                b.style.backgroundColor='pink';  // 当input输入框获取到光标时,d1所属标签变色
            }
    
            a.onblur=function () {
                var c=document.getElementById('d2');
                c.style.backgroundColor='blue';  // 当input输入框获失去光标时,d2所属标签变色
            }
        </script>
    </body>
    
    
  4. onchange事件,域内容发生变化时触发

    <select name="" id="jishi">
        <option value="1">太白</option>
        <option value="2">alex</option>
        <option value="3">沛齐</option>
    </select>
    
    // onchange事件,内容发生变化时触发的事件
        var s = document.getElementById('jishi');
        s.onchange = function () {
        	//this.options  select标签的所有的option标签
        	//this.selectedIndex被选中的标签在所有标签中的索引值
            console.log(this.options[this.selectedIndex].innerText + '搓的舒服');
        }
         
    用户名:<input type="text" id="username">    
    
    //input标签绑定onchange事件
        var inp = document.getElementById('username');
    	inp.onchange = function () {
        	console.log(this.value);  
    	}; 
    
    
  5. 常用事件

    onclick        当用户点击某个对象时调用的事件句柄。
    ondblclick     当用户双击某个对象时调用的事件句柄。
    
    onfocus        元素获得焦点。               // 练习:输入框
    onblur         元素失去焦点。               应用场景:用于表单验证,用户离开某个输入框时,代表已经输入完了,我们可以对它进行验证.
    onchange       域的内容被改变。             应用场景:通常用于表单元素,当元素内容被改变时触发.(select联动)
    
    onkeydown      某个键盘按键被按下。          应用场景: 当用户在最后一个输入框按下回车按键时,表单提交.
    onkeypress     某个键盘按键被按下并松开。
    onkeyup        某个键盘按键被松开。
    onload         一张页面或一幅图像完成加载。
    onmousedown    鼠标按钮被按下。
    onmousemove    鼠标被移动。
    onmouseout     鼠标从某元素移开。
    onmouseover    鼠标移到某元素之上。
    
    onselect      在文本框中的文本被选中时发生。
    onsubmit      确认按钮被点击,使用的对象是form。
    
    

12.17 JQuery

jQuery引入

  • 下载链接: [jQuery官网](https://jquery.com/),首先需要下载这个jQuery的文件,然后在HTML文件中引入这个文件,就可以使用这个文件中帮我们提供的jquery的接口了。

jQuery对象和dom对象

  • jQuery找到的对象称为 --> jQuery对象
  • 原生js找到的标签称为 --> dom对象
  • dom对象只能使用dom对象的方法,不能使用jquery对象的方法,jquery对象也是,它不能使用dom对象的方法
  • dom对象和jquery对象互相转换:
    • jquery对象转dom对象 -- jquery对象[0] 示例: $('#d1')[0]
    • dom对象转jquery对象 -- $(dom对象)

jQuery选择器

基本选择器(同css一样)

  • 不管找什么标签,用什么选择器,都必须要写$(""),引号里面再写选择器,通过jQuery找到的标签对象就是一个jQuery对象,用原生JS找到的标签对象叫做DOM对象
  • 通过 .text() 可以拿到标签里面的文本内容
  1. id选择器
    • $("#id值")
  2. 标签选择器
    • $("标签名")
  3. class选择器
    • $(".类名")
  4. 配合使用
    • $("div.c1") 找到有c1 class类的div 标签
  5. 所有元素选择器
    • $("*")
  6. 组合选择器
    • $("#id, .className, tagName")
  7. 层级选择器
    • x和y可以为任意选择器
    • $("x y"); // x的所有后代y(子子孙孙)
    • $("x > y");// x的所有儿子y(儿子)
    • $("x + y")// 找到所有紧挨在x后面的y
    • $("x ~ y")// x之后所有的兄弟y
  • 选择器找到的可能是多个标签,会放到数组里面,但还是jquery对象,能够直接使用jquery的方法,意思是找到的所有标签进行统一设置,如果要单独设置选中的所有标签中的某个标签,可以通过索引取值的方式找到,然后注意,通过索引取值拿到的标签,是个dom对象

基本筛选器(选择之后进行过滤)

<ul>
    <li id="1">南山</li>
    <li id="2">
        <a href="">百度</a>
        宝安
    </li>
    <li id="3">坪山</li>
    <li id="4">罗湖</li>
    <li id="5">
        <a href="">华为</a>
        福田
    </li>
    <li id="6">龙岗</li>
</ul>

:first  -- 示例:$('li:first') // 第一个
:last // 最后一个
:eq(index)// 索引等于index的那个元素
:even // 匹配所有索引值为偶数的元素,从 0 开始计数
:odd // 匹配所有索引值为奇数的元素,从 0 开始计数
:gt(index)// 匹配所有大于给定索引值的元素
:lt(index)// 匹配所有小于给定索引值的元素
:not(元素选择器)// 移除所有满足not条件的标签
:has(元素选择器)// --$('li:has(.c1)')  找到后代中含有满足has里面选择器的那个标签
:not(:has(.c1)) -- $('li:not(:has(.c1))') 排除后代中含有满足has里面选择器的那个标签

属性选择器

  • [attribute = value] 属性等于

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

    // 示例,多用于input标签
    <input type="text">
    <input type="password">
    <input type="checkbox">
    $("input[type='checkbox']");  // 取到checkbox类型的input标签
    $("input[type!='text']");     // 取到类型不是text的input标签4
    
    

表单筛选器

  • 多用于找form表单里面出现的input标签,当然通过属性选择器找肯定没有问题的,这样就是写着简单一点

    找到的是type属性为这个值的input标签中
    :text
    :password
    :file
    :radio
    :checkbox
    
    :submit
    :reset
    :button
    
    // 例子:
    $(":checkbox")  // 找到所有的checkbox
    
    

表单对象属性筛选器

  • :enabled 可用的标签

  • :disabled 不可用的标签

  • :enabled 可用的标签

  • :selected 选中的option标签

    // 找到可用的input标签
    <form>
      <input name="email" disabled="disabled" />
      <input name="id" />
    </form>
    
    $("input:enabled")  // 找到可用的input标签
    
    // 找到被选中的option:
    <select id="s1">
      <option value="beijing">北京市</option>
      <option value="shanghai">上海市</option>
      <option selected value="guangzhou">广州市</option>
      <option value="shenzhen">深圳市</option>
    </select>
    
    $(":selected")  // 找到所有被选中的option
    
    

筛选器方法

  • 选择器或者筛选器选择出来的都是对象,而筛选器方法其实就是通过对象来调用一个进一步过滤作用的方法,写在对象后面加括号,不再是写在选择器里面的了。

  • 下一个元素

    $('#l3').next();  找到下一个兄弟标签
    $('#l3').nextAll(); 找到下面所有的兄弟标签
    $('#l3').nextUntil('#l5');直到找到id为l5的标签就结束查找,不包含它
    
    
  • 上一个元素

    $("#id").prev()   找到上一个兄弟标签
    $("#id").prevAll()  找到上面所有的兄弟标签
    $("#id").prevUntil("#i2") 直到找到id为i2的标签就结束查找,不包含它
    
    
  • 父亲元素

    $("#id").parent()   // 查找一级父类
    $("#id").parents()  // 查找当前元素的所有的父辈元素(爷爷辈、祖先辈都找到)
    $("#id").parentsUntil('body') // 查找当前元素的所有的父辈元素,直到遇到匹配的那个元素为止,这里直到body标签,不包含body标签,基本选择器都可以放到这里面使用。
    
    
  • 儿子和兄弟元素

    $('ul').children();       // 找所有的儿子们标签
    $('ul').children('#l3');  // 找到符合后面这个选择器的儿子标签
    
    $('#l5').siblings();      // 找到所有的兄弟们标签,不包含自己
    $('#l5').siblings('#l3'); // 找到符合后面这个选择器的兄弟标签
    
    
  • 查找

    • 搜索所有与指定表达式匹配的元素。这个函数是找出正在处理的元素的后代元素的好方法
    • $("div").find("p") 找到后代中含有p标签的div标签,相当于 `$('div p')
  • 筛选

    • 筛选出与指定表达式匹配的元素集合。这个方法用于缩小匹配的范围。用逗号分隔多个表达式

      $("div").filter(".c1")  // 从结果集中过滤出有c1样式类的,从所有的div标签中过滤出有class='c1'属性的div,和find不同,find是找div标签的子子孙孙中找到一个符合条件的标签 等价于 $("div.c1")
      
      
      .first() // 获取匹配的第一个元素
      .last()  // 获取匹配的最后一个元素
      .not()   // 从匹配元素的集合中删除与指定表达式匹配的元素$('li').not('#l3');
      .has()   // 保留包含特定后代的元素,去掉那些不含有指定后代的元素。
      .eq()    // 索引值等于指定值的元素
      
      

样式类操作

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

示例代码
	$('.c1').addClass('c2');
	$('.c1').addClass('c2');
	$('.c1').hasClass('c2');
	$('.c1').toggleClass('c2');

css样式

原生js
	标签.style.color = 'red';
jquery
	$('.c1').css('background-color','red');  
	同时设置多个css样式
	$('.c1').css({'background-color':'yellow','width':'200px'})

位置操作

查看位置
$('.c2').position();  //查看相对位置 
	{top: 20, left: 20}
$('.c2').offset();    //查看距离窗口左上角的绝对位置
	{top: 28, left: 28}
设置位置
	$('.c2').offset({'top':'20','left':'40'});
	

jQuery绑定点击事件的写法

    原生js绑定点击事件
    // $('.c1')[0].onclick = function () {
    //     this.style.backgroundColor = 'green';
    // }
jquery绑定点击事件
    $('.c1').click(function () {
        $(this).css('background-color','green');
    })

点击事件和滚动事件的示例代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .c1{
            background-color: red;
            height: 100px;
             100px;
        }
        .c2{
            background-color: green;
            height: 1000px;
             100px;
        }
        .c3{
            background-color: blue;
            height: 1000px;
             100px;
        }
        .s1{
            position: fixed;
            left:20px;
            bottom: 20px;
            height: 40px;
             80px;
            background-color: purple;
            line-height: 40px;
            text-align: center;

        }
        .s1 a{
            color: white;
            font-size: 14px;
            text-decoration: none;
        }
        .hide{
            display: none;
        }


    </style>
</head>
<body>
<!--<a name="top">这里是顶部</a>-->
<!--<a>这里是顶部</a>-->
<span>顶部位置</span>
<div class="c1"></div>

<button class="change-postion">走你</button>

<div class="c2"></div>
<div class="c3"></div>

<span class="s1 hide">
    <!--<a href="#top">返回顶部</a>-->
    <span>返回顶部</span>

</span>


<script src="jquery.js"></script>
<script>
	//点击事件来改变标签位置
    $('.change-postion').click(function () {
        $('.c1').offset({top:200,left:200});
    });
    
	//滚动事件,监听滚动距离来显示或者隐藏标签
    $(window).scroll(function () {
        console.log($(window).scrollTop());
        if ($(window).scrollTop() >=200){
            $('.s1').removeClass('hide');
        }else {
            $('.s1').addClass('hide');
        }
    });
    
	// 回到顶部,scrollTop设置值
    $('.s1').click(function () {
        $(window).scrollTop(0);
    })

</script>

</body>
</html>

尺寸

$('.c1').height();  //content 高度
$('.c1').width();   //content 宽度
$('.c1').innerHeight();//content高度+padding高度
$('.c1').innerWidth(); //content宽度+padding宽度
$('.c1').outerHeight();//content高度+padding高度 + border高度
$('.c1').outerWidth();//content宽度+padding宽度+ border宽度


示例:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .c1{
             100px;
            height: 100px;
            border: 2px solid red;
            background-color: green;
            padding: 20px 30px;
        }
    </style>
</head>
<body>
<div class="c1"></div>

<script src="jquery.js"></script>
</body>
</html>

文本操作

html()//取得第一个匹配元素的html内容,包含标签内容
html(val)//设置所有匹配元素的html内容,识别标签,能够表现出标签的效果

text()// 取得所有匹配元素的内容,只有文本内容,没有标签
text(val)//设置所有匹配元素的内容,不识别标签,将标签作为文本插入进去
示例:
$('.c1').text('<h3>你好,太白</h3>');
$('.c1').html('<h3>你好,太白</h3>');

值操作

获取值
	input type='text'的标签--$('#username').val();
	input type='radio'标签获取被选中的标签的值 --- $(':radio:checked').val();
	input type='checkbox'标签获取被选中的标签的值 --- 直接$(':checkbox:checked').val();是不行的,需要循环取值  
		var d = $(':checkbox:checked');
		for (var i=0;i<d.length;i++){
			console.log(d.eq(i).val());
		}
		
	单选select --- $('#city').val();
	多选select --- $('#author').val(); // ["2", "3"]	

设置值
	input type='text'的标签 --- $('#username').val('李杰');
	input type='radio'标签 ---  $('[name="sex"]').val(['3']);
			如果 $('[name="sex"]').val('3'),所有标签的值都变成了'3';
	input type='checkbox'设置值 --- $('[name="hobby"]').val(['2','3'])
	单选select --- $('#city').val('1');  option value='1'
	多选select --- $('#author').val(['2','3'])
	

属性操作

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

示例:
	设置单个属性
		$('.c1').attr('xx','oo');
	设置多个属性
		$('.c1').attr({'age':'18','sex':'alex'});
	查看属性
		$('.c1').attr('属性名');
    	$('.c1').attr('xx');
    删除属性
    	$('.c1').removeAttr('xx');

prop -- 针对的是checkedselecteddisabled..

查看标签是否有checked属性,也就是是否被选中
	    attr $(':checked').attr('checked'); //checked -- undefined
	    prop $(':checked').prop('checked'); //true  -- false
		
		通过设置属性的方式来设置是否选中:
			$(':radio').eq(2).prop('checked',true);  true和false不能加引号
			$(':radio').eq(2).prop('checked',false);

简单总结:
	1.对于标签上有的能看到的属性和自定义属性都用attr
	2.对于返回布尔值的比如checkbox、radio和option的是否被选中或者设置其被选中与取消选中都用prop。
	具有 true 和 false 两个属性的属性,如 checked, selected 或者 disabled 使用prop(),其他的使用 attr()

文档处理

添加到指定元素内部的后面
	$(A).append(B)// 把B追加到A
	$(A).appendTo(B)// 把A追加到B
	#添加字符串照样能识别标签  *****
	$('#d1').append('<a href="http://www.jd.com">京东</a>');
添加到指定元素内部的前面
	$(A).prepend(B)// 把B前置到A
	$(A).prependTo(B)// 把A前置到B
	示例
		$('a').prependTo($('div'));

添加到指定元素外部的后面
	$(A).after(B)// 把B放到A的后面
	$(A).insertAfter(B)// 把A放到B的后面

添加到指定元素外部的前面
	$(A).before(B)// 把B放到A的前面
	$(A).insertBefore(B)// 把A放到B的前面
	
移除和清空元素
	remove()// 从DOM中删除所有匹配的元素。
	empty()// 删除匹配的元素集合中所有的子节点,包括文本被全部删除,但是匹配的元素还
	$('div').remove();
	$('div').empty();

替换
	replaceWith()
	replaceAll()
	示例:
		var a = document.createElement('a')
		a.href = 'http://www.baidu.com';
		a.innerText = 'xxx';
		
		$('span').replaceWith(a);
		$(a).replaceAll('span');
		
clone()克隆
	<button class="btn">屠龙宝刀,点击就送!</button>	

    $('.btn').click(function () {
        // var a = $(this).clone(); //克隆标签
        var a = $(this).clone(true);  //连带事件一起克隆
        $(this).after(a);

    })

边框

	div{
            
             200px;
            height: 200px;
            /*border-style: solid;*/  边框样式
            /*border-color: red;*/    边框颜色
            /*border- 10px;*/   边框宽度
            /*border:10px solid red;*/  简写方式

            
            
            /*border-left-style: solid;*/
            /*border-left- 10px;*/

            /*border-right-style: dashed;*/
            /*border-top-style: dashed;*/
            /*border-bottom-style: dashed;*/
            /*border-right- 5px;*/
            border-left:10px solid red;  单独设置边框的简写方式

        }

控制圆角
	border-radius: 50%;  

display属性

        div{
             100px;
            height: 100px;
            border: 1px solid red;
            /*display: inline;  !* 将标签设置为内敛标签 *!*/
            /*display: inline-block;  !* 将标签设置为同时具备内敛和块级标签的一些特性,比如可以设置高度宽度,但是不独占一行 *!*/
            /*display: none;  !* 隐藏标签 ,并且不占用自己之前的空间*!*/

        }
        span{
            border: 2px solid blue;

        }

        .c1{
             200px;
            height: 200px;
            /*display: inline-block;*/  
            display: block; /* 将内敛标签设置为块级标签 */
        }
        
     值	           意义
     display:"none"	HTML文档中元素存在,但是在浏览器中不显示。一般用于配合JavaScript代码使用。
     display:"block"	默认占满整个页面宽度,如果设置了指定宽度,则会用margin填充剩下的部分。
     display:"inline"	按行内元素显示,此时再设置元素的width、height、margin-top、margin-  bottom和float属性都不会有什么影响。
     display:"inline-block"	使元素同时具有行内元素和块级元素的特点。   
	
	
隐藏标签
	visibility: hidden; /* 隐藏标签,但是标签还占用原来的空间 */
    /*display: none;  !* 隐藏标签 ,并且不占用自己之前的空间*!*/

css盒子模型

content内容区域  
padding 内边距
border 边框宽度
	div{
             200px;
            height: 100px;
            border: 2px solid deeppink;
            /*padding-top: 10px;*/
            /*padding-left: 5px;*/
            /*padding-right: 2px;*/
            /*padding-bottom: 4px;*/
            /*padding: 10px 20px;  !* 10px上下内边距 ,20px左右内边距 *!*/
            /*padding: 10px 20px 5px 2px;  !* 上 右 下 左 *!*/
            padding: 10px 20px 5px 0;  /* 上 右 下 左 */
            
        }

margin 外边距
top距离上面标签的距离
bottom距离下面标签的距离
left 距离左边标签的距离
rigth 距离右边标签的距离

        .d1 {
             200px;
            height: 100px;
            border: 2px solid deeppink;
            margin-bottom: 200px;  
        }
		.d2{
            margin-top: 100px;  
            border: 2px solid blue;

        }

	两个简写的方式
	/*margin: 10px 20px;*/    上下为10px 左右为20px
	margin: 10px 5px 6px 3px;   顺序为上、右、下、左

	两个情况:
		垂直方向如果上下两个标签都设置了margin外边距,那么取两者的最大的值
		水平方法,两个标签都设这外边距,取两者的边距之和



浮动float

	.c1{
            background-color: red;
            height: 100px;
             100px;
            float: left;
        }
        .c2{
            background-color: blue;
            height: 100px;
             100px;
            float: right;
        }
        
浮动会造成父级标签塌陷问题
解决方法:
	1 父级标签设置高度
	2 伪元素选择器清除浮动,给父级标签加上下面这个类值
		.clearfix:after{
            content: '';
            display: block;
            clear: both;  清除浮动clear
        }
        
clear的值和描述        
	值	描述
	left	在左侧不允许浮动元素。
	right	在右侧不允许浮动元素。
	both	在左右两侧均不允许浮动元素。

overflow溢出属性

 	.c1{
             200px;
            height: 200px;
            border: 1px solid red;
            /*overflow: hidden;*/
            overflow: auto;  
        }
	<div class="c1">
    	总结一下:为什么要有浮动啊,是想做页面布局,但是浮动有副作用,父级标签塌陷,所以要想办法去掉这个副作用,使用了clear来清除浮动带来的副作用,我们当然也可以通过设置标签为inline-block来实现这种布局效果,但是把一个块级标签变成一个类似内敛标签的感觉,不好操控,容易混乱,所以一般都用浮动来进行布局。
	</div>

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

圆形头像示例

<!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>

    .header-img {
       150px;
      height: 150px;
      border: 3px solid white;
      border-radius: 50%;
      overflow: hidden;
    }
    
    .header-img>img {
         100%;  #让img标签按照外层div标签的宽度来显示

    }
  </style>
</head>
<body>

<div class="header-img">
  <img src="meinv.png" alt="">
</div>

</body>
</html>

总结一点:width宽度设置的时候,直接可以写100px,30%这种百分比的写法,它的宽度按照父级标签的宽度的百分比来计算.

定位position:相对定位和绝对定位

<!DOCTYPE html>
<html lang="en">	
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .c1{
            background-color: red;
            height: 100px;
             100px;
        }
        .c2{
            background-color: blue;
            height: 100px;
             100px;
            /*position: relative;  !*相对定位,保留原来的空间位置,相对自己原来的位置移动,以左上角为基准*!*/

            /*top: 20px; 往下移20px,距离原来位置的上边框20px */
            /*top: -20px;*/
            /*left: 20px;*/
            /*right: ;*/
            /*bottom: ;*/

            position: absolute; /* 绝对定位,不保留自己原来的位置,按照父级标签或者祖先级标签..设置了position为 relative的标签的位置进行移动,如果一直找不到设置了设个属性的标签,那么按照body标签来移动 */

            top: 20px;
            left: 20px;
        }
        .c3{
            background-color: green;
            height: 100px;
             100px;
        }
        .ccc{
            height: 100px;
             200px;
            background-color: purple;
        }
        .cc{
            position: relative;
            left: 200px;
        }
    </style>
</head>
<body>
<div class="ccc"></div>
<div class="cc">
    <div class="c1"></div>
    <div class="c2"></div>
    <div class="c3"></div>
</div>

</body>
</html>

回到顶部示例:position为fixed固定定位,通过相对于浏览器窗口的距离来设置位置.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .c1{
            background-color: red;
            height: 500px;
             200px;
        }
        .c2{
            background-color: green;
            height: 500px;
             200px;
        }

        .s1{
            position: fixed; /*固定定位,位置是根据浏览器窗口来的*/
            /*top:20px;*/
            left: 20px;
            bottom: 20px;
            background-color: blue;
            height: 40px;
             80px;
            text-align: center;

            line-height: 40px; /* 和标签高度一致,标签内容就垂直居中 */

        }
        .s1 a{
            color: white;
            text-decoration: none;
        }
    </style>
</head>
<body>

<!--<a name="top">这里是顶部,亲爱的</a>-->  <!-- 锚点 -->
<div id="top">这是顶部</div> <!-- 锚点 -->

<div class="c1"></div>
<div class="c2"></div>

<span class="s1">
    <a href="#top">回到顶部</a> <!-- 触发锚点 -->
</span>

</body>
</html>


锚点设置的两种方式
	<!--<a name="top">这里是顶部,亲爱的</a>-->  <!-- 锚点 -->
	<div id="top">这是顶部</div> <!-- 锚点 -->
触发锚点的a标签写法
<a href="#top">回到顶部</a> <!-- 触发锚点 -->

z-index控制层级

模态对话框示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .shadow{
            position: fixed;
            top:0;
            bottom: 0;
            left: 0;
            right: 0;
            background-color: rgba(0,0,0,0.5);
            z-index: 99;
        }
        .mode{
            position: fixed;
            height: 400px;
             300px;
            background-color: white;
            z-index: 100;  /* 数值越大越在上层显示 */
            left: 50%;  /* 按照窗口宽度的50%来移动 */
            top:50%;    /* 按照窗口高度的50%来移动 */
            margin-left: -150px;
            margin-top: -200px;

        }

    </style>
</head>
<body>

<div>
    <h1>
        22期,吴老板唱歌
    </h1>
</div>


<div class="mode">

</div>

<div class="shadow">

</div>


</body>
</html>

opacity透明度

        .c1{
            background-color: rgba(255,0,0,0.3); /* 背景颜色或者字体颜色等单独的透明度 */
            height: 100px;
             100px;
        }
        .c2{
            background-color: rgb(255,0,0);
            height: 100px;
             100px;
            opacity: 0.3;  /* 整个标签透明度 */
        }
<div class="c1">
    你好
</div>
<div class="c2">
    我好
</div>


BOM 浏览器对象模型

window对象的子对象中的location

location.href   获取当前url:"https://www.cnblogs.com/clschao/articles/10092991.html"
location.href="URL" // 跳转到指定页面
	示例:location.href = 'http://www.baidu.com';直接跳转到百度
location.reload() 重新加载页面,就是刷新一下页面

计时器相关(计时器是异步的)

setTimeout 计时器,一段时间之后做某些事情

setTimeout('confirm("你好");',3000);  #3秒之后执行前面的js代码
setTimeout(confirm('xxx'),3000);  #如果写的不是字符串,会直接执行
setTimeout(function(){confirm('xxx')},3000);  #最好写成函数

var a = setTimeout(function(){console.log('xxx')},3000);  #a是浏览器来记录计时器的一个随机数字
clearTimeout(a)  #清除计时器,通过这个数字可以清除

setInterval 计时器,每隔一段时间做某些事情

var a = setInterval(function(){console.log('xxx')},3000);  
clearInterval(a);

DOM

选择器

直接查找

document.getElementById           根据ID获取一个标签
document.getElementsByClassName   根据class属性获取(可以获取多个元素,所以返回的是一个数组)
document.getElementsByTagName     根据标签名获取标签合集
示例:
	<div class="c1" id="d1">
    	待到将军归来日,朕与将军解战袍!
	</div>

	<div class="c1" id="d2">
    	日照香炉生紫烟,遥看瀑布挂前川!
	</div>
	
	var a = document.getElementById('d1');  # 获取id属性值为d1的标签  拿到的直接是标签对象
	var a = document.getElementsByClassName('c1'); #获取class值为c1的所有标签  拿到的是数组
	var a = document.getElementsByTagName('div');  #获取所有div标签  拿到的是数组
	
	

间接查找

var a = document.getElementById('d1');
a.parentElement; #获取a这个标签的父级标签.
children                 所有子标签
firstElementChild        第一个子标签元素
lastElementChild         最后一个子标签元素
nextElementSibling       下一个兄弟标签元素
previousElementSibling   上一个兄弟标签元素


节点操作

创建节点(创建标签) 
	var a = document.createElement('标签名称'); 
	示例,创建a标签
		var a = document.createElement('a');
	var dd = document.getElementById('dd'); 找到div标签
	
添加节点
	#添加节点,添加到了最后
	dd.appendChild(a);将创建的a标签添加到dd这个div标签里面的最后.

	#在某个节点前面添加节点
	父级标签.insertBefore(新标签,某个儿子标签)
	示例
		var dd = document.getElementById('dd');  #找到父级标签
		var a = document.createElement('a');   #创建一个新的a标签
		var d2 = dd.children[1];  #找到父级标签下的某个儿子标签
		dd.insertBefore(a,d2);   #将a标签插入到上面这个儿子标签的前面.
删除节点
	dd.removeChild(d2);  父级标签中删除子标签
        
替换节点
	var dd = document.getElementById('dd');  #找到父级标签
	var a = document.createElement('a');  #创建a标签
	a.innerText = '百度';  
	var d1 = dd.children[0];  #找到要被替换的子标签
	dd.replaceChild(a,d1);  #替换
    

文本操作

d1.innerText; 查看

设置:
	d1.innerText = "<a href=''>百度</a>";  
	d1.innerHTML = "<a href=''>百度</a>";  能够识别标签

属性操作

var divEle = document.getElementById("d1");
divEle.setAttribute("age","18")  #比较规范的写法
divEle.getAttribute("age")
divEle.removeAttribute("age")

// 自带的属性还可以直接.属性名来获取和设置,如果是你自定义的属性,是不能通过.来获取属性值的
imgEle.src
imgEle.src="..."

值操作

var inp = document.getElementById('username');
inp.value;  #查看值
inp.value = 'taibai'; #设置值

选择框:
	<select name="city" id="city">
        <option value="1">上海</option>
        <option value="2">北京</option>
        <option value="3">深圳</option>
    </select>
	
	var inp = document.getElementById('city');
	inp.value;  #查看值
	inp.value = '1';  #设置值
	

class的操作

var d = document.getElementById('oo'); 
d.classList;  #获得这个标签的class属性的所有的值
d.classList.add('xx2');  #添加class值
d.classList.remove('xx2'); #删除class值
d.classList.contains('xx2');  #判断是否有某个class值,有返回true,没有返回false
d.classList.toggle('xx2');  #有就删除,没有就增加

css操作

var d = document.getElementById('oo');
d.style.backgroundColor = 'deeppink';  有横杠的css属性,写法要去掉横杠,并且横杠后面的单词首字母大写
d.style.height = '1000px'

事件

绑定事件的方式有两种

方式1:

<div id="d1" class="c1" onclick="f1();"></div>

<script>
    function f1() {
        var d = document.getElementById('d1');
        d.style.backgroundColor = 'yellow';
    }

</script>

方式2

	<div id="d1" class="c1"></div>

    var d = document.getElementById('d1');
    d.onclick = function () {
        d.style.backgroundColor = 'yellow';
    }


事件里面的this

绑定方式1:

this表示当前标签对象
<div id="d1" class="c1" onclick="f1(this);"></div>
function f1(ths) {
        // var d = document.getElementById('d1');
        // d.style.backgroundColor = 'yellow';
        ths.style.backgroundColor = 'yellow';

        var d = document.getElementById('d2');
        d.style.backgroundColor = 'yellow';
    }

方式2:

    <div id="d1" class="c1"></div>
    
    var d = document.getElementById('d1');
    d.onclick = function () {
        this.style.backgroundColor = 'yellow';
        // d.style.backgroundColor = 'yellow'; //this表示当前标签对象
    }


onblur和onfocus事件

 var inp = document.getElementById('username');
    inp.onfocus = function () {
        var d = document.getElementById('d1');
        d.style.backgroundColor = 'pink';
    };
    // onblur 失去光标时触发的事件

    inp.onblur = function () {
        var d = document.getElementById('d1');
        d.style.backgroundColor = 'green';
    };

onchange事件,域内容发生变化时触发

<select name="" id="jishi">
    <option value="1">太白</option>
    <option value="2">alex</option>
    <option value="3">沛齐</option>

</select>

// onchange事件,内容发生变化时触发的事件
    var s = document.getElementById('jishi');
    s.onchange = function () {
    	//this.options  select标签的所有的option标签
    	//this.selectedIndex被选中的标签在所有标签中的索引值
        console.log(this.options[this.selectedIndex].innerText + '搓的舒服');
    }
    
    
用户名:<input type="text" id="username">    

    //input标签绑定onchange事件
    var inp = document.getElementById('username');
    inp.onchange = function () {
        console.log(this.value);  
    };    


样式操作

样式类操作

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

示例代码
	$('.c1').addClass('c2');
	$('.c1').addClass('c2');
	$('.c1').hasClass('c2');
	$('.c1').toggleClass('c2');

css样式

原生js
	标签.style.color = 'red';
jquery
	$('.c1').css('background-color','red');  
	同时设置多个css样式
	$('.c1').css({'background-color':'yellow','width':'200px'})

位置操作

查看位置
$('.c2').position();  //查看相对位置 
	{top: 20, left: 20}
$('.c2').offset();    //查看距离窗口左上角的绝对位置
	{top: 28, left: 28}
设置位置
	$('.c2').offset({'top':'20','left':'40'});
	

jQuery绑定点击事件的写法

    原生js绑定点击事件
    // $('.c1')[0].onclick = function () {
    //     this.style.backgroundColor = 'green';
    // }
jquery绑定点击事件
    $('.c1').click(function () {
        $(this).css('background-color','green');
    })

点击事件和滚动事件的示例代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .c1{
            background-color: red;
            height: 100px;
             100px;
        }
        .c2{
            background-color: green;
            height: 1000px;
             100px;
        }
        .c3{
            background-color: blue;
            height: 1000px;
             100px;
        }
        .s1{
            position: fixed;
            left:20px;
            bottom: 20px;
            height: 40px;
             80px;
            background-color: purple;
            line-height: 40px;
            text-align: center;

        }
        .s1 a{
            color: white;
            font-size: 14px;
            text-decoration: none;
        }
        .hide{
            display: none;
        }


    </style>
</head>
<body>
<!--<a name="top">这里是顶部</a>-->
<!--<a>这里是顶部</a>-->
<span>顶部位置</span>
<div class="c1"></div>

<button class="change-postion">走你</button>

<div class="c2"></div>
<div class="c3"></div>

<span class="s1 hide">
    <!--<a href="#top">返回顶部</a>-->
    <span>返回顶部</span>

</span>


<script src="jquery.js"></script>
<script>
	//点击事件来改变标签位置
    $('.change-postion').click(function () {
        $('.c1').offset({top:200,left:200});
    });
    
	//滚动事件,监听滚动距离来显示或者隐藏标签
    $(window).scroll(function () {
        console.log($(window).scrollTop());
        if ($(window).scrollTop() >=200){
            $('.s1').removeClass('hide');
        }else {
            $('.s1').addClass('hide');
        }
    });
    
	// 回到顶部,scrollTop设置值
    $('.s1').click(function () {
        $(window).scrollTop(0);
    })

</script>

</body>
</html>

尺寸

$('.c1').height();  //content 高度
$('.c1').width();   //content 宽度
$('.c1').innerHeight();//content高度+padding高度
$('.c1').innerWidth(); //content宽度+padding宽度
$('.c1').outerHeight();//content高度+padding高度 + border高度
$('.c1').outerWidth();//content宽度+padding宽度+ border宽度


示例:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .c1{
             100px;
            height: 100px;
            border: 2px solid red;
            background-color: green;
            padding: 20px 30px;
        }
    </style>
</head>
<body>
<div class="c1"></div>

<script src="jquery.js"></script>
</body>
</html>

文本操作

html()//取得第一个匹配元素的html内容,包含标签内容
html(val)//设置所有匹配元素的html内容,识别标签,能够表现出标签的效果

text()// 取得所有匹配元素的内容,只有文本内容,没有标签
text(val)//设置所有匹配元素的内容,不识别标签,将标签作为文本插入进去
示例:
$('.c1').text('<h3>你好,太白</h3>');
$('.c1').html('<h3>你好,太白</h3>');

值操作

获取值
	input type='text'的标签--$('#username').val();
	input type='radio'标签获取被选中的标签的值 --- $(':radio:checked').val();
	input type='checkbox'标签获取被选中的标签的值 --- 直接$(':checkbox:checked').val();是不行的,需要循环取值  
		var d = $(':checkbox:checked');
		for (var i=0;i<d.length;i++){
			console.log(d.eq(i).val());
		}
		
	单选select --- $('#city').val();
	多选select --- $('#author').val(); // ["2", "3"]	

设置值
	input type='text'的标签 --- $('#username').val('李杰');
	input type='radio'标签 ---  $('[name="sex"]').val(['3']);
			如果 $('[name="sex"]').val('3'),所有标签的值都变成了'3';
	input type='checkbox'设置值 --- $('[name="hobby"]').val(['2','3'])
	单选select --- $('#city').val('1');  option value='1'
	多选select --- $('#author').val(['2','3'])
	

属性操作

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

示例:
	设置单个属性
		$('.c1').attr('xx','oo');
	设置多个属性
		$('.c1').attr({'age':'18','sex':'alex'});
	查看属性
		$('.c1').attr('属性名');
    	$('.c1').attr('xx');
    删除属性
    	$('.c1').removeAttr('xx');

prop -- 针对的是checkedselecteddisabled..

查看标签是否有checked属性,也就是是否被选中
	    attr $(':checked').attr('checked'); //checked -- undefined
	    prop $(':checked').prop('checked'); //true  -- false
		
		通过设置属性的方式来设置是否选中:
			$(':radio').eq(2).prop('checked',true);  true和false不能加引号
			$(':radio').eq(2).prop('checked',false);

简单总结:
	1.对于标签上有的能看到的属性和自定义属性都用attr
	2.对于返回布尔值的比如checkbox、radio和option的是否被选中或者设置其被选中与取消选中都用prop。
	具有 true 和 false 两个属性的属性,如 checked, selected 或者 disabled 使用prop(),其他的使用 attr()

文档处理

添加到指定元素内部的后面
	$(A).append(B)// 把B追加到A
	$(A).appendTo(B)// 把A追加到B
	#添加字符串照样能识别标签  *****
	$('#d1').append('<a href="http://www.jd.com">京东</a>');
添加到指定元素内部的前面
	$(A).prepend(B)// 把B前置到A
	$(A).prependTo(B)// 把A前置到B
	示例
		$('a').prependTo($('div'));

添加到指定元素外部的后面
	$(A).after(B)// 把B放到A的后面
	$(A).insertAfter(B)// 把A放到B的后面

添加到指定元素外部的前面
	$(A).before(B)// 把B放到A的前面
	$(A).insertBefore(B)// 把A放到B的前面
	
移除和清空元素
	remove()// 从DOM中删除所有匹配的元素。
	empty()// 删除匹配的元素集合中所有的子节点,包括文本被全部删除,但是匹配的元素还
	$('div').remove();
	$('div').empty();

替换
	replaceWith()
	replaceAll()
	示例:
		var a = document.createElement('a')
		a.href = 'http://www.baidu.com';
		a.innerText = 'xxx';
		
		$('span').replaceWith(a);
		$(a).replaceAll('span');
		
clone()克隆
	<button class="btn">屠龙宝刀,点击就送!</button>	

    $('.btn').click(function () {
        // var a = $(this).clone(); //克隆标签
        var a = $(this).clone(true);  //连带事件一起克隆
        $(this).after(a);

    })

事件

事件绑定方式

<script src="jquery.js"></script>
<script>
    //方式1
    // $('#d1').click(function () {
    //     $(this).css({'background-color':'green'});
    // });
    //方式2
    $('#d1').on('click',function () {
        $(this).css({'background-color':'green'});
    })

</script>

常用事件

click  左键点击事件
    //获取光标触发的事件
    $('[type="text"]').focus(function () {
        $('.c1').css({'background-color':'black'});
    });
    //失去光标(焦点)触发的事件
    $('[type="text"]').blur(function () {
        $('.c1').css({'background-color':'purple'});
    });

    //域内容发生改变时触发的事件
    $('select').change(function () {
        $('.c1').toggleClass('cc');
    });

    //鼠标悬浮触发的事件
    // $('.c1').hover(
    //     //第一步:鼠标放上去
    //     function () {
    //         $(this).css({'background-color':'blue'});
    //     },
    //     //第二步,鼠标移走
    //     function () {
    //         $(this).css({'background-color':'yellow'});
    //     }
    // )

    // 鼠标悬浮  等同于hover事件
    // 鼠标进入
    // $('.c1').mouseenter(function () {
    //     $(this).css({'background-color':'blue'});
    // });
    // 鼠标移出
    //  $('.c1').mouseout(function () {
    //     $(this).css({'background-color':'yellow'});
    // });
	
    // $('.c2').mouseenter(function () {
    //     console.log('得港绿了');
    // });
    // 鼠标悬浮事件
    // $('.c2').mouseover(function () {
    //     console.log('得港绿了');
    // });
    // mouseover 和 mouseenter的区别是:mouseover事件是如果该标签有子标签,那么移动到该标签或者移动到子标签时会连续触发,mmouseenter事件不管有没有子标签都只触发一次,表示鼠标进入这个对象


//键盘按下触发的事件  eevent事件对象
    $(window).keydown(function (e) {
        // console.log(e.keyCode); //每个键都有一个keyCode值,通过不同的值来触发不同的事件
        if (e.keyCode === 37){
            $('.c1').css({'background-color':'red'});
        }else if(e.keyCode === 39){
            $('.c1').css({'background-color':'green'});
        }
        else {
            $('.c1').css({'background-color':'black'});
        }
    })
    // 键盘抬起触发的事件
    $(window).keyup(function (e) {
        console.log(e.keyCode);
    })

	
	input事件:
        22期百度:<input type="text" id="search">
        <script src="jquery.js"></script>
        <script>
            $('#search').on('input',function () {
                console.log($(this).val());
            })

        </script>


事件冒泡

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        #d1{
            background-color: red;
            height: 200px;
        }
        #d2{
            background-color: green;
            height: 100px;
             100px;
        }

    </style>

</head>
<body>

<div id="d1">
    <div id="d2"></div>

</div>


<script src="jquery.js"></script>
<script>
    $('#d1').click(function () {
        alert('父级标签');
    });
    $('#d2').click(function () {
        alert('子级标签');
    });
    

</script>

</body>
</html>

阻止后续事件发生

    $('#d1').click(function () {
        alert('父级标签');
    });
    $('#d2').click(function (e) {
        alert('子级标签');
        return false;
        // e.stopPropagation();
    });


事件委托

事件委托是通过事件冒泡的原理,利用父标签去捕获子标签的事件,将未来添加进来的某些子标签自动绑定上事件。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<div id="d1">
    <button class="c1">爱的魔力转圈圈</button>

</div>

<script src="jquery.js"></script>
<script>
    // $('.c1').on('click',function () {
    //     alert('得港被雪飞调教了,大壮很难受!');
    //     var btn = document.createElement('button');
    //     $(btn).text('爱的魔力转圈圈');
    //     $(btn).addClass('c1');
    //     console.log(btn);
    //     //添加到div标签里面的后面
    //     $('#d1').append(btn);
    //
    // });

	#将'button' 选择器选中的标签的点击事件委托给了$('#d1');
    $('#d1').on('click','button',function () {
        alert('得港被雪飞调教了,大壮很难受!');
        var btn = document.createElement('button');
        $(btn).text('爱的魔力转圈圈');
        $(btn).addClass('c1');
        console.log(btn);
        console.log($(this)) //还是我们点击的那个button按钮
        //添加到div标签里面的后面
        $('#d1').append(btn);

    });


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

页面载入和window.onload

1. jquery文件要在使用jquery的代码之前引入

2. js代码最好都放到body标签下面或者里面的最下面来写

3.window.onload
	// window.onload = function () {
    //     $('.c1').click(function () {
    //         $(this).css({'background-color':'green'});
    //     })
    // }
4.页面载入,$(function (){alert('xx');}) -- $(document).ready(function(){});
	页面载入与window.onload的区别
    1.window.onload()函数有覆盖现象,必须等待着图片资源加载完成之后才能调用
    2.jQuery的这个入口函数没有函数覆盖现象,文档加载完成之后就可以调用(建议使用此函数)
    
示例:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="jquery.js"></script>
    <script>
        // 等待整个页面中的内容全部加载完成之后,触发window.onload对应的函数里面的内容
        // window.onload 有覆盖现象,会被后面的window.onload给重新赋值
        // window.onload = function () {
        //     $('.c1').click(function () {
        //         $(this).css({'background-color':'green'});
        //     })
        // }

        
        $(function () {
            $('.c1').click(function () {
                $(this).css({'background-color':'green'});
            })
        });

    </script>
    <script src="xx.js"></script>


    <style>
        .c1{
            background-color: red;
            height: 200px;
             200px;
        }
    </style>
</head>
<body>

<div class="c1"></div>

<img src="" alt="">


</body>

</html>
    


each循环

循环标签对象数组
$('li').each(function(k,v){
	console.log(k,v);
});

循环普通数组
var d1 = ['aa','bb','cc'];
$.each(d1,function(k,v){
	console.log(k,v);
})

跳出循环  return false; 类似于break  #取标签的
$('li').each(function(k,v){
	console.log(k,v.innerText);
	if (k === 1){
		return false;
	}
});

跳出本次循环  return; 类似于continue   #取标签的
$('li').each(function(k,v){
	
	if (k === 1){
		return;
	}
	console.log(k,v.innerText);
});


data

给标签对象添加数据,类似于添加了全局变量
	.data(key, value): 设置值
	.data(key)   取值
	.removeData(key) 删除值

插件(了解)

<script>
jQuery.extend({ //$.extend({})
  min:function(a, b){return a < b ? a : b;}, //自定义了一个min和max方法,min和max作为键,值是一个function
  max:function(a, b){return a > b ? a : b;}
});
jQuery.min(2,3);// => 2
jQuery.max(4,5);// => 5
$('div').min(1,2);不能通过标签对象来调用
</script>

<script>
  jQuery.fn.extend({  //给任意的jQuery标签对象添加一个方法
    check:function(){
      return this.each(function(){this.checked =true;});
    },
    uncheck:function(){
      return this.each(function(){this.checked =false;});
    }
  });
// jQuery对象可以使用新添加的check()方法了。
$("input[type='checkbox']").check();
</script>



原文地址:https://www.cnblogs.com/dxxpython/p/11505296.html