jQuery介绍
什么是jQuery
1.jQuery是一个轻量级的、兼容多浏览器的JavaScript库。
2.jQuery使用户能够更方便地处理HTML Document、Events、实现动画效果、方便地进行Ajax交互,能够极大地简化JavaScript编程。它的宗旨就是:“Write less, do more.“
jQuery的优势
- 一款轻量级的JS框架。jQuery核心js文件才几十kb,不会影响页面加载速度。
- 丰富的DOM选择器,jQuery的选择器用起来很方便,比如要找到某个DOM对象的相邻元素,JS可能要写好几行代码,而jQuery一行代码就搞定了,再比如要将一个表格的隔行变色,jQuery也是一行代码搞定。
- 链式表达式。jQuery的链式操作可以把多个操作写在一行代码里,更加简洁。
- 事件、样式、动画支持。jQuery还简化了js操作css的代码,并且代码的可读性也比js要强。
- Ajax操作支持。jQuery简化了AJAX操作,后端只需返回一个JSON格式的字符串就能完成与前端的通信。
- 跨浏览器兼容。jQuery基本兼容了现在主流的浏览器,不用再为浏览器的兼容问题而伤透脑筋。
- 插件扩展开发。jQuery有着丰富的第三方的插件,例如:树形菜单、日期控件、图片切换插件、弹出窗口等等基本前端页面上的组件都有对应插件,并且用jQuery插件做出来的效果很炫,并且可以根据自己需要去改写和封装插件,简单实用。
原生DOM的写法就是写JS代码,而以后我们多数都用jQuery来写,因为jQuery的优势很多,看上面,并且查找标签的方式有很多,比原生的DOM丰富的多,很便利,还有重要的一点就是不需要考虑浏览器的兼容性,因为jQuery做到了各大浏览器兼容的功能。
jQuery内容
- 选择器
- 筛选器
- 样式操作
- 文本操作
- 属性操作
- 文档处理
- 事件
- 动画效果
- 插件
- each、data、Ajax
下载链接:jQuery官网,首先需要下载这个jQuery的文件,然后在HTML文件中引入这个文件,就可以使用这个文件中帮我们提供的jquery的接口了。
中文文档:jQuery AP中文文档
用压缩的也行,不用压缩的也行,文件都不大,对页面内容的加载速度差的不是很多,如果文件大很多,就考虑压缩版的,一般线上都是压缩版的,尽量提高页面加载速度。
jQuery的引用
jQuery的引入方式有两种:
1.直接下载文件到本地(最常用),从本地中导入
2.使用文件的网络地址,就像我们img标签里面的那个src的用法差不多。
引入完之后,就可以直接使用jQuery的语法来写了,但是还是要写在script标签里面,并且要注意引入顺序,先引入文件,再在script标签里面写jQuery的代码,先导入再使用。
会报错:在浏览器的调试窗口的console里面可以看到,记住这个昂,以后出现这个错误,不能问昂~~~
jQuery版本
- 1.x:兼容IE678,使用最为广泛的,官方只做BUG维护,功能不再新增。因此一般项目来说,使用1.x版本就可以了,最终版本:1.12.4 (2016年5月20日)
- 2.x:不兼容IE678,很少有人使用,官方只做BUG维护,功能不再新增。如果不考虑兼容低版本的浏览器可以使用2.x,最终版本:2.2.4 (2016年5月20日)
- 3.x:不兼容IE678,只支持最新的浏览器。需要注意的是很多老的jQuery插件不支持3.x版。目前该版本是官方主要更新维护的版本,我们学习就用3.几的就行了,工作中如果需要兼容IE678,就用1.几版本的就行,2.几版本的就别用了。
维护IE678是一件让人头疼的事情,一般我们都会额外加载一个CSS和JS单独处理。值得庆幸的是使用这些浏览器的人也逐步减少,PC端用户已经逐步被移动端用户所取代,如果没有特殊要求的话,一般都会选择放弃对678的支持。
jQuery对象
先看一下jQuery语法和选择器我们再回来看这个对象。
jQuery对象就是通过jQuery包装DOM对象后产生的对象。jQuery对象是 jQuery独有的。如果一个对象是 jQuery对象,那么它就可以使用jQuery里提供的方法:例如$(“#i1”).html()。
$("#i1").html()的意思是:获取id值为 i1的元素的html代码。其中 html()是jQuery里的方法。
相当于: document.getElementById("i1").innerHTML;
虽然 jQuery对象是包装 DOM对象后产生的,但是 jQuery对象无法使用 DOM对象的任何方法,同理 DOM对象也没不能使用 jQuery里的方法。
一个约定,我们在声明一个jQuery对象变量的时候在变量名前面加上$:
var $variable = jQuery对像 var variable = DOM对象 $variable[0]//jQuery对象转成DOM对象,通过一个jQuery对象+[0]索引零,就变成了DOM对象,就可以使用JS的代码方法了,DOM对象转换成jQuery对象:$(DOM对象),通过$符号包裹一下就可以了
拿上面那个例子举例,jQuery对象和DOM对象的使用:
$("#i1").html();//jQuery对象可以使用jQuery的方法
$("#i1")[0].innerHTML;// DOM对象使用DOM的方法
示例:
// DOM对象以及操作方法 var d1 = document.getElementById('d1'); //<div >div标签</div> d1.innerText = '你这不废话么'; // jQuery对象以及操作方法 var d2 = $('#d1'); // jQuery.fn.init [div#d1] 返回一个数组 d2.text('我就是div标签'); jQuery.fn.init [div#d1] // DOM对象与jQuery对象相互转化 // DOM--->jQuery $(DOM对象); 数组的形式 //jQuery--->DOM jQuery对象[0]
jQuery基础语法
$(selector).action() #$(selector)找到某个标签,.action()通过这个标签对象调用它的一些方法。
jQuery查找标签的方式很多并且分类不清晰,有一部分与css查询标签的方式比较类似,此时我将其大致两大类:基础查询与进阶查询。每一种查询都涵盖进一步筛选的方法,所以需要大家多练习,加以区分。
基础查询
基础查询就是直接找到目标标签,因为有些标签唯一性比较高,比如设置了id或者设置了专有的属性(input标签的type属性)等等,这样我们就可以通过基础查询的语法直接锁定目标标签了。
基本选择器(同css)
id选择器:
$("#id") #不管找什么标签,用什么选择器,都必须要写$(""),引号里面再写选择器,通过jQuery找到的标签对象就是一个jQuery对象,用原生JS找到的标签对象叫做DOM对象,看我们上面的jQuery对象部分的内容
标签选择器:
$("tagName")
class选择器:
$(".className")
配合使用:
$("div.c1") // 找到有c1 class类的div标签
所有元素选择器:
$("*")
组合选择器:
$("#id, .className, tagName")
代码示例
// 基本选择器 // id选择器 $('#d1'); // 标签选择器 $('div'); // class选择器 var tag_list = $(".c1"); // tag_list是jQuery对象,含有两个class为c1的DOM标签 // 这样操作两个标签全部都改变了 tag_list.text('我们都是div标签'); // 只想改变第一个标签,我要找到DOM对象要不就通过DOM对象操作,要不就转化成jQuery在操作 // 转化成jQuery在更改标签内容 $(tag_list[0]).text('我要和你不一样'); //配合使用: 找到所有class属性为c1的div标签 $('div.c1'); // 所有元素选择器: $('*'); // 组合选择器: $('a,#h');
层级选择器:(同css)
x和y可以为任意选择器
$("x y");// x的所有后代y(子子孙孙)
$("x > y");// x的所有儿子y(儿子)
$("x + y")// 找到所有紧挨在x后面的y
$("x ~ y")// x之后所有的兄弟y
基本筛选器
虽然文档说这是基本筛选器,但是这么称呼容易与上面的进行混淆,所谓的基本筛选器就是在上面的选择器上在做进一步过滤而已。
:first // 第一个 :last // 最后一个 :eq(index)// 索引等于index的那个元素 :even // 匹配所有索引值为偶数的元素,从 0 开始计数 :odd // 匹配所有索引值为奇数的元素,从 0 开始计数 :gt(index)// 匹配所有大于给定索引值的元素 :lt(index)// 匹配所有小于给定索引值的元素 :not(元素选择器)// 移除所有满足not条件的标签 :has(元素选择器)// 选取所有包含一个或多个标签在其内的标签(指的是从后代元素找)
例子:
示例代码:
<ul>
<li>小黑</li>
<li class="c1">小东北</li>
<li >元宝</li>
<li>小猪</li>
<li >大湿兄<span></span></li>
<li>金天</li>
<li>太白</li>
</ul>
// 基本筛选器
// first 所有li标签的第一个
$('li:first');
// last 所有li标签的最后一个
$('li:last');
// eq(index) 索引值等于index的标签
$('li:eq(3)');
// even 所有索引值为偶数的标签
$('li:even');
// even 所有索引值为奇数的标签
$('li:odd');
// gt(index) 所有索引值大于index的标签
$('li:gt(2)');
// lt(index) 所有索引值小于index的标签
$('li:lt(2)');
// not(基本选择器) 所有不含满足条件的标签
$('li:not(.c1)'); // 所有不含有class为c1属性的li标签
// has(基本选择器) 所有后代中含有满足条件的标签
$('li:has(span)');
// not has 配合使用 所有后代中不含有span标签的li标签
$('li:not(:has(span))');
属性选择器
[attribute] [attribute=value]// 属性等于 [attribute!=value]// 属性不等于
示例代码:
// 示例,多用于input标签
<input type="text">
<input type="password">
<input type="checkbox">
$("input[type='checkbox']");// 取到checkbox类型的input标签
$("input[type!='text']");// 取到类型不是text的input标签
表单选择器
多用于找form表单里面出现的input标签,当然通过属性选择器找肯定也是没问题的,这样就是写着简单一些
:text :password
:file
:radio :checkbox
:submit :reset :button
示例代码:
<div type="text">啦啦</div>
用户名:<input type="text" disabled>
<p></p>
密码<input type="password">
<p></p>
<input type="radio" name="sex">男
<input type="radio" name="sex">女
<input type="radio" name="sex">任性
<p></p>
<input type="checkbox" name="hobby"> 抽烟
<input type="checkbox" name="hobby"> 喝酒
<input type="checkbox" name="hobby"> 烫头
$(':checkbox'); 所有的属性值为checkbox的input标签
$(':text'); 所有的属性值为text的input标签(只是input标签)
// 更多:
:text
:password
:file
:radio
:checkbox
:submit
:reset
:button
表单对象属性:
:enabled :disabled :checked :selected
示例代码:
<div type="text">啦啦</div> 用户名:<input type="text" disabled> <p></p> 密码<input type="password"> <p></p> <input type="radio" name="sex">男 <input type="radio" name="sex">女 <input type="radio" name="sex">任性 <p></p> <input type="checkbox" name="hobby"> 抽烟 <input type="checkbox" name="hobby"> 喝酒 <input type="checkbox" name="hobby"> 烫头 $(':disabled'); 不让修改的input标签 $(':checked'); 被选中的check标签(有坑) :enabled 找到可用的input标签(被disabled设置后即不可用)
其他例子:
找到可用的input标签
<form>
<input name="email" disabled="disabled" />
<input name="id" />
</form>
$("input:enabled") // 找到可用的input标签
select表单标签:
<p></p> <input type="checkbox" name="hobby"> 抽烟 <input type="checkbox" name="hobby"> 喝酒 <input type="checkbox" name="hobby"> 烫头 <select name="" > <option value="1">德玛西亚</option> <option value="2">勇者先锋</option> <option value="3">皇家社区</option> </select> $(":selected") // 找到所有被选中的option // 坑!如果你既有input标签的多选,又有select标签下面写会都找到: $('checked'); // 所以一般我们寻找input标签的checked都是这样: $('input:checked');
注意checked:
进阶查询
进阶查询就是你所找的目标标签他的标识度没有那么明显,此标签本身没有设置id属性或者其他专属属性,那么你就需要通过它周围的比较明显的好找的标签去周边或者父子级找寻此类标签了。
html代码:
<ul> <li>小黑</li> <li class="c1">小东北</li> <li id="l3">元宝</li> <li>小猪</li> <li id="l5"><a href="">大师兄</a></li> <li>金天</li> <li>太白</li> </ul>
向下面的兄弟查找
$('#l3').next(); // 下一个兄弟标签
$('#l3').nextAll(); // 下面所有的兄弟标签
$('#l3').nextUntil('#l5'); // 下面的兄弟标签直到找到id为l5的标签,不包含此标签
向上面的兄弟查找
$('#l5').prev(); // 上一个兄弟标签
$('#l5').prevAll(); // 上面所有的兄弟标签
$('#l5').prevUntil('#l3'); // 上面所有的兄弟标签直到找到id为l3的标签,不包含此标签
// 注意!!! prevUntil的顺序是自下而上。
向所有的兄弟查找
$('#l5').siblings(); // 所有的兄弟标签(除去自己以外)
$('#l5').siblings('.c1'); // 还可以进一步筛选,所有的兄弟标签中类为.c1属性兄弟标签
父级(更高级)查找
$('a').parent(); // 父级标签
$('a').parents(); // 从父级往上级查找直到html为止。
$('a').parentsUntil('body'); // 从父级往上查找到body结束,不包含body标签。
儿子查找
$('ul').children(); // 所有的儿子标签
$('ul').children('.c1'); // 还可以进一步筛选,所有的儿子标签中类为.c1属性儿子标签
find方法
$('ul').find('a'); // ul标签的后代中所有的a标签
$('ul a'); // 等价方法
filter方法
筛选出与指定表达式匹配的元素集合。这个方法用于缩小匹配的范围。用逗号分隔多个表达式。
$('li').filter('.c1'); // 所有的类属性为c1的li标签
$('li.c1'); // 等价方法
筛选方法
和前面使用冒号的一样 :first等,只不过冒号的那个是写在选择器里面的,而下面的这几个是方法,如此而已,就不多说了:
.first() // 获取匹配的第一个元素 .last() // 获取匹配的最后一个元素 .not() // 从匹配元素的集合中删除与指定表达式匹配的元素 .has() // 保留包含特定后代的元素,去掉那些不含有指定后代的元素。 .eq() // 索引值等于指定值的元素
// 示例代码
$('li').first();
$('li').last();
$('li').eq(3); // 索引为3的li标签
$('li').has('a'); // 后代中含有a标签的所有li标签
$('li').not('.c1'); // 不含有c1类属性的所有li标签
操作标签
样式操作
样式类(添加删除class类的值来修改样式)
addClass();// 添加指定的CSS类名。 removeClass();// 移除指定的CSS类名。 hasClass();// 判断样式存不存在 toggleClass();// 切换CSS类名,如果有就移除,如果没有就添加。
示例:开关灯和模态框
CSS(直接修改css的属性来修改样式)
css("color","red")//DOM操作:tag.style.color="red"
示例:
$("p").css("color", "red"); //将所有p标签的字体设置为红色
// 样式操作 // 类名操作 // 原生js操作示例: // var c = document.getElementsByClassName('c1'); // 数组!! // c[0].classList.add('c2'); // jQuery示例 // 增加一个类名 // $('.c1').addClass('c2'); // // 删除一个类名 // $('.c1').removeClass('c2'); // // 判断此标签是否含有某类名 // $('.c1').hasClass('c2'); // // 如果有此类名就移除,如果没有就添加 // $('.c1').toggleClass('c2'); // $('.c1').toggleClass('c2'); // css样式操作 // 原生js操作示例: // var c = document.getElementsByClassName('c1'); // c[0].style.backgroundColor = 'blue'; // jQuery示例 // 更改一个或者多个css属性 // $('.c1').css('background-color', 'blue'); // $('.c1').css({'width':'100','height':'50'});
位置操作
offset()// 获取匹配元素在当前窗口的相对偏移或设置元素位置 position()// 获取匹配元素相对父元素的偏移,不能设置位置 $(window).scrollTop() //滚轮向下移动的距离 $(window).scrollLeft() //滚轮向左移动的距离
.offset()方法允许我们检索一个元素相对于文档(document)的当前位置。
和 .position()的差别在于: .position()获取相对于它最近的具有相对位置(position:relative或position:absolute)的父级元素的距离,如果找不到这样的元素,则返回相对于浏览器的距离。看例子:
通过offset设置位置偏移
.cc{ width: 200px; height: 200px; background-color: #7fb8ff; position: relative; } .c2 { width: 50px; height: 50px; background-color: red; /*top:20px;*/ /*left:20px*/ } <div class="cc"> <div class="c1"> <div class="c2"></div> </div> </div> // offset() $('.c1').offset(); // 始终获取距离文档document的距离 // 也可以设置距离,设置距离也是距离文档位置设置 $('.c2').offset({'top':20,'left':20}); // position() // 只能获取标签距离,不能设置。 // 如果父级(或者更高级)标签具有position:relative或者absolute属性,则获取距离父级(更高级)标签的距离 // 如果没有,则获取距离document文档的距离 $('.c2').position();
.c1{ width: 200px; height: 200px; background-color: #7fb8ff; position: relative; } <div class="c1"></div> // 事件测试 // 原生js绑定事件 // var d = document.getElementsByClassName('c1'); // d[0].onclick = function () { // this.style.backgroundColor = 'red'; // } // jQuery绑定事件 // onclick简化为click // function函数放在click括号里面 // this是DOM对象,应该转化成成jQuery对象 $('.c1').click(function () { $(this).css('background-color','red'); })
示例1: 点击标签,让指定标签瞬移。
.c1{ width: 200px; height: 200px; background-color: red; } <div class="c1"></div> <button >单击</button> $('#but').click(function () { $('.c1').offset({top:500,left:600}) })
示例2:监测滚轮向下滑动超过指定位置,出现回到顶部的标签
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.c1{
width: 200px;
height: 200px;
background-color: red;
}
.c2{
width: 100%;
height: 800px;
background-color:blue;
}
.c3{
width: 100%;
height: 1000px;
background-color: #333333;
}
.s1{
width: 80px;
height: 40px;
background-color: blueviolet;
position: fixed;
left: 20px;
bottom: 20px;
text-align: center;
line-height: 40px;
}
.s1 a{
font-size: 14px;
color: white;
}
.hide {
display: none;
}
</style>
</head>
<body>
<!--<span >这是顶部</span>-->
<!--<div class="c1"></div>-->
<!--<button >单击</button>-->
<!--<div class="c2"></div>-->
<!--<div class="c3"></div>-->
<!--<span class="s1 hide"><a href="#top">回到顶部</a></span>-->
<!--回到顶部的第二种方式-->
<!--<span >这是顶部</span>-->
<div class="c1"></div>
<button >单击</button>
<div class="c2"></div>
<div class="c3"></div>
<span class="s1 hide"><a href="">回到顶部</a></span>
</body>
<script src="../jQuery.js"></script>
<script>
// 点击按钮 标签移动
// $('#but').click(function () {
// $('.c1').offset({top:500,left:600})
// })
// 滚轮监测 出现回到顶部按钮
$(window).scroll(function () {
console.log($(window).scrollTop());
if($(window).scrollTop() > 200){
$('.s1').removeClass('hide');
} else{
$('.s1').addClass('hide');
}
})
// 回到顶部的第二种方式:
$('.s1').click(function () {
$(window).scrollTop(0);
})
</script>
</html>