jQuery

简称:"JQ"

​ jQuery是一个快速、简洁的[JavaScript](https://baike.baidu.com/item/JavaScript/321142)框架(库,是继[Prototype](https://baike.baidu.com/item/Prototype/14335188)之后又一个优秀的JavaScript代码库(框架)于2006年1月由[John Resig](https://baike.baidu.com/item/John Resig/6336344)发布)

​ jQuery设计的**宗旨**是“write Less,Do More”(写的少,干得多)

​ jQuery封装JavaScript常用的功能代码,提供一种简便的JavaScript[设计模式](https://baike.baidu.com/item/设计模式/1212549),优化[HTML](https://baike.baidu.com/item/HTML/97049)文档操作、事件处理、动画设计和[Ajax](https://baike.baidu.com/item/Ajax/8425)交互

​ jQuery的核心特性可以总结为:具有**独特的链式语法**和短小清晰的多功能接口;具有高效灵活的[CSS选择器](https://baike.baidu.com/item/CSS选择器/2819686),并且可对[CSS](https://baike.baidu.com/item/CSS/5457)选择器进行扩展;拥有便捷的插件扩展机制和丰富的插件。jQuery兼容各种主流浏览器,如[IE](https://baike.baidu.com/item/IE/69103) 6.0+、FF 1.5+、[Safari](https://baike.baidu.com/item/Safari/597) 2.0+、Opera 9.0+等。

插件:是封装好的一个独立的功能代码,可供开发人员完成某个功能时直接使用的

库:是将很多功能代码封装到一起的,并不能帮助我们完成一整个项目

框架:可以帮助我们完成一整套的项目开发

# 一、jQuery起步

官网:http://www.jquery.com

手册:离线版(.chm或者PDF)

​ 在线版:http://www.jq22.com

## 1.1 安装jquery

a. 下载jQuery库文件

​ 从jq22.com网站上边下载

b. 导入jQuery库文件

```html
<!-- 第一种方法: 将jquery文件下载到本地再引入 -->
<script src="./jquery-3.5.1.min.js"></script>
<!-- 第二种:使用cdn的方式 在线的juqery文件 要求电脑必须连网 会导致网页加载速度变慢-->
<script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-3.5.1.min.js"></script>
```

## 1.2 入口函数

又称作 预加载函数

```html
<script>
// 第一种写法
$(document).ready(function(){
// 在这里写你的代码...
});
// 第二种写法
$(function(){
// 在这里写你的代码...
})
</script>
```

JavaScript中获取html元素的方法

document.getElementById()

document.getElementsByTagName()

document.getElementsByName()

document.getElementsByClassName()

jQuery中获取对象的方法

​ $()

## 1.3 jQuery获取DOM元素

$() 来获取对象(DOM元素)

**面试题**

js的dom对象和jQuery中的Dom对象 如何互相转化

js dom对象 转化为jquery dom对象 : 只需给js dom对象加上$()

jquery dom对象如何转化为js的dom对象: jq对象[下标]

# 二、选择器

​ 选择器就是帮助我们来选取元素的,比如说在css中的选择器,选择好元素后进行样式的修饰,在Jquery中选择器选好元素后,是需要进行DOM操作的

​ 大部分的css选择器都可以应用到jQuery选择器中

​ CSS的选择器分类

* 基础选择器
* *号选择器
* 标签(元素)选择器
* 类选择器 .类名
* id选择器 #id值
* 复合选择器
* 后代选择器 E F 查找的是E元素里边的F元素
* 子集选择器 E>F 查找的是E元素的子集F元素
* 紧邻兄弟选择器
* 同辈兄弟选择器
* 多重选择器
* 伪类选择器
* :hover
* :active
* :visited
* :link
* :first-child
* :last-child
* :nth-child()
* :not()
* :nth-of-type()
* 伪对象选择器
* ::before
* ::after
* ::first-line
* ::first-letter

# 三、样式

1. css() 为dom对象设置样式

**第一种用法**: css(属性名称,属性值) 一次只能设置一个样式

```html
<div class="demo">
设置一条样式
</div>
<script>
$('.demo').css('color','blue').css('background-color','red')
</script>
```

**第二种用法**:css({属性名称:属性值,属性名称:值....})

<div class="demo">
设置一条样式
</div>
<script>
// 写法一
var s = {
color:'blue',
backgroundColor:'cyan',
fontSize:'24px'
}
$('.demo').css(s)
// 写法二
$('.demo').css({
'color':'blue',
'background-color':'cyan',
'font-size':'24px'
})
</script>

# 四、DOM操作

1. append() 向匹配到的父元素末尾追加子元素

```html
<div class="add">append</div>
<script>
/*
1. 创建dom元素
jQ: $('<a href="http://www.baidu.com">百度</a>')
2. 获取父元素
$('.add')
3. 使用append()追加
父元素对象.append(要追加的子元素)
*/
var obj = $('<a href="http://www.baidu.com">taobao</a>')
$('.add').append(obj)
</script>
```

2. appendTo() 把子元素追加到父元素中

```html
<div class="add">append</div>
<script>
var obj = $('<a href="http://www.baidu.com">taobao</a>')
obj.appendTo($('.add'))
</script>
```

3. prepend() 向父元素的开头添加子元素

```html
<div class="add">prepend</div>
<script>
var obj = $('<a href="http://www.baidu.com">taobao</a>')
$('.add').prepend(obj)
//结果: <div class="add"><a href="http://www.baidu.com">taobao</a>prepend</div>
</script>
```

4. prependTo() 元素前置到另一个、指定的元素元素集合中。

```html
<div class="parent">宝剑锋从磨砺出</div>
<span id="child">梅花香自苦寒来</span>
<script>
$(function(){
$('#child').prependTo($('.parent'))
// 效果:<div class="parent"> <span id="child">梅花香自苦寒来</span>宝剑锋从磨砺出</div>
})
</script>
```

5. remove() 移出匹配到的元素

```html
<p>苹果01</p>
<p class="two">苹果02</p>
<p>苹果03</p>
<script>
//$('p').remove() // remove()方法不传递参数的情况下 表示删除匹配到的所有元素
$('p').remove('.two') // 移除类名等于two的p标签
</script>
```

# 五、属性

1. attr() 获取或者设置属性

```html
<div class="demo" title="这是一个测试代码">attr方法 </div>
<script>
// attr() 获取匹配元素属性的值
var res = $('.demo').attr('title')
// attr() 设置匹配元素的属性值
$('.demo').attr('title','this is a test code') // 只修改一个属性值
$('.demo').attr({name:'code',id:'test'}) // 设置多个属性
</script>
```

2. removeAttr() 移除属性

```html
<div class="demo" title="这是一个测试代码" id='test'>attr方法 </div>
<script>
$('.demo').removeAttr('id')
</script>
```

注意:只接受一个参数

3. addClass() 添加类名

```html
<div id="demo"> 白日依山尽</div>
<script>
$(this).addClass('active')
</script>
```

4. removeClass() 移出类名的

```html
<div id="demo" class='active'> 白日依山尽</div>
<script>
$(this).removeClass('active')
</script>
```

5. toggleClass() 当某个类名存在时则删除,不存在时则添加

```html
<div id="demo"> 白日依山尽</div>
<script>
$('#demo').click(function(){
$(this).toggleClass('active')
</script>
```

6. html() 获取或者设置匹配元素的内容(包含标签)

```html
<div class="content"><span>作者:王之涣</span><br>白日依山尽</div>
<script>
$(function(){
// html() 获取元素的内容 和JavaScript中的innerHTML相同的
var con = $('.content').html()
// console.log(con);
// html() 设置匹配元素的内容
$('.content').html('去<a href="http://jd.com" target="_blank">京东</a>网购')
})
</script>
```

7. text()

```html
<div class="content"><span>作者:王之涣</span><br>白日依山尽</div>
<script>
$(function(){
// text() 获取元素的文本内容不包含标签 和JavaScript中innerText的相同的
var con = $('.content').text()
// console.log(con);
// text() 设置匹配元素的文本内容
$('.content').text('去<a href="http://jd.com" target="_blank">京东</a>网购')
})
</script>
```

**注意:**text()和html() 最大的区别,text()只处理文本内容,不能识别标签,而html() 方法可以识别标签

​ text()和html() 方法不能够用于获取或者设置表单标签的值,除了button和textarea这两个标签之外

8. val() 获取或者设置表单标签的值

```html
<input type="text" id="user" value="zhangsan">
<script>
$(function(){
// val() 获取表单标签的值
var res = $('#user').val()
// console.log(res);
// val() 设置匹配元素的value值
$('#user').val('张三')
})
</script>
```

9. prop() 设置或者获取元素的属性值
10. removeProp() 移出属性

**attr() 和prop()的应用场景**

prop()方法经常用于标签属性值有true和false的时候使用,例如:checked、seleted、readonly、disabled

# 六、事件

## 6.1 鼠标事件

语法: 事件对象(dom元素).事件名称(function(){})

1. 鼠标单击事件 click()

```html
<style>

.clk{
width: 200px;
height: 180px;
background-color: red;
}
.active{
background-color: blue;
}

</style>

<div class="clk"></div>
<script>
$(function(){
$('.clk').click(function(){
$('.clk').toggleClass('active')
})
})

</script>
```

2. 鼠标移出事件 mouseout()
3. 鼠标滑过事件 mouseover()

## 6.2 表单事件

1. 聚焦事件(获得焦点事件) focus()

2. 失去焦点事件 blur()

3. 内容改变事件 change()

4. 表单提交事件 submit()

注意: 对象是form标签

## 6.3 键盘事件

1. 键盘按下事件 keydown()
2. 键盘弹起事件 keyup()
3. 键盘按压事件 keypress()

键盘码

## 6.4 jq中独有的事件方法

1. 事件绑定方法 bind()

2. 事件解绑方法 unbind()

3. 只触发一次事件方法 one()

4. on()

需要事件委托的元素的事件绑定 一般都是动态创建的dom元素需要事件委托

# 七、动画效果

## 7.1 显示和隐藏

show() 显示

```html
<button>显示</button>
<button>隐藏</button>
<div class="show">显示</div>
<script>
$(function(){
// 单击显示按钮 div显现
$('button:eq(0)').click(function(){
$('.show').show(2000)
})
})
</script>
```

hide() 隐藏

```html
<button>显示</button>
<button>隐藏</button>
<div class="show">显示</div>
<script>
$(function(){
// 单击隐藏按钮 div消失
$('button:eq(1)').click(function(){
$('.show').hide(2000,function(){
$(this).show(1000)
})
})
})
</script>
```

 

## 7.2 上拉和下拉

slideUp() 上拉

slideDown() 下拉

slideToggle() 如果元素未显示 下拉 显示的 就是上拉

```html
<button>上拉</button>
<button>下拉</button>
<button>toggle</button>
<div class="show">div标签</div>
<script>
$(function(){
$("button:eq(0)").click(function(){
$(".show").slideUp(2000)
})
$("button:eq(1)").click(function(){
$(".show").slideDown(2000)
})
$("button:eq(2)").click(function(){
$(".show").slideToggle(2000)
})
})
</script>
```

## 7.3 淡入和淡出

fadeIn() 淡入

fadeOut 淡出

fadeToggle()

```html
<button>淡入</button>
<button>淡出</button>
<button>toggle</button>
<div class="show">div标签</div>
<script>
$(function(){
$("button:eq(0)").click(function(){
$(".show").fadeIn(2000)
})
$("button:eq(1)").click(function(){
$(".show").fadeOut(2000)
})
$("button:eq(2)").click(function(){
$(".show").fadeToggle(2000)
})
})
</script>
```

## 8.4 自定义动画

animate()

```html
<style>
.show{
width: 240px;
height: 180px;
background-color: red;
}
</style>
<body>

<div class="show">div标签</div>
<script>
$(function(){
$(".show").animate({
"margin-top":'200px',
"margin-left":'300px'
},2000)
})
</script>
```

# 八、网页效果

## 8.1 选项卡

## 8.2 导航固定

## 8.3 侧边栏

## 8.4 轮播图

## 8.5 发表评论

## 8.6 表单验证

## 8.7 二级导航

## 8.8 无缝滚动

## 8.9 选择移除(水果)

## 8.10 三级联动

# 九 Ajax

## 9.1 ajax 原理

## 9.2 js原生ajax

## 9.3 jQuery 中的ajax

## 9.4 ajax练习

### 9.4.1 三级联动(ajax)

### 9.4.2 商品列表(本地接口ajax)

### 7.4.3 手机号归属地查询(ajax)

第三方接口

### 7.4.4 天气预报(ajax)

第三方接口

 

#