jQuery api中文手册:https://jqueryapi.net/
1 jQuery简介
1.1 安装与引入
- 下载地址:
[Download jQuery | jQuery](https://jquery.com/download/) - 选择生产环境(production):
- 看源码,选择development.js
- 进入后,ctrl+A,全选,ctrl+C,复制。新建jQuery.min.js,将复制的代码粘贴进去
引入:
<script src="./jquery.min.js"></script>
cdn引入:
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
1.2 jQuery的入口函数
等着 DOM 结构渲染完毕即可执行内部代码,不必等到所有外部资源加载完成。原生 js 中的 load 事件是等页面文档、外部的 js 文件、css文件、图片加载完毕才执行内部代码。相当于原生的DOMContentLoaded事件。可以放页面上方。
<script>// 1. 等着页面DOM加载完毕再去执行js 代码$(document).ready(function() {$('div').hide();})// 下面是上面的简化版// 2. 等着页面DOM加载完毕再去执行js 代码$(function() {$('div').hide();})</script>
1.3 顶级对象$
- $ 是jQuery的别称(另外的名字)
// 二者等价$(function() {alert(11)});jQuery(function() {// alert(11)// $('div').hide();jQuery('div').hide();});
- $同时也是jQuery的 顶级对象,和js中的window一样
2 jQuery基本api
2.1 jQuery对象
- 概念
- jQuery 方法获取的元素就是 jQuery 对象。
- jQuery 对象本质是: 利用$对DOM 对象包装后产生的对象(伪数组形式存储)。
- 创建
```javascript //1、创建节点,$(“标签”) 类似js document.createElement(“li”) console.log($(“ - 我是li创建的标签 “))
//2、创建节点,$(“ul”).html(“
“) 类似js innerHTML 因为此属性,识别标签 会覆盖原来的内容 console.log($(“ul”).html(“
- 和DOM元素互转```javascript// dom转jQuerylet div = document.querySelector(".div");let $div = $(div);
// jQuery转domlet div = $('div')[0];
2.2 选择器
- 基本选择器
- 用法和document.querySelectorAll一样,$(‘类名’)
筛选选择器
$("ul li:first").css("color", "red");$("ul li:last").css("color", "red");$("ul li:eq(2)").css("color", "blue"); // 选中第三个li$("ol li:odd").css("color", "skyblue"); // 选中奇数个li$("ol li:even").css("color", "pink"); // 选中偶数个li
筛选方法
// 父 parent() 返回的是 最近一级的父级元素console.log($(".son").parent());// 所有祖先元素console.log($(".four").parents());console.log($(".four").parents(".one"));// 子,nav自子代中的p$(".nav").children("p").css("color", "red");// 后代,nav中的p$(".nav").find("p").css("color", "red");// 选择兄弟元素中的li$("ol .item").siblings("li").css("color", "red");// 我们可以利用选择方法的方式选择 更推荐这种写法$("ul li").eq(2).css("color", "blue");// 判断是否有某个类名console.log($("div:first").hasClass("current"));console.log($("div:last").hasClass("current"));
排他思想
- 只有选择的元素具有背景色
- 隐式迭代:jQuery内部会遍历
$(function() {// 1. 隐式迭代 给所有的按钮都绑定了点击事件$("button").click(function() {// 2. 当前的元素变化背景颜色$(this).css("background", "pink");// 3. 其余的兄弟去掉背景颜色 隐式迭代$(this).siblings("button").css("background", "");});})
- 链式编程
// 只有选择的元素具有背景色$(this).css('color', 'red').sibling().css('color', '');
$(function() {// 1.点击上部的li,当前li 添加current类,其余兄弟移除类$(".tab_list li").click(function() {// 链式编程操作$(this).addClass("current").siblings().removeClass("current");// 2.点击的同时,得到当前li 的索引号var index = $(this).index();console.log(index);// 3.让下部里面相应索引号的item显示,其余的item隐藏$(".tab_con .item").eq(index).show().siblings().hide();});})
2.3 样式操作
读取css属性
console.log($("div").css("width"));
设置css属性
$("div").css("width", "300px");
$("div").css({width: 400,height: 400,backgroundColor: "red"// 如果是复合属性则必须采取驼峰命名法,如果值不是数字,则需要加引号})
切换类
$(function() {// 1. 添加类 addClass()$("div").click(function() {// $(this).addClass("current");});// 2. 删除类 removeClass()$("div").click(function() {$(this).removeClass("current");});// 3. 切换类 toggleClass()$("div").click(function() {$(this).toggleClass("current");});})
2.4 动画效果
2.4.1 显示与隐藏
<button>显示</button><button>隐藏</button><button>切换</button><div></div>
div {width: 150px;height: 300px;background-color: pink;}
$(function() {$("button").eq(0).click(function() {$("div").show(1000, function() {alert(1);});})$("button").eq(1).click(function() {$("div").hide(1000, function() {alert(1);});})$("button").eq(2).click(function() {$("div").toggle(1000);})// 一般情况下,我们都不加参数直接显示隐藏就可以了});
2.4.2 滑动
$(function() {$("button").eq(0).click(function() {// 下滑动 slideDown()$("div").slideDown();})$("button").eq(1).click(function() {// 上滑动 slideUp()$("div").slideUp(500);})$("button").eq(2).click(function() {// 滑动切换 slideToggle()$("div").slideToggle(500);});});
2.4.3 等待
$(".nav>li").hover(function() {// stop 方法必须写到动画的前面,先停止之前的动画$(this).children("ul").stop().slideToggle();});
2.4.4 淡入淡出
<button>淡入效果</button><button>淡出效果</button><button>淡入淡出切换</button><button>修改透明度</button><div></div>
div {width: 150px;height: 300px;background-color: pink;display: none;}
$(function() {$("button").eq(0).click(function() {// 淡入 fadeIn()$("div").fadeIn(1000);})$("button").eq(1).click(function() {// 淡出 fadeOut()$("div").fadeOut(1000);})$("button").eq(2).click(function() {// 淡入淡出切换 fadeToggle()$("div").fadeToggle(1000);});$("button").eq(3).click(function() {// 修改透明度 fadeTo() 这个速度和透明度要必须写$("div").fadeTo(1000, 0.5);});});
2.4.5 自定义动画效果
<button>动起来</button><div></div>
div {position: absolute;width: 200px;height: 200px;background-color: pink;}
$(function() {$("button").click(function() {$("div").animate({left: 500,top: 300,opacity: .4,width: 500}, 500);})})
2.5 属性操作
固有属性
// element.prop("属性名") 获取元素固有的属性值console.log($("a").prop("href"));// 设置固有属性$("a").prop("title", "我们都挺好");
自定义属性
// 元素的自定义属性 我们通过 attr()console.log($("div").attr("index"));$("div").attr("index", 4);console.log($("div").attr("data-index"));
数据缓存,这样设置的属性不会出现在dom结构中,但是可以获取
// 3. 数据缓存 data() 这个里面的数据是存放在元素的内存里面$("span").data("uname", "andy");console.log($("span").data("uname"));// 这个方法获取data-index h5自定义属性 第一个 不用写data- 而且返回的是数字型console.log($("div").data("index"));
2.6 内容文本
// 获取设置元素内容 html()console.log($("div").html());// $("div").html("123");// 获取设置元素文本内容 text()console.log($("div").text());$("div").text("123");// 获取设置表单值 val()console.log($("input").val());$("input").val("123");
2.7 元素操作
2.7.1 遍历元素
隐式迭代
$("div").css("color", "red");
遍历dom
$("div").each(function (index, domEle) { xxx; })
- each() 方法遍历匹配的每一个元素。主要用DOM处理。 each 每一个
- 里面的回调函数有2个参数: index 是每个元素的索引号; demEle 是每个DOM元素对象,不是jquery对象
- 所以要想使用jquery方法,需要给这个dom元素转换为jquery对象 $(domEle)
var sum = 0;// 1. each() 方法遍历元素var arr = ["red", "green", "blue"];$("div").each(function(i, domEle) {// 回调函数第一个参数一定是索引号 可以自己指定索引号号名称// console.log(index);// console.log(i);// 回调函数第二个参数一定是 dom元素对象 也是自己命名// console.log(domEle);// domEle.css("color"); dom对象没有css方法$(domEle).css("color", arr[i]);sum += parseInt($(domEle).text());})
遍历任意数据
$.each(object,function (index, element) { xxx; })
- $.each()方法可用于遍历任何对象。主要用于数据处理,比如数组,对象
- 里面的函数有2个参数: index 是每个元素的索引号; element 遍历内容
$.each({name: "andy",age: 18}, function(i, ele) {console.log(i); // 输出的是 name age 属性名console.log(ele); // 输出的是 andy 18 属性值})
2.7.2 增删元素
$(function() {// 1. 创建元素var li = $("<li>我是后来创建的li</li>");// 2. 添加元素// (1) 内部添加// $("ul").append(li); 内部添加并且放到内容的最后面$("ul").prepend(li); // 内部添加并且放到内容的最前面// (2) 外部添加var div = $("<div>我是后妈生的</div>");// $(".test").after(div);$(".test").before(div);// 3. 删除元素// $("ul").remove(); 可以删除匹配的元素 自杀// $("ul").empty(); // 可以删除匹配的元素里面的子节点 孩子$("ul").html(""); // 可以删除匹配的元素里面的子节点 孩子})
2.7.3 元素尺寸
$(function() {// 1. width() / height() 获取设置元素 width和height大小console.log($("div").width());// $("div").width(300);// 2. innerWidth() / innerHeight() 获取设置元素 width和height + padding 大小console.log($("div").innerWidth());// 3. outerWidth() / outerHeight() 获取设置元素 width和height + padding + border 大小console.log($("div").outerWidth());// 4. outerWidth(true) / outerHeight(true) 获取设置 width和height + padding + border + marginconsole.log($("div").outerWidth(true));})
2.7.4 元素位置
$(function() {// 1. 获取设置距离文档的位置(偏移) offsetconsole.log($(".son").offset());console.log($(".son").offset().top);// $(".son").offset({// top: 200,// left: 200// });// 2. 获取距离带有定位父级位置(偏移) position 如果没有带有定位的父级,则以文档为准// 这个方法只能获取不能设置偏移console.log($(".son").position());// $(".son").position({// top: 200,// left: 200// });})
2.7.5 滚动位置
<div class="back">返回顶部</div><div class="container"></div>
body {height: 2000px;}.back {position: fixed;width: 50px;height: 50px;background-color: pink;right: 30px;bottom: 100px;display: none;}.container {width: 900px;height: 500px;background-color: skyblue;margin: 400px auto;}
$(function() {$(document).scrollTop(100);// 被卷去的头部 scrollTop() / 被卷去的左侧 scrollLeft()// 页面滚动事件var boxTop = $(".container").offset().top;$(window).scroll(function() {// console.log(11);console.log($(document).scrollTop());if ($(document).scrollTop() >= boxTop) {$(".back").fadeIn();} else {$(".back").fadeOut();}});// 返回顶部$(".back").click(function() {// $(document).scrollTop(0);$("body, html").stop().animate({scrollTop: 0});// $(document).stop().animate({// scrollTop: 0// }); 不能是文档而是 html和body元素做动画})})
3 事件
- mouseover
- show
- hover
- hide
- index
3.1 事件绑定
- 单个事件
// 1. 单个事件注册$("div").click(function() {$(this).css("background", "purple");});$("div").mouseenter(function() {$(this).css("background", "skyblue");});
- 多个事件
// 2. 事件处理on// (1) on可以绑定1个或者多个事件处理程序$("div").on({mouseenter: function() {$(this).css("background", "skyblue");},click: function() {$(this).css("background", "purple");},mouseleave: function() {$(this).css("background", "blue");}});$("div").on("mouseenter mouseleave", function() {$(this).toggleClass("current");});
- 事件委托
// (2) on可以实现事件委托(委派)// $("ul li").click();$("ul").on("click", "li", function() {alert(11);});// click 是绑定在ul 身上的,但是 触发的对象是 ul 里面的小li
- 给未来动态创建的元素绑定事件
// (3) on可以给未来动态创建的元素绑定事件// $("ol li").click(function() {// alert(11);// })$("ol").on("click", "li", function() {alert(11);})var li = $("<li>我是后来创建的</li>");$("ol").append(li);
3.2 事件解绑
$(function() {$("div").on({click: function() {console.log("我点击了");},mouseover: function() {console.log('我鼠标经过了');}});$("ul").on("click", "li", function() {alert(11);});// 1. 事件解绑 off// $("div").off(); // 这个是解除了div身上的所有事件$("div").off("click"); // 这个是解除了div身上的点击事件$("ul").off("click", "li");// 2. one() 但是它只能触发事件一次$("p").one("click", function() {alert(11);})})
