无知的我已经复盘完成JQuery 。。。
文章目录
- JQuery
- 概述
- 入口函数
- 特性-隐式迭代
- Dom和JQuery
- 区别
- 互相转化
- JQuery选择器
- 基本和层级选择器
- 筛选选择器
- 后缀筛选
- 方法筛选
- 应用排他思想
- 应用链式编程
- JQuery操作样式
- 修改样式CSS
- 修改类名
- JQuery效果
- 基础效果
- 显示效果
- 隐藏效果
- 切换效果
- 滑动效果
- 事件切换
- 案例-tab栏切换
- 停止动画排队
- 淡入淡出效果
- 自定义动画
- JQuery操作属性
- 内容-语法
- 案例-购物车全选
- JQuery操作文本值
- 语法-例子
- 案例-增加商品数量
- 案例-修改商品小计
- JQuery遍历
- each方法
- $.each方法
- JQuery操作元素
- 案例-清理购物车
JQuery
概述
历史
jQuery 是一个快速、简洁的 JavaScript 库,其设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。
j 就是 JavaScript; Query 查询; 意思就是查询js,把js中的DOM操作做了封装,我们可以快速的查询使用里面的功能。
作用
jQuery 封装了 JavaScript 常用的功能代码,优化了 DOM 操作、事件处理、动画设计和 Ajax 交互。
jQuery 出现的目的是加快前端人员的开发速度,我们可以非常方便的调用和使用它,从而提高开发效率。
优点
- 轻量级。核心文件才几十kb,不会影响页面加载速度
- 跨浏览器兼容。基本兼容了现在主流的浏览器
- 链式编程、隐式迭代
- 对事件、样式、动画支持,大大简化了DOM操作
- 支持插件扩展开发。有着丰富的第三方的插件,例如:树形菜单、日期控件、轮播图等
- 免费、开源
学习jQuery:
-
本质:就是学习调用这些函数(方法)
-
官网地址: https://jquery.com/
-
各个版本的下载:https://code.jquery.com/
-
//版本说明
-
1x :兼容 IE 678 等低版本浏览器, 官网不再更新
-
2x :不兼容 IE 678 等低版本浏览器, 官网不再更新
-
3x :不兼容 IE 678 等低版本浏览器, 是官方主要更新维护的版本
-
入口函数
**作用:**在编写代码中,在html标签之前,就可以编写scirpt标签中的jquery,并且常规生效。
$(document).ready(function(){
... // 此处是页面DOM加载完成的入口
});
$(function () {
... // 此处是页面 DOM 加载完成的入口
}) ;
特性-隐式迭代
过程:
给匹配到的所有元素进行循环遍历,执行相应的方法,而不用我们再进行循环,简化我们的操作,方便我们调用。
一句话:
遍历内部 DOM 元素(伪数组形式存储)的过程就叫做隐式迭代
Dom和JQuery
区别
获取对象
-
用原生 JS 获取来的对象就是 DOM 对象
-
jQuery 方法获取的元素就是 jQuery 对象。
-
jQuery 对象本质是: 利用$对DOM 对象包装后产生的对象(伪数组形式存储)。
修改样式
- 原生 JS 中: className 会覆盖元素原先里面的类名。
- jQuery 里:类操作只是对指定类进行操作,不影响原先的类名。
调用方法
互相转化
方法关键词:
1.利用${}符号
2.利用[]符号
例子:
1.DOM 对象转换为 jQuery 对象:
$('div')
2.jQuery 对象转换为 DOM 对象(两种方式)
$('div') [index] //index 是索引号
$('div') .get(index) //index 是索引号
JQuery选择器
基本和层级选择器
筛选选择器
后缀筛选
方法筛选
常用重点: parent() children() find() siblings() eq()
应用排他思想
是什么:想要多选一的效果,排他思想:当前元素设置样式,其余的兄弟元素清除样式。
$(this).css(“color”,”red”);
$(this).siblings(). css(“color”,””);
应用链式编程
**应用例子:**排他思想
$(this).css('color', 'red').sibling().css('color', '');
JQuery操作样式
修改样式CSS
1.只写属性名; 返回属性值
$(this).css(''color'');
2.修改
$(this).css(''color'', ''red'');
3.修改多组
$(this).css({ "color":"white","font-size":"20px"});
修改类名
1.添加类
$(“div”).addClass(''current'');
2.移除类
$(“div”).removeClass(''current'');
3.切换类
$(“div”).toggleClass(''current'');
JQuery效果
最为常见的:
基础效果
显示效果
1.语法
show([speed,[easing],[fn]])
2.语法说明
(1)参数都可以省略, 无动画直接显示。
(2)@speed:三种预定速度之一的字符串(“slow”,“normal”, or “fast”)或表示动画时长的毫秒数值(如:1000)。
(3)@easing:(Optional) 用来指定切换效果,默认是“swing”,可用参数“linear”。
(4)@fn: 回调函数,在动画完成时执行的函数,每个元素执行一次。
隐藏效果
1.语法
hide([speed,[easing],[fn]])
2.语法参数说明
(1)参数都可以省略, 无动画直接显示。
(2)@speed:三种预定速度之一的字符串(“slow”,“normal”, or “fast”)或表示动画时长的毫秒数值(如:1000)。
(3)@easing:(Optional) 用来指定切换效果,默认是“swing”,可用参数“linear”。
(4)@fn: 回调函数,在动画完成时执行的函数,每个元素执行一次。
切换效果
1.语法
toggle([speed,[easing],[fn]])
2.语法参数说明
(1)参数都可以省略, 无动画直接显示。
(2)@speed:三种预定速度之一的字符串(“slow”,“normal”, or “fast”)或表示动画时长的毫秒数值(如:1000)。
(3)@easing:(Optional) 用来指定切换效果,默认是“swing”,可用参数“linear”。
(4)@fn: 回调函数,在动画完成时执行的函数,每个元素执行一次。
建议:平时一般不带参数,直接显示隐藏即可。
滑动效果
下滑效果
slideDown([speed,[easing],[fn]])
上滑效果
slideUp([speed,[easing],[fn]])
切换效果
slideToggle([speed,[easing],[fn]])
事件切换
hover([over,]out)
(1)over:鼠标移到元素上要触发的函数(相当于mouseenter)
(2)out:鼠标移出元素要触发的函数(相当于mouseleave)
(3)如果只写一个函数,则鼠标经过和离开都会触发它
案例-tab栏切换
引出问题
停止动画排队
描述:停止上一个动画
语法:
stop()
例子:tab栏切换
淡入淡出效果
fadeIn()
fadeOut()
fadeToggle()
渐进方式调整到指定的不透明度:
fadeTo([[speed],opacity,[easing],[fn]])
@opacity 透明度必须写,取值 0~1 之间。
@speed:(“slow”,“normal”, or “fast”)或表示动画时长的毫秒数值(如:1000)。必须写
自定义动画
1 语法:
animate(params,[speed],[easing],[fn])
@params: 想要更改的样式属性,以对象形式传递,必须写。 属性名可以不用带引号, 如果是复合属性则需要采取驼峰命名法 borderLeft。其余参数都可以省略。
JQuery操作属性
内容-语法
1 操作原生标签属性
1.1 语法-获取属性
prop(''属性'')
1.2 语法-修改属性
prop(''属性'', ''属性值'')
2 操作自定义属性
1 语法-获取属性
attr(''属性'')
2 语法-修改属性
attr(''属性'', ''属性值'')
3 数据缓存
3.1 语法-获取数据
data("\name")
3.2 语法-修改数据
data("\name","\value")
案例-购物车全选
思路:
①全选思路:里面3个小的复选框按钮(j-checkbox)选中状态(checked)跟着全选按钮(checkall)走。
②因为checked 是复选框的固有属性,此时我们需要利用prop()方法获取和设置该属性。
③把全选按钮状态赋值给3小复选框就可以了。
④当我们每次点击小的复选框按钮,就来判断:
⑤如果小复选框被选中的个数等于3 就应该把全选按钮选上,否则全选按钮不选。
⑥:checked 选择器 :checked 查找被选中的表单元素。
// 1. 全选 全不选功能模块
// 就是把全选按钮(checkall)的状态赋值给 三个小的按钮(j-checkbox)就可以了
// 事件可以使用change
$(".checkall").change(function() {
// console.log($(this).prop("checked"));
$(".j-checkbox, .checkall").prop("checked", $(this).prop("checked"));
if ($(this).prop("checked")) {
// 让所有的商品添加 check-cart-item 类名
$(".cart-item").addClass("check-cart-item");
} else {
// check-cart-item 移除
$(".cart-item").removeClass("check-cart-item");
}
});
// 2. 如果小复选框被选中的个数等于3 就应该把全选按钮选上,否则全选按钮不选。
$(".j-checkbox").change(function() {
// if(被选中的小的复选框的个数 === 3) {
// 就要选中全选按钮
// } else {
// 不要选中全选按钮
// }
// console.log($(".j-checkbox:checked").length);
// $(".j-checkbox").length 这个是所有的小复选框的个数
if ($(".j-checkbox:checked").length === $(".j-checkbox").length) {
$(".checkall").prop("checked", true);
} else {
$(".checkall").prop("checked", false);
}
if ($(this).prop("checked")) {
// 让当前的商品添加 check-cart-item 类名
$(this).parents(".cart-item").addClass("check-cart-item");
} else {
// check-cart-item 移除
$(this).parents(".cart-item").removeClass("check-cart-item");
}
});
JQuery操作文本值
语法-例子
<script>
// 1. 获取设置元素内容 html()
console.log($("div").html());
// $("div").html("123");
// 2. 获取设置元素文本内容 text()
console.log($("div").text());
$("div").text("123");
// 3. 获取设置表单值 val()
console.log($("input").val());
$("input").val("123");
</script>
案例-增加商品数量
思路:
①核心思路:首先声明一个变量,当我们点击+号(increment),就让这个值++,然后赋值给文本框。
②注意1: 只能增加本商品的数量, 就是当前+号的兄弟文本框(itxt)的值。
③修改表单的值是val() 方法
④注意2: 这个变量初始值应该是这个文本框的值,在这个值的基础上++。要获取表单的值
⑤减号(decrement)思路同理,但是如果文本框的值是1,就不能再减了。
案例-修改商品小计
思路:
①核心思路:每次点击+号或者-号,根据文本框的值 乘以 当前商品的价格 就是 商品的小计
②注意1: 只能增加本商品的小计, 就是当前商品的小计模块(p-sum)
③修改普通元素的内容是text() 方法
④注意2: 当前商品的价格,要把¥符号去掉再相乘 截取字符串 substr(1)
⑤parents(‘选择器’) 可以返回指定祖先元素
⑥最后计算的结果如果想要保留2位小数 通过 toFixed(2) 方法
⑦用户也可以直接修改表单里面的值,同样要计算小计。 用表单change事件
⑧用最新的表单内的值 乘以 单价即可 但是还是当前商品小计
知识点:
- 获取父父元素的简便方法
- 保留两位小数的方法
// 1. 全选 全不选功能模块
// 就是把全选按钮(checkall)的状态赋值给 三个小的按钮(j-checkbox)就可以了
// 事件可以使用change
$(".checkall").change(function() {
// console.log($(this).prop("checked"));
$(".j-checkbox, .checkall").prop("checked", $(this).prop("checked"));
if ($(this).prop("checked")) {
// 让所有的商品添加 check-cart-item 类名
$(".cart-item").addClass("check-cart-item");
} else {
// check-cart-item 移除
$(".cart-item").removeClass("check-cart-item");
}
});
// 2. 如果小复选框被选中的个数等于3 就应该把全选按钮选上,否则全选按钮不选。
$(".j-checkbox").change(function() {
// if(被选中的小的复选框的个数 === 3) {
// 就要选中全选按钮
// } else {
// 不要选中全选按钮
// }
// console.log($(".j-checkbox:checked").length);
// $(".j-checkbox").length 这个是所有的小复选框的个数
if ($(".j-checkbox:checked").length === $(".j-checkbox").length) {
$(".checkall").prop("checked", true);
} else {
$(".checkall").prop("checked", false);
}
if ($(this).prop("checked")) {
// 让当前的商品添加 check-cart-item 类名
$(this).parents(".cart-item").addClass("check-cart-item");
} else {
// check-cart-item 移除
$(this).parents(".cart-item").removeClass("check-cart-item");
}
});
// 3. 增减商品数量模块 首先声明一个变量,当我们点击+号(increment),就让这个值++,然后赋值给文本框。
$(".increment").click(function() {
// 得到当前兄弟文本框的值
var n = $(this).siblings(".itxt").val();
// console.log(n);
n++;
$(this).siblings(".itxt").val(n);
// 3. 计算小计模块 根据文本框的值 乘以 当前商品的价格 就是 商品的小计
// 当前商品的价格 p
var p = $(this).parents(".p-num").siblings(".p-price").html();
// console.log(p);
p = p.substr(1);
console.log(p);
var price = (p * n).toFixed(2);
// 小计模块
// toFixed(2) 可以让我们保留2位小数
$(this).parents(".p-num").siblings(".p-sum").html("¥" + price);
getSum();
});
$(".decrement").click(function() {
// 得到当前兄弟文本框的值
var n = $(this).siblings(".itxt").val();
if (n == 1) {
return false;
}
// console.log(n);
n--;
$(this).siblings(".itxt").val(n);
// var p = $(this).parent().parent().siblings(".p-price").html();
// parents(".p-num") 返回指定的祖先元素
var p = $(this).parents(".p-num").siblings(".p-price").html();
// console.log(p);
p = p.substr(1);
console.log(p);
// 小计模块
$(this).parents(".p-num").siblings(".p-sum").html("¥" + (p * n).toFixed(2));
getSum();
});
// 4. 用户修改文本框的值 计算 小计模块
$(".itxt").change(function() {
// 先得到文本框的里面的值 乘以 当前商品的单价
var n = $(this).val();
// 当前商品的单价
var p = $(this).parents(".p-num").siblings(".p-price").html();
// console.log(p);
p = p.substr(1);
$(this).parents(".p-num").siblings(".p-sum").html("¥" + (p * n).toFixed(2));
getSum();
});
// 5. 计算总计和总额模块
getSum();
function getSum() {
var count = 0; // 计算总件数
var money = 0; // 计算总价钱
$(".itxt").each(function(i, ele) {
count += parseInt($(ele).val());
});
$(".amount-sum em").text(count);
$(".p-sum").each(function(i, ele) {
money += parseFloat($(ele).text().substr(1));
});
$(".price-sum em").text("¥" + money.toFixed(2));
}
JQuery遍历
each方法
$(function() {
// $("div").css("color", "red");
// 如果针对于同一类元素做不同操作,需要用到遍历元素(类似for,但是比for强大)
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());
})
console.log(sum);
$.each方法
// 2. $.each() 方法遍历元素 主要用于遍历数据,处理数据
// $.each($("div"), function(i, ele) {
// console.log(i);
// console.log(ele);
// });
// $.each(arr, function(i, ele) {
// console.log(i);
// console.log(ele);
// })
$.each({
name: "andy",
age:d 18
}, function(i, ele) {
console.log(i); // 输出的是 name age 属性名
console.log(ele); // 输出的是 andy 18 属性值
})
JQuery操作元素
$(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(""); // 可以删除匹配的元素里面的子节点 孩子
})
案例-清理购物车
// 6. 删除商品模块
// (1) 商品后面的删除按钮
$(".p-action a").click(function() {
// 删除的是当前的商品
$(this).parents(".cart-item").remove();
getSum();
});
// (2) 删除选中的商品
$(".remove-batch").click(function() {
// 删除的是小的复选框选中的商品
$(".j-checkbox:checked").parents(".cart-item").remove();
getSum();
});
// (3) 清空购物车 删除全部商品
$(".clear-all").click(function() {
$(".cart-item").remove();
getSum();
})