一.JQuery 简介
1.JQuery 概述
- JavaScript库:一个 对 原生JS代码 进行封装 的 JS 文件,快速高效的使用封装好的功能
- 常见的 JavaScript库 :JQuery 、Prototype 、YUI 、Dojo 、Ext JS 、移动端的 zepto
- JQuery:封装了 JavaScript 常用的功能代码,优化 DOM 操作、事件处理、动画设计 和 Ajax 交互
- J:JavaScript; Query:查询JS
- 优点:轻量级、速度快、兼容主流浏览器、链式编程、隐式迭代、简化 DOM 操作、支持各种插件
- 版本介绍:
- 1x :兼容 IE 678 等低版本浏览器, 官网不再更新
- 2x :不兼容 IE 678 等低版本浏览器, 官网不再更新
- 3x :不兼容 IE 678 等低版本浏览器, 是官方主要更新维护的版本
2.JQuery 的基本使用
2.1 JQuery 入口函数:$(function(){ ... });
- 相当于原生 JS 中的 DOMContentLoaded:不必等 外部的 js 文件、css文件、图片加载完毕 就执行内部代码
- ① $(function(){ ... });(推荐!!) ②$(document.ready(function(){ ... }));
2.2 JQuery 的顶级对象 $
- $ 是 JQuery 的别称,代码中可用 JQuery 代替 $
- $ 是 JQuery 的顶级对象, 相当于 原生JS 中的 window
- DOM 对象:用 原生JS 获取的对象,DOM 对象用 原生JS 方法
- JQuery 对象:用 JQuery 获取的对象,只有 JQuery 对象才能用 JQuery 方法
JQuery 对象本质: 伪数组形式存储, 利用 $ 对 DOM对象 包装后产生的对象// 1. DOM 对象: 用原生js获取的对象就是DOM对象 var myDiv = document.querySelector('div'); // myDiv 是DOM对象 // 2. jQuery对象: 用jquery方式获取的对象是jQuery对象。 本质:通过$把DOM元素进行了包装 $('div'); // $('div')是一个jQuery 对象
- DOM 对象 与 JQuery 对象 可以相互转换
DOM 对象 转换为 JQuery 对象: $('DOM对象'),如:$('div') JQuery 对象 转换为 DOM 对象(两种方式)
$('div')[index] $('div').get(index)// ... $('video')[0].play() // jquery里面没有play 这个方法,需要转换为 DOM 元素 $('video').get(0).play()
二.JQuery 常用 API
1.JQuery 选择器
- 原生 JS 获取元素,方式多,且容性不一致,因此 JQuery 做了封装,使 获取元素 统一标准
1.1 选择器、筛选方法
- JQuery 选择器: $(“CSS选择器”) :一定要加 "引号"!
// 新浪下拉菜单 ul>4li li>ul>3li>a $(function() { $(".nav>li").mousenter(function() { // 给nav 亲儿子li 添加鼠标经过事件 $(this).children("ul").show(); // this 不要加引号 表示选取 li的亲儿子ul }); $(".nav>li").mouseout(function() { $(this).children("ul").hide(); }) })
1.2 隐式迭代、排他思想、链式编程
隐式迭代:遍历内部 DOM 元素(伪数组形式存储)的过程 JQuery 排他思想:多选一效果,当前元素设置样式,兄弟元素清除样式 链式编程(以排他思想为例):$(this).css('color', 'red').sibling().css('color', '');$(function() { $("button").click(function() { // 1. 隐式迭代 给所有的按钮都绑定了点击事件 $(this).css("background", "pink"); // 2. 当前的元素变化背景颜色 $(this).siblings("button").css("background", ""); // 3. 其余兄弟去掉背景颜色 隐式迭代 }); })
1.3 淘宝精品案例分析
- 核心原理:鼠标经过 左侧盒子 某个 li,就让 内容区盒子 相对应图片 显示,其余图片隐藏
- 需要当前 li 的索引号,JQuery 得到当前元素索引号: $(this).index()
- 对应的图片盒子,可用 eq(index) 方法选择
- 女靴
// 此处是不同的导航栏按钮 // ...2.JQuery 样式操作
2.1 操作 css 方法
- 返回属性值:"属性名"
- 设置一组样式:“属性名”,“属性值”,逗号分隔,值 如果是 数字 可不跟 单位引号
- 设置多组样式:{"属性名":"属性值","属性名":"属性值"},参数是对象,属性可不加引号
$("div").css("width", 300); // 可以不写单位 那就不要加引号 $("div").css(height, "300px"); // 这个写法不对 因为属性名一定要加引号 $("div").css({ width: 400, height: 400, backgroundColor: "red" // 复合属性须采取 驼峰命名法,值不是数字,则加引号 })
2.2 设置类样式方法
- 操作类样式:作用 = classList,注意 操作类 里面的参数 不要加点!
- 添加类:$(“div”).addClass(''current'');
- 移除类:$(“div”).removeClass(''current'');
- 切换类: $(“div”).toggleClass(''current'');
- 类操作 VS className:原生 JS 中 className 覆盖原类名;JQuery 类操作 不影响原类名效果
$("div").click(function() { $(this).toggleClass("current"); // 这里的参数类不要加点 });
2.3 tab 栏切换分析
- 点击上部 li,当前 li 添加 current类,兄弟移除 current类
- 点击的同时,得到当前 li 的索引号
- 让下部相应索引号的 item 显示,其余 item 隐藏
// 导航栏
- 商品介绍
// 被选中后 改变背景颜色 //- ...
// 导航栏具体内容// ... $(function() { $(".tab_list li").click(function() { // 点击导航栏li 触发事件 // 当前被点击的li 添加被选中的类样式 他的兄弟 移除被选中的类样式 $(this).addClass("current").siblings().removeClass("current"); var index = $(this).index(); // 获得被点击 li 的索引号 // 让相应索引号的 导航栏具体内容 显示,其余m隐藏 $(".tab_con .item").eq(index).show().siblings().hide(); }); })商品介绍模块内容//...3.JQuery 效果
3.1 显示隐藏效果
- show([speed,[easing],[fn]]) 显示
- hide([speed,[easing],[fn]]) 隐藏
- toggle([speed,[easing],[fn]]) 切换
- 参数都可省略,平时一般不带参数,直接显示隐藏
- speed:速度(“slow”,“normal”, or “fast”) 或 毫秒数
- easing:指切换效果,默认是“swing”,可用参数“linear”
- fn: 回调函数,动画完成时执行的函数,每个元素执行一次
$("button").eq(1).click(function() { $("div").hide(1000, function() { alert(1); }); }) $("button").eq(2).click(function() { $("div").toggle(1000); // 切换效果 一般不加参数 直接显示隐藏 })
3.2 滑动效果
- slideDown([speed,[easing],[fn]]) 下滑效果
- slideUp([speed,[easing],[fn]]) 上滑效果
- slideToggle([speed,[easing],[fn]]) 滑动切换
$("button").eq(2).click(function() { $("div").slideToggle(500); });
3.3 事件切换
- hover([over,]out)
- over:鼠标移到元素上触发的函数(相当于mouseenter)
- out:鼠标移出元素要触发的函数(相当于mouseleave)
- 只写一个函数,则 鼠标 经过和离开 都会触发
// 事件切换 hover 鼠标经过和离开的复合写法 // $(".nav>li").hover(function() { // 鼠标经过的函数 // $(this).children("ul").slideDown(200); // 向下滑出 // }, function() { // 鼠标离开的函数 // $(this).children("ul").slideUp(200); // 向上滑动 // }); // 事件切换 hover 只写一个函数,那么鼠标经过和离开都会触发这个函数 $(".nav>li").hover(function() { $(this).children("ul").stop().slideToggle(); // 滑动切换 });
3.4 动画队列 / 停止排队
动画队列:多次触发 造成 多个动画排队执行
stop() 停止排队:写到动画的 前面,立刻开始当前操作,忽略之前操作
3.5 淡入淡出效果
- fadeIn([speed,[easing],[fn]]) 淡入效果
- fadeOut([speed,[easing],[fn]]) 淡出效果
- fadeToggle([speed,[easing],[fn]]) 淡入淡出切换效果
- fadeTo([[speed],opacity,[easing],[fn]]) 渐进调整到 指定的不透明度
- 渐进调整到 指定的不透明度的参数 opacity(0-1) 透明度、speed 必须写
- 高亮显示分析:
$(".wrap li").hover(function() { //鼠标经过时,其他li 透明度:0.5 $(this).siblings().stop().fadeTo(400, 0.5); }, function() { // 鼠标离开,其他li 透明度改为 1 $(this).siblings().stop().fadeTo(400, 1); })
3.6 自定义动画 animate
- animate(params,[speed],[easing],[fn])
- params:想要更改的样式属性,以 对象形式 传递,必写,其余参数可省略
- speed:速度(“slow”,“normal”, or “fast”) 或 毫秒数
- easing:指切换效果,默认是“swing”,可用参数“linear”
- fn: 回调函数,动画完成时执行的函数,每个元素执行一次
$("button").click(function() { $("div").animate({ // 想要更改的样式属性 用对象存储 必写 left: 500, top: 300, opacity: .4, width: 500 }, 500); // 速度 }))
3.7 王者手风琴效果分析
- 鼠标经过某个 li 有两步操作:
- 当前小 li 宽度变为 224px,同时里面的小图片淡出,大图片淡入
- 兄弟小 li 宽度变为 69px,小图片淡入, 大图片淡出
4.JQuery 属性操作
4.1 元素固有属性值 prop()
- 元素固有属性:元素本身自带的属性,比如 元素的 href ,比如 元素的 type
- 获取属性:prop(''属性'')
- 设置属性:prop(''属性'', ''属性值'')
$("a").prop("title", "特特喜欢茶茶"); // 修改元素固有属性 $("input").change(function() { // input框 内容改变事件 console.log($(this).prop("checked")); // 获取元素固有属性(获取选中状态) });
4.2 元素自定义属性值 attr()
- 元素自定义属性:用户自己添加的属性,比如给 div 添加 index =“1”
- 获取属性:attr(''属性''),类似原生 getAttribute(),如果获取 H5自定义属性 需要添加 data-
- 设置属性:attr(''属性'', ''属性值''),类似原生 setAttribute()
$("div").attr("index", 4); // 设置自定义属性的值 console.log($("div").attr("data-index")); // 获取自定义属性的值 如果获取 H5自定义属性 需要添加 data-
4.3 数据缓存 data()
- data() :在指定元素上存取数据,不会修改 DOM 元素结构,一旦页面刷新,之前的数据将被移除
- data("index") 可以读取 HTML5 自定义属性 data-index ,可以不加"data-",且得到的是 数字型
- 获取数据:date(''name'')
- 附加数据:data(''name'',''value'')
$("span").data("uname", "meow"); // 设置数据缓存 刷新后消失 console.log($("span").data("uname")); // 读取数据缓存
5.JQuery 文本属性值
5.1 针对 元素的内容 / 表单的值 操作
- 普通元素内容 html()( 相当于原生 innerHTML)
- 普通元素文本内容 text() (相当于原生 innerText)
- 表单的值 val()( 相当于原生 value)
6.JQuery 元素操作
- 遍历、创建、添加、删除元素操作
6.1 遍历元素
- 隐式迭代是对 相同元素 做 相同操作,想要给 相同元素 做 不同操作,需要 遍历
- $("div").each(function (index, domEle) {...})
- each() 方法用于遍历元素,用 DOM 处理
- 回调函数有 2 个参数: index 是元素索引号; demEle 是 DOM元素对象,不是 JQuery对象,只能用 DOM 方法
- 要想使用 JQuery方法,需要转换为 JQuery对象: $(domEle)
1236.2.3 删除元素:
element.remove():删除元素本身
- element.empty():删除元素内容(子节点)
- element.html(''''):清空元素内容(子节点)
- empt() 和 html('''') 作用等价,都可删除元素内容,只不过 html 还可以设置内容
- 原先的li
原先的div