使用 CSS 选择器来识别一组文档元素,并返回一个对象表示这些元素。返回的对象提供了大量的方法来批量操作匹配的元素。
jQuery前戏
js不足
- 代码很麻烦,冗余
- 浏览器兼容性问题
- 入口函数只能写一个,写了多个,后面的会覆盖前面的问题
- js的代码容错性比较差(比较容易出错)
- 实现一些简单的动画比较麻烦
什么是jquery?
jquery是一个js库。jquery就是一个js文件.
什么是js库?js库其实就是把一些我们常用到的方法封装到一个单独的js文件里面,当我们想用的时候,引入它。(common.js animate.js)
特点:
- 丰富强大的语法
- 高效的查询
- 一套有用的方法
- 强大的函数式编程技巧,批量操作元素集
- 简洁的语言用法
引包
1 | <script src="jquery-1.12.4.js"></script> |
全局函数
jQuery()
全局函数,对应于一个快捷名:$
。jQuery()
是工厂函数,不使用 new
关键字。
入口函数
js入口函数
1 | window.onload = function () {...}; |
jQuery入口函数1
1 | $(document).ready(function () {...}); |
jQuery入口函数2(简化)
1 | $(function () {...}); |
$符实质
- $实质是一个函数,jQuery 对象是类数组对象。
- 参数是 function 、把 dom 元素 document 转成 jQuery 对象,选择器
jQuery 的调用方式
第一种:传递 CSS 选择器(字符串)给 $()
方法。 选择器支持大部分 CSS3 选择器,也有自己扩展的。返回当前文档中匹配该选择器的元素集合。还可以将一个 jQuery 对象作为第二个参数传递给 $()
方法,返回该特定元素或元素子元素中匹配选择器的部分。第二个元素可选的。
第二种:传递一个 Element、Document 或 Window 对象给 $()
方法。将传入的内容封装成 jQuery 对象。
第三种:传递 HTML 文本字符串,会根据传入的文本创建好 HTML 元素并封装为 jQuery 对象返回。可以接收第二个参数,可以传递 Document 对象来指定与所创建元素相关联的文档。第二个参数还可以是 object 对象。
第四中:传入函数。
一些基础方法
size()
代替length
get()
代替方括号索引toArray()
将jQuery
对象转成真正数组each()
遍历,代替 for 循环- 参数是回调函数,回调函数中的 this 指向遍历的元素,是原生的 DOM 对象。
- 还可以将索引,该元素传递给回调函数的第一个和第二个参数,第二个参数也是 DOM 对象。
- 返回调用自身的 jQuery 对象,可以用于链式编程
map()
和Array.prototype.map()
方法很接近。- 接收回调函数作为参数;
- 索引是回调函数的第一个参数,元素作为 this 值和回调函数的第二个参数。
- 如果回调函数返回 null 或 undefined,索引忽略。
- 回调函数返回数组或者伪数组
- map() 返回的 jQuery 对象可以不包括文档元素,但依旧可以像伪数组对象一样使用。
index()
接收一个参数,返回该元素在 jQuery 对象中的索引值。找不到返回 -1.is()
接收一个选择器,选中元素至少有一个匹配该选择器,返回 true。
jQuery 对象的三个属性
selector
选择器字符串context
传递给$()
的第二个参数jquery
jQuery 的版本号
选择器
基本选择器
- ID选择器
$("#id名");
- 类选择器
$(".类名");
- 标签选择器
$("标签名");
- 并集选择器
$("#curr,.cls");
- 交集选择器
$("li.cls");
层级选择器
- 子代选择器
$("#curr>.cls")
- 后代选择器
$("li cls")
过滤选择器
:odd;
:even;
:eq(0);
- jQuery对象
方法
$(this).css("backgroundColor", "pink").siblings("li").css("backgroundColor", "");
- 链式编程
$(this).find("li").css("backgroundColor", "");
css({});
- css设置样式
siblings();
- 兄弟元素
find();
- 后代元素
next();
- 下一个兄弟元素
parent();
- 父元素
show();
- 显示
hide();
- 隐藏
index();
- 获取的是当前对象在它兄弟里面的索引/
eq(0);
- 取到的是jQuery对象
隐式迭代
- 设置属性的操作的时候设置的是所有的元素
- 获取性操作不去遍历,直接获取第一个
类操作
- 添加类
addClass();
- 类名
- 移除类
removeClass();
- 类名
- 判断类
hasClass();
- 类名
- 切换
toggle();
- 类名,两个类名之间切换操作
动画
显示、隐藏
- show(); hide(); toggle();
- 参数speed,值为毫秒值
淡入、淡出
- fadeIn(); fadeIn(); fadeToggle();
- 不传参数的时候,有动画,normal;
滑入、滑出
- slideUp(); slideUp(); slideToggle();
- 不传参数的时候,有动画,normal;
自定义动画
1 | $("#box").animate({"width":"400px","height":"400px", "left":"400px"},speed,easing); |
停止动画 stop();
- stop(clearQueue, jumpToEnd);
- 第一个参数是否清除动画队列 true, false,默认false;第二个参数是是否跳转到当前动画的最终效果 true, false
jQuery和js节点操作
js节点操作
1 | var box = document.getElementById("box"); |
jQuery 操作
append();
- 添加节点
appendTo()
- 添加节点
prepend();
- 添加节点
prependTo()
- 添加节点
after();
- 添加节点
before();
- 添加节点
insertAfter()
- 插入节点
insertBefore()
- 插入节点
replaceWith()
- 替换
add()
- 添加
first()
- 仅包含选中元素的第一个
eq()
- 只包含指定序号的单个元素
html();
- 不传参获取,传参设置
text();
- 不传参获取,传参设置
empty();
- 清空节点(清理门户)
remove();
- 删除节点(自杀)
clone();
- 深度复制,不复制事件
clone(true);
- 深度复制,并且复制事件
val();
- 获取值
val("abc");
- 设置值
next()
- 下一个节点
prev()
- 上一个节点
prevAll()
- 前面所有节点
nextAll()
- 后面所有节点
parent()
- 父节点
sibling()
- 兄弟节点
find()
- 后代节点
filer()
- 返回符合条件的jQuery对象
not()
- 排除元素
has()
- 是否有
gt()
- 参数是数字,返回大于参数的后面的元素
wrap()
- 包装每一个
wrapInner()
- 包装每一个元素的内容
wrapOuter()
- 将选中元素作为一组包装
jQuery属性操作
setAttribute("target", "_blank");
attr("title", "星期四");
- 用法和css用法是一样
attr(name, value);
- 用法和css用法是一样
attr({json});
- 用法和css用法是一样
css()
- 传入一个字符串参数,获取对应样式,注意,不能传入复合样式的属性,如 “font”
- 传入两个参数,设置样式
- 传入一个对象,设置样式
jQuery属性操作特例
布尔类型的属性:true
false
checked
selected
disabled
在jquery里面,碰到布尔类型的属性的时候,不要用attr方法,应该prop方法
prop("checked");
- 用法和css用法是一样
jQuery获取属性值width系列(操作尺寸)
width();
- 能获取、设置
Innerwidth();
- 获取内部宽度(包括宽度和padding)
Outerwidth();
- 获取内部宽度(包括宽度和padding和border)
Outerwidth(true);
- 获取内部宽度(包括宽度和padding和border和margin)
height();
- 能获取、设置
Innerheight();
- 获取内部高度(包括高度和 padding)
Outerheight();
- 获取内部高度(包括高度和 padding 和 border)
Outerheight(true);
- 获取内部高度(包括高度和 padding 和 border 和 margin)
jQuery操作坐标
position();
- 只能获取不能设置,设置用 css 设置,找最近的有相对定位的的父盒子
offset();
- 相对与dom最左上角(获取、设置)
- 带有 left 属性和 top 属性
offsetParent()
- 最近定位的祖先元素
scrollTop();
- 设置卷去的距离(事件)
scrollLeft();
- 设置卷去的距离(事件)
1 | $(window).scroll(function () { |
获取和设置 CSS 类
addClass()
- 添加类
removeClass()
- 删除类
toggleClass()
- 没有类则添加,否则删除
hasClass()
- 判断是否存在
设置或获取元素内容
html()
- 不传参获取
- 传参设置值,html格式字符串
text()
事件机制:
- 用户执行某一个操作,浏览器会相应用户的操作,执行某个函数
- 事件处理函数:
- 所谓的事件处理函数,就是响应用户的那个函数
- 用户事件:
- 就是事件名,用户可以注册的事件
- 注册事件:
- 就是赋值或调用addEventListener
- 响应事件:
- 做完操作调用某个方法
jQuery事件发展
简单事件绑定:不能同时注册两个事件
bind事件绑定
1 | $("p").bind({ |
不支持动态创建元素
delegate事件(委托、委派、代理)
1 | $("div").delegate("p", "click", function () { |
on事件绑定
1 | /*on给div注册委托事件*/ |
解除事件绑定
1 | /*off是解除所有的事件,能解除委托事件*/ |
事件触发
trigger("focus");
- 触发获取焦点事件,会触发浏览器默认行为
triggerHandler("focus");
- 触发获取焦点事件,不会触发浏览器默认行为
事件对象event
click(function(event){...});
- 点击
keyCode = event.keyCode;
- 键盘码
阻止事件冒泡
方法1:
event.stopPropagation();
方法2:
return false;
阻止浏览器的默认行为
方法1:
event.preventDefault();
方法2:
return false;
事件
click(function(){...});
- 点击
scroll(function(){...});
- 鼠标滚轮事件
focus(function(){...});
- 获取焦点
mouseenter(function(){...});
- 鼠标经过
mouseleave(function(){...});
- 鼠标离开
keydown(function(event){var keyCode = event.keyCode;});
- 键盘按键按下
keyup(function(event){var keyCode = event.keyCode;});
- 键盘抬起
浏览器提供的事件
1 | "onabort", "onblur", "oncancel", "oncanplay", |
迭代
1 | /*显式迭代:对每一个元素做不同的处理*/ |
插件
懒加载插件
1 | <img class="lazy" data-original="23.jpg" alt=""> |
fullpage插件
引入文件
1 | <link rel="stylesheet" href="css/jquery.fullPage.css"> |
html
1 | <div id="fullpage"> |
js
1 | $(function(){ |
可选配置
- 选项
- 方法
- 回调函数
jqueryUI插件
引入文件
1 | <link rel="stylesheet" href="plugins/jquery-ui.css" /> |
html
1 | <body> |
js
1 | <script> |
插件制作
制作插件:就是给jquery对象添加方法。
$.fn.fnName = function(){}