本人小白一枚,欢迎大家一起讨论学习,如有错误,还望大家指教。
简述:
JQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript框架。jQuery设计的宗旨是“write Less,Do More”, 即倡导写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。
使用:
在使用这个这个框架之前,我们需要下载这js文件,官方下载地址。目前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,只支持最新的浏览器。除非特殊要求, 一般不会使用3.x版本的,很多老的jQuery插件不支持这个版本。目前该版本是官方主要更新维护的版本。最新版本:3.2.1(2017年3月20日)
注意: 在使用JQuery的js文件时,我们导入min.js
文件即可。这里我们说明一下:jquery-xxx.js
是开发版本,是给我们开发人员使用的,因为该文件有良好的缩进和注释。而jquery-xxx.min.js
属于生产版本,因该文件没有注释和缩进使得体积更少,便于程序的加载。
获取JQuery对象:var jq = $(jq选择器);
JQuery对象和Js对象的方法是不通用的。但两者可以相互转换。相对来说,操作JQuery对象时,更加快捷方便。
- jq对象转化为js对象:
jq对象[索引]
或者jq对象.get(索引)
- js对象转化为jq对象:
$(js对象)
JQ入口函数:
// 与js入口函数不同的是,jq入口函数可以定义多次,
// 而js入口函数window.onload()方法只能定义一次,如果定义多次或定义将前面定义覆盖
$(functioin() {要执行的代码块});
JQ选择器:筛选具有相似特征的元素即便签。
- 基本选择器:
- 标签选择器(元素选择器): 用法
$("html标签名")
获得所有匹配标签名称的元素。 - id选择器: 用法
$("#id的属性值")
获得与指定id属性匹配的元素。 - 类选择器: 用法
$(".class的属性值")
获得与指定class属性值匹配的元素。 - 并集选择器: 用法
$("选择器1, 选择器2....")
获得多个选择器选中的所有元素。
- 层级选择器:
- 后代选择器: 用法
$("A B")
选择A元素内部的所有B元素。 - 子选择器: 用法
$("A > B")
选择A元素内部的所有B元素子元素。
- 属性选择器:
- 属性名称选择器: 用法
$("html标签名[属性名]")
包含指定属性的选择器。 - 属性选择器: 用法
$("html标签名[属性名='属性值']")
包含指定属性等于指定值的选择器。 - 复合属性选择器: 用法
$("html标签名[属性名='属性值'][ ]....")
包含多个属性条件的选择器。
- 过滤选择器:注意冒号前后不能用空格,否则过滤不出指定的元素,如
$("div:first").css("backgroundColor", "pink");
- 首元素选择器: 用法
:first
获得选择的元素中的第一个元素。 - 尾元素选择器: 用法
:last
获得选择的元素中的最后一个元素。 - 非元素选择器: 用法
:not(selector)
不包含指定内容的元素。 - 偶数选择器: 用法
:even
获得偶数索引元素,索引从0开始。 - 奇数选择器: 用法
:odd
获得奇数索引元素,索引从0开始。 - 等值索引选择器: 用法
:eq(index)
获取指定索引元素。 - 大于索引选择器: 用法
:gt(index)
获取大于指定索引元素。 - 小于索引选择器: 用法
:lt(index)
小于指定索引元素。 - 标题选择器: 用法
:header
获得标题(h1~h6)元素,固有写法。
- 表单过滤选择器:
- 可用元素选择器: 用法
:enabled
获得可用元素。 - 不可用元素选择器: 用法
:disabled
获得元素。 - 选中选择器: 用法
:checked
获得单选/复选框选中的元素。 - 选中选择器: 用法
:selected
获得下拉框选中的元素。
DOM操作
- 内容操作:
- html(): 获取/设置元素的标签体的内容。
例如:<a><font>内容</font></a> 结果:<font>内容</font>
- text(): 获得/设置元素的标签体纯文本内容。
例如:<a><font>内容</font></a> 结果:内容
- val(): 获取/设置元素的value属性值。
- 属性操作:
- 通用属性操作:
- attr(): 获得/设置元素的属性,如果操作的是元素自定义的属性,则建议使用此方法。
- removeAtrr(): 删除属性。
- prop(): 获取/设置元素的属性,如果操作的是元素的固有属性,则建议使用此方法。
- removeProp(): 删除属性。
- class属性操作:
- addClass(): 添加class属性值。
- removeClass(): 删除class属性值。
- toggleClass(): 切换class属性,
例如:toggleClass("one")判断如果元素对象上存在class="one",则将属性值one删除掉。 如果元素对象上不存在class="one",则添加。
- css(): 设置元素的css样式。
- CRUD操作:
- append(): 父元素将子元素追加到末尾,对象1.append(对象2): 将对象2添加对象1元素内部,并且在末尾。
- appendTo(): 对象1.appendTo(对象2):将对象1添加到对象2内部,并且在末尾。
- prepend(): 父元素将子元素追加到开头,对象1.prepend(对象2):将对象2添加到对象1元素内部,并且在开头。
- prependTo(): 对象1.prependTo(对象2):将对象1添加到对象2内部,并且在开头。
- after(): 添加元素到元素后边,对象1.after(对象2): 将对象2添加到对象1后边。对象1和对象2是兄弟关系。
- insertAfter(): 对象1.insertAfter(对象2):将对象1添加到对象2后边。对象1和对象2是兄弟关系
- before(): 添加元素到元素前边,对象1.before(对象2): 将对象2添加到对象1前边。对象1和对象2是兄弟关系。
- insertBefore(): 对象1.insertBefore(对象2): 将对象1添加到对象2前边。对象1和对象2是兄弟关系。
- remove(): 移除元素,对象.remove():将对象删除掉。
- empty(): 清空元素的所有后代元素,对象.empty():将对象的后代元素全部清空,但是保留当前对象以及其属性节点。
JQ高级
- 动画:jq有三种方式显示和隐藏元素。
- 默认显示和隐藏方式:
- show([speed, [easing], [fn]]) : 显示隐藏的匹配元素,并在动画完成后可选地触发一个回调函数。
- speed: 动画的速度。三个预定义的值(“slow”,“normal”, “fast”)或表示动画时长的毫秒数值(如:1000)
- easing: 用来指定切换效果,默认是"swing",可用参数"linear"。
- swing: 动画执行时效果是 先慢,中间快,最后又慢。
- linear: 动画执行时速度是匀速的。
- fn: 在动画完成时执行的函数,每个元素执行一次。
- hide([speed, [easing], [fn]]): 隐藏显示的元素,并在动画完成后可选地触发一个回调函数。
- toggle([speed], [easing], [fn]): 元素为可见则切换为隐藏;元素为隐藏反之,并在动画完成后可选地触发一个回调函数。
- 滑动显示和隐藏方式:方法的参数同默认方式一样
- slideDown([speed], [easing], [fn]): 可以使匹配的元素以“滑动”的方式显示出来,并在动画完成后可选地触发一个回调函数。
- slideUp([speed, [easing], [fn]]): 可以使匹配的元素以“滑动”的方式隐藏起来,并在动画完成后可选地触发一个回调函数。
- slideToggle([speed], [easing], [fn]) : 元素为可见则切换为隐藏;元素为隐藏反之,并在动画完成后可选地触发一个回调函数。
- 淡入淡出显示和隐藏方式:方法的参数同默认方式一样
- fadeIn([speed], [easing], [fn]): 匹配的元素来实现淡入效果,并在动画完成后可选地触发一个回调函数。
- fadeOut([speed], [easing], [fn]): 匹配的元素来实现淡出效果,并在动画完成后可选地触发一个回调函数。
- fadeToggle([speed, [easing], [fn]]): 元素为可见则切换为隐藏;元素为隐藏反之,并在动画完成后可选地触发一个回调函数。
- 遍历:jq提供了三种方式遍历,在3.0之后出现了另一种。
- js的遍历方式:
for(初始化值;循环结束条件;步长)
- jq的遍历方式:
- 一:jq对象.each(callback)
- 语法:
jquery对象.each(function(index,element){});
- index: 就是元素在集合中的索引
- element: 就是集合中的每一个元素对象
- 回调函数返回值:
- true: 如果当前function返回为false,则结束循环(break)。
- false: 如果当前function返回为true,则结束本次循环,继续下次循环(continue)
- 二:$.each(object, [callback])
- 三:for…of 该方法是jq 3.0 版本之后提供的方式,用法为 for(元素对象 of 容器对象)
- 事件绑定
- jq标准的绑定方式:
jq对象.事件方法(回调函数);
注:如果调用事件方法,不传递回调函数,则会触发浏览器默认行为,如表单对象.submit(); 让表单提交 - on绑定事件/off解除绑定
- jq对象.on(“事件名称”,回调函数)
- jq对象.off(“事件名称”): 如果off方法不传递任何参数,则将组件上的所有事件全部解绑
- 事件切换:toggle
- jq对象.toggle(fn1,fn2…): 当单击jq对象对应的组件后,会执行fn1.第二次点击会执行fn2…,注意:1.9版本 .toggle() 方法删除,jQuery Migrate(迁移)插件可以恢复此功能。
jquery-migrate-1.0.0.js
- 插件:用来增强JQuery的功能,实现方式有两种。
- $.fn.extend(object): 增强通过JQuery获取的对象的功能。
- $.extend(object): 增强JQuery对象自身的功能。
插件小案例1:
<html>
<head>
<meta charset="UTF-8">
<title>01-jQuery对象进行方法扩展</title>
<script src="../js/jquery-3.3.1.min.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
$.fn.extend({
check:function () {
this.prop("checked", true);
},
uncheck:function () {
this.prop("checked", false);
}
});
$(function() {
$("#btn-check").click(function () {
$("input[type=checkbox]").check();
});
$("#btn-uncheck").click(function () {
$("input[type=checkbox]").uncheck();
});
});
</script>
</head>
<body>
<input id="btn-check" type="button" value="点击选中复选框" onclick="checkFn()">
<input id="btn-uncheck" type="button" value="点击取消复选框选中" onclick="uncheckFn()">
<br/>
<input type="checkbox" value="football">足球
<input type="checkbox" value="basketball">篮球
<input type="checkbox" value="volleyball">排球
</body>
</html>
插件小案例2:
<html>
<head>
<meta charset="UTF-8">
<title>02-增强JQuery对象自身的功能</title>
<script src="../js/jquery-3.3.1.min.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
//对全局方法扩展2个方法,扩展min方法:求2个值的最小值;扩展max方法:求2个值最大值
$.extend({
min:function (v1, v2) {
return v1 >= v2 ? v2 : v1;
},
max:function (v1, v2) {
return v1 >= v2 ? v1 : v2;
}
});
$(function () {
alert("最小值:" + $.min(1, 2) + ",最大值:" + $.max(5, 4));
});
</script>
</head>
<body>
</body>
</html>