jQuery基本概念
学习目标:学会如何使用jQuery,掌握jQuery的常用api,能够使用jQuery实现常见的效果。
为什么要学习jQuery?
【01-让div显示与设置内容.html】
使用javascript开发过程中,有许多的缺点:
1. 查找元素的方法太少,麻烦。
2. 遍历伪数组很麻烦,通常要嵌套一大堆的for循环。
3. 有兼容性问题。
4. 想要实现简单的动画效果,也很麻烦
5. 代码冗余。
jQuery初体验
【02-让div显示与设置内容.html】
$(document).ready(function () {
$("#btn1").click(function () {
//隐式迭代:偷偷的遍历,在jQuery中,不需要手动写for循环了,会自动进行遍历。
$("div").show(200);
});
$("#btn2").click(function () {
$("div").text("我是内容");
});
});
优点总结:
1. 查找元素的方法多种多样,非常灵活
2. 拥有隐式迭代特性,因此不再需要手写for循环了。
3. 完全没有兼容性问题。
4. 实现动画非常简单,而且功能更加的强大。
5. 代码简单、粗暴。
没有对比,就没有伤害,有了对比,处处戳中要害。
什么是jQuery?
jQuery的官网 http://jquery.com/ jQuery就是一个js库,使用jQuery的话,会比使用JavaScript更简单。
js库:把一些常用到的方法写到一个单独的js文件,使用的时候直接去引用这js文件就可以了。(animate.js、common.js)
我们知道了,jQuery其实就是一个js文件,里面封装了一大堆的方法方便我们的开发,其实就是一个加强版的common.js,因此我们学习jQuery,其实就是学习jQuery这个js文件中封装的一大堆方法。
jQuery的版本
官网下载地址:http://jquery.com/download/ jQuery版本有很多,分为1.x 2.x 3.x
大版本分类:
1.x版本:能够兼容IE678浏览器
2.x版本:不兼容IE678浏览器
1.x和2.x版本jquery都不再更新版本了,现在只更新3.x版本。
3.x版本:不兼容IE678,更加的精简(在国内不流行,因为国内使用jQuery的主要目的就是兼容IE678)
关于压缩版和未压缩版
jquery-1.12.4.min.js:压缩版本,适用于生产环境,因为文件比较小,去除了注释、换行、空格等东西,但是基本没有颗阅读性。
jquery-1.12.4.js:未压缩版本,适用于学习与开发环境,源码清晰,易阅读。
jQuery的入口函数
使用jQuery的三个步骤:
1. 引入jQuery文件
2. 入口函数
3. 功能实现
关于jQuery的入口函数:
//第一种写法
$(document).ready(function() {
});
//第二种写法
$(function() {
});
jQuery入口函数与js入口函数的对比
1. JavaScript的入口函数要等到页面中所有资源(包括图片、文件)加载完成才开始执行。
2. jQuery的入口函数只会等待文档树加载完成就开始执行,并不会等待图片、文件的加载。
所以js的入口函数比jquery晚一点
jQuery对象与DOM对象的区别(重点)
1. DOM对象:使用JavaScript中的方法获取页面中的元素返回的对象就是dom对象。
2. jQuery对象:jquery对象就是使用jquery的方法获取页面中的元素返回的对象就是jQuery对象。
3. jQuery对象其实就是DOM对象的包装集(包装了DOM对象的集合(伪数组))
4. DOM对象与jQuery对象的方法不能混用。
DOM对象转换成jQuery对象:【联想记忆:花钱】
var $obj = $(domObj);
// $(document).ready(function(){});就是典型的DOM对象转jQuery对象
jQuery对象转换成DOM对象:
var $li = $(“li”);
//第一种方法(推荐使用)
$li[0]
//第二种方法
$li.get(0)
【练习:隔行变色案例.html】
选择器
什么是jQuery选择器
jQuery选择器是jQuery为我们提供的一组方法,让我们更加方便的获取到页面中的元素。注意:jQuery选择器返回的是jQuery对象。
jQuery选择器有很多,基本兼容了CSS1到CSS3所有的选择器,并且jQuery还添加了很多更加复杂的选择器。【查看jQuery文档】
jQuery选择器虽然很多,但是选择器之间可以相互替代,就是说获取一个元素,你会有很多种方法获取到。所以我们平时真正能用到的只是少数的最常用的选择器。
基本选择器
名称 | 用法 | 描述 |
ID选择器 | $(“#id”); | 获取指定ID的元素 |
类选择器 | $(“.class”); | 获取同一类class的元素 |
标签选择器 | $(“div”); | 获取同一类标签的所有元素 |
并集选择器 | $(“div,p,li”); | 使用逗号分隔,只要符合条件之一就可。 |
交集选择器 | $(“div.redClass”); | 获取class为redClass的div元素 |
总结:跟css的选择器用法一模一样。
层级选择器
名称 | 用法 | 描述 |
子代选择器 | $(“ul>li”); | 使用>号,获取儿子层级的元素,注意,并不会获取孙子层级的元素 |
后代选择器 | $(“ul li”); | 使用空格,代表后代选择器,获取ul下的所有li元素,包括孙子等 |
跟CSS的选择器一模一样。
过滤选择器
这类选择器都带冒号:
名称 | 用法 | 描述 |
:eq(index) | $(“li:eq(2)”).css(“color”, ”red”); | 获取到的li元素中,选择索引号为2的元素,索引号index从0开始。 |
:odd | $(“li:odd”).css(“color”, ”red”); | 获取到的li元素中,选择索引号为奇数的元素 |
:even | $(“li:even”).css(“color”, ”red”); | 获取到的li元素中,选择索引号为偶数的元素 |
【案例:隔行变色】
筛选选择器(方法)
筛选选择器的功能与过滤选择器有点类似,但是用法不一样,筛选选择器主要是方法。
//$("s1,s2")// 并集选择器
//$("s1 s2")// 后代选择器
//$("s1>s2")// 子代选择器
//$("li.green")
//$("s1s2") //交集选择器
名称 | 用法 | 描述 |
children(selector) | $(“ul”).children(“li”) | 相当于$(“ul>li”),子类选择器 |
find(selector) | $(“ul”).find(“li”); | 相当于$(“ul li”),后代选择器 |
siblings(selector) | $(“#first”).siblings(“li”); | 查找兄弟节点,不包括自己本身。 |
parent() | $(“#first”).parent(); | 查找父亲 |
eq(index) | $(“li”).eq(2); | 相当于$(“li:eq(2)”),index从0开始 |
next() | $(“li”).next() | 找下一个兄弟 |
prev() | $(“li”).prev() | 找上一次兄弟 |
【案例:下拉菜单】this+children+mouseenter+mouseleave
【案例:突出展示】siblings+find
【案例:手风琴】next+parent
【案例:淘宝精品】index+eq
各种操作
jQuery操作样式
修改样式
$("li").css({
backgroundColor:"pink",
color: "red",
fontSize:"32px",
border: "1px solid black"
});
$("li")
.css("backgroundColor", "pink")
.css("color", "red")
.css("fontSize", "32px");
获取样式
console.log($("li").css("fontSize"));
// 隐式迭代:
// 设置操作的时候,会给jq内部的所有对象都设置上相同的值
// 在获取操作的时候,只会返回第一个元素对应的值
// 在有多个li的情况下
jQuery操作class
// 添加类
$('li').addClass('basic');
// 移除类
$('li').removeClass('basic');
//判断类
// 返回true或者false
$('li').hasClass('basic');
prop操作布尔属性
对于布尔类型的属性,不用用attr方法,应该用prop方法,prop方法和attr一样。
$('#ck').prop('checked', true);
show hide
$('div').show();
$('div').hide();
show(speed); // 添加速度 毫秒值 或者固定字符串
// fast:200 normal:400, slow:600
//可以添加callback函数
show([speed], callback);
// 举例
$("div").show(1000, function () {
console.log("哈哈,动画执行完成啦");
})
});
fade in out toggle
//淡入:fadeIn
//淡出:fadeOut
//切换:fadeToggle
//用法:
$('div').fadeIn([speed]);
animate动画函数
//第一个参数:对象,里面可以传需要动画的样式
//第二个参数:speed 动画的执行时间
//第三个参数:动画的执行效果
//第四个参数:回调函数
$('#box1').animate({left:800}, 8000, 'swing', function(){
});
//把这些动画存储到一个动画队列里面
$("div").animate({left:800})
.animate({top:400})
.animate({width:300,height:300})
.animate({top:0})
.animate({left:0})
.animate({width:100,height:100})
停止动画
//stop:停止当前正在执行的动画
//第一个参数clearQueue:是否清除动画队列,true false
//第二个参数jumpToEnd:是否跳转到当前动画的最终效果,true false
$("input").eq(1).click(function () {
$("div").stop(true, false);
})
动态创建节点
//append(节点代码)添加到元素内部的最后端
//prepend(节点代码)添加到元素内部的最前端
$('div').append('节点代码');
$('div0').prepend('节点代码')
//举例
$("#box").append('<a href="http://web.itcast.cn" target="_blank">传智大前端</a>');
//如果append或者prepend的括号里是已经写在body里的元素的话,会把之前的元素删掉,再添加进对应的节点中
//当然也有appendTo,prependTo方法,用法正好跟append,prepend反着,其实带To的用着跟多
//after:添加到自己后面
//before:添加到自己前面
//在div后面加p
$('div').after($('p'));
text方法
$('<li></li>').text('asdfasfdsa')
//text括号里不可以添加html代码,相当于javascript里的innerText
//但是html方法可以,相当于javascript里的innerHtml
val方法
可以获得内部文字,value
也可以添加内容
$('div').val('略略');
//div的内容更改为‘略略’
trim方法
可以用来删除字符串开始和末尾的空格,并返回一个字符串
方法就是字符串.trim()
这里的字符串可以用多种方式获取,比如说val()方法
清空节点与删除节点
html(不使用)
$('div').html('');
//清空内容
//会造成内存泄漏
//因为只清空了内容,并没用清除该节点对应的方法
empty()常用
//清除内容
$('div').empty();
remove()
//全部删除 包括自己
$('div').remove();
//div 自己也没了
clone() 克隆
//均为深复制
//有一个布尔参数
//true:连事件一并复制
//false:不复制事件
//不支持浅复制
$('.des').clone(true).appendTo('div');
获得宽度和高度
//获取div的宽度
$('div').width();
//获取高度
$('div').height();
//返回的就是数字
获取可视区的宽度和高度
$(window).resize(function () {//页面尺寸发生变化时
console.log($(window).width());
console.log($(window).height());
});
获得滚动的距离
$(window).scrollTop();//纵轴滚动距离
$(window).scrollLeft();//横轴滚动距离
offset和position方法
//相对于document的位置
$('.son').offset();
//是一个Object,分为left和top两个属性
// 相对于有定位的父级元素的位置
$('.son').position();
//是一个Object,分为left和top两个属性
on注册事件两种方式
<body>
<input type="button" value="增加" id="btn">
<div>
<p>111111</p>
<p>111111</p>
<p>111111</p>
<p>111111</p>
</div>
<script src="jquery-1.12.4.js"></script>
<script>
$(function () {
1.
// 这个是p自己注册的事件(简单事件)
$("p").on("click", function () {
alert("呵呵");
});
2.
$("div").on("click", "p", function () {
alert("呵呵")
});
$("#btn").on("click", function () {
$("<p>我是新建的p元素</p>").appendTo("div");
});
});
</script>
</body>
给同一个元素注册多个事件时,事件发生会有先后顺序。顺序如下:
1.通过(‘div’).on()注册的事件,其中p的div包含的子元素
3.通过$(‘div’).on(ele, ‘p’,function)注册的元素
事件解绑
off
$('p').off('mouseenter');
// 移除p元素的mouseenter事件
// 如果off不传参数,解除全部事件
trigger触发
可以在别的操作中调用其他节点的功能的方法
$("p").on("click", function () {
alert("呵呵");
})
//toggle:切换 trigger:触发
$("#btn").on("click",function () {
//触发p元素的点击事件
$("p").click(); //这里是第一种调用方法
$("p").trigger("click"); //这是第二种调用方法
});
事件对象
//100,注册的时候的时候,把100传到事件里面去。
var money = 100;
//on(types, selector, data, callback)
//使用on方法的时候,可以给data参数传一个值,可以在事件里面通过e.data获取到。
$("div").on("click",money, function (e) {
console.log(e);
console.log("哈哈,我有"+e.data);
// 这样就可以把money的值传进去
});
money = 0;
$("p").on("click", function () {
console.log("呜呜,我有"+0);
})
阻止冒泡和浏览器默认事件
return false
$("#link").on("click", function (e) {
//阻止 默认
//e.preventDefault(); //阻止浏览器默认行为,如跳转等
e.stopPropagation(); // 阻止事件冒泡
alert("呵呵");
//return false;//既能阻止事件冒泡,也能阻止浏览器的默认行为。
//console.log(e.cancelBubble);
//alert("呵呵");
});
$("div").on("click", function () {
alert("嘻嘻");
return false
})
delay延迟事件
可以实现事件的中间间隔,通产用于两个事件的中间过渡
$('div').fadeIn(1000).delay(2000).fadeOut(1000);
//fadeIn之后歇息2000毫秒,然后再fadeOut
each方法
可以通过简单的方式实现遍历
//假设我们前面有很多个li
$('li').each(function(){
$(element).css('opacity', (index+1)/10);
// 遍历每一个element
// 需要操作时,就用$(element)
// 根据index改变每一个li的同名都opacity
})
释放$冲突
有的时候,我们在使用非jq库时,会出现跟jq一样的使用$来操作节点的方式,这时候我们可以通过一些代码来解决这个冲突
//注意这里一定要后调用jQuery
<script src="itcast.js"></script>
<script src="jquery-1.12.4.js"></script>
<script>
console.log($);
//jQuery释放$的控制权
var $$ = $.noConflict();
$$(function () {
});
</script>
jQuery实现图片的懒加载
需要一个jq插件,jquery.lazyload.js
使用方法如下
<img class="lazy" data-original="02.gif" alt="">
<script src="jquery-1.12.4.js" type="text/javascript"></script>
<script src="jquery.lazyload.js" type="text/javascript"></script>
<script>
$(function () {
$("img.lazy").lazyload();
});
bootstrap
虽然我们大多数的css是自己写的,但有些UI可以用bootstrap来写。
不要使用jQueryUI,不要使用jQueryUI,不要使用jQueryUI.