文章目录
- 初识jQuery
- 1.jQuery下载地址
- 2.jQuery核心函数和工具方法
- 3. jQuery属性操作
-
- 3.1 jQuery基本选择器
- 3.2 jQuery过滤选择器
- 3.3 属性节点
- 3.4 jQuery attr方法[掌握]
- 3.5 jQuery的prop方法[掌握]
- 3.6 attr和prop方法练习
- 3.7 jQuery操作类相关的方法[掌握]
- 3.8 jQuery文本值相关的方法
- 3.9 jQuery操作CSS样式的方法
- 3.10 jQuery位置和尺寸操作的方法
- 3.11 jQuery的scrollTop方法
- 3.12 jQuery事件绑定
- 3.13 jQuery事件移除
- 3.14 jQuery事件冒泡和默行为
- 3.15 jQuery事件自动触发
- 3.16 jQuery自定义事件
- 3.17 jQuery事件命名空间
- 3.20 Jquery事件命名空间面试题
- jQuery事件委托
- 3.21 jQuery事件委托练习
- jQuery移入移出事件
- Jquery的文档处理
初识jQuery
jQuery是什么?
- jQuery是一个JavaScript库,旨在简化HTML DOM树遍历和操作,以及事件处理,动画和Ajax。它是使用许可的MIT许可证的免费开源软件。Web分析表明它是大范围部署最广泛的JavaScript库,从命名可以看出jQuery最主要的用途是用来做查询(jQuery=js+Query)。
- jQuery的语法旨在使导航文档,选择DOM元素,创建动画,处理事件和开发Ajax应用程序变得更加容易。jQuery还为开发人员提供了在JavaScript库之上创建插件的功能。这使开发人员能够为低级交互和动画,高级效果和高级,可主题的小部件创建抽象。jQuery库的模块化方法允许创建功能强大的动态Web页面和Web应用程序。
体验jQuery
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>01-初识jQuery</title>
<style>
*{
margin: 0;
padding: 0;
}
div{
width: 100px;
height: 100px;
border: 1px solid #000;
}
</style>
<script src="js/jquery-1.12.4.js"></script>
<script>
window.onload = function (ev) {
// 1.利用原生的JS查找DOM元素
var div1 = document.getElementsByTagName("div")[0];
var div2 = document.getElementsByClassName("box1")[0];
var div3 = document.getElementById("box2");
console.log(div1);
console.log(div2);
console.log(div3);
// 2.利用原生的JS修改背景颜色
div1.style.backgroundColor = "red";
div2.style.backgroundColor = "blue";
div3.style.backgroundColor = "yellow";
}
$(function () {
var $div1 = $("div");
var $div2 = $(".box1");
var $div3 = $("#box2");
console.log($div1);
console.log($div2);
console.log($div3);
$div1.css({
background: "red",
width: "200px",
height: "200px"
});
$div2.css({
background: "blue"
});
$div3.css({
background: "yellow"
});
});
</script>
</head>
<body>
<div></div>
<div class="box1"></div>
<div id="box2"></div>
</body>
</html>
为什么要使用jQuery
-
强大选择器: 方便快速查找DOM元素
- 如上面实例所展示一样,通过jQuery查找DOM元素要比原生js快捷很多
- jQuery允许开发者使用CSS1-CSS3几乎所有的选择器,以及jQuery独创的选择器
-
链式调用: 可以通过
.
不断调用jQuery对象的方法
$(document).ready(function () {
var $div1 = $("div");
// 链式调用
$div1.eq(1).css(
'background',"red"
).css('width', '200px');
});
- 隐式遍历(迭代): 一次操作多个元素
$(document).ready(function(){
//隐式遍历找到的所有div
$("div).css('background','red');
});
- 读写合一: 读数据/写数据使用是一个函数
$(document).ready(function () {
// 读取数据
var $tx = $("div").eq(0).text();
alert($tx);
// 写入数据
$("div").eq(0).text("新的数据");
});
- 事件处理
- DOM操作(C增U改D删)
- 样式操作
- 动画
- 丰富的插件支持
- 浏览器兼容(前端开发者痛点)
-
JQery1.x版:兼容ie678,但相对其它版本文件较大,官方只做BUG维护,功能不再新增,最终版本:1.12.4 (2016年5月20日).
-
JQery2.x版:不兼容ie678,相对1.x文件较小,官方只做BUG维护,功能不再新增,最终版本:2.2.4 (2016年5月20日)
-
JQery3.x版:不兼容ie678,只支持最新的浏览器,很多老的jQuery插件不支持这个版本,相对1.x文件较小,提供不包含Ajax/动画API版本。
-
应该选择几点几版本jQuery?
- 查看百度网页源码:使用的是1.x
- 查看腾讯网页源码:使用的是1.x
- 查看京东网页源码:使用的是1.x
- 综上所述学习1.x,选择1.x
应该使用开发版还是生产版?
- 开发版: 所有代码没有经过压缩,体积更大(200-300KB)
- 生产版:所有代码经过压缩,提及更小(30-40KB)
- 初学者为了更好的理解jQuery编码时使用开发板,项目上线时为了提升访问速度使用生产版
1.jQuery下载地址
1.2 jQuery和JS的加载模式
原生JS和jQuery入口函数的加载模式不同
- 原生JS会等到DOM元素加载完毕,并且图片也加载完毕才会执行
- jQuery会等到DOM元素加载完毕,但不会等到图片也加载完毕
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jQuery和JS入口函数的区别</title>
<style>
div {
width: 100px;
height: 100px;
}
</style>
<!--引入jQuery-->
<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.12.4.min.js"></script>
<script>
// 原生JS和jQuery入口函数的加载模式不同
// 原生JS会等到DOM元素加载完毕,并且图片也加载完毕才会执行
// jQuery会等到DOM元素加载完毕,但不会等到图片也加载完毕
// 原生JS的固定写法
window.onload = function (ev) {
var img = document.getElementsByTagName("img")[0];
console.log(img);
var width = window.getComputedStyle(img).width;
console.log(width); //540px
}
//jQuery固定写法
$(document).ready(function (ev) {
var $width = $("img").width();
console.log($width); // 0
});
</script>
</head>
<body>
<img src="https://www.baidu.com/img/bd_logo1.png?where=super" alt="">
</body>
</html>
- 多个window.onload只会执行一次, 后面的会覆盖前面的
- 多个$(document).ready()会执行多次,后面的不会覆盖前面的
不会覆盖的本质
- jQuery框架本质是一个闭包,每次执行我们都会给ready函数传递一个新的函数,不同函数内部的数据不会相互干扰
/****只弹出Hello 3***/
window.onload = function (ev) {
alert("Hello 1");
}
window.onload = function (ev) {
alert("Hello 2");
}
window.onload = function (ev) {
alert("Hello 3");
}
/***** 都会弹出****/
$(document).ready(function (ev) {
alert("Hello 1");
});
$(document).ready(function (ev) {
alert("Hello 2");
});
$(document).ready(function (ev) {
alert("Hello 3");
});
为什么我们能访问$
符号
- 因为
$
符号是jQuery框架对外暴露的一个全局变量
window.jQuery = window.$ = jQuery;
- 所以想要使用jQuery框架只有两种方式,一种是通过$,一种是通过jQuery
1.3 jQuery入口函数的其他编写方式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>03-jQuery和JS入口函数的区别</title>
<script src="js/jquery-1.12.4.js"></script>
<script>
/*
window.onload = function (ev) {
// 1.通过原生的JS入口函数可以拿到DOM元素
var images = document.getElementsByTagName("images")[0];
console.log(images);
// 2.通过原生的JS入口函数可以拿到DOM元素的宽高
var width = window.getComputedStyle(images).width;
console.log("onload", width);
}
*/
/*
* 1.原生JS和jQuery入口函数的加载模式不同
* 原生JS会等到DOM元素加载完毕,并且图片也加载完毕才会执行
* jQuery会等到DOM元素加载完毕,但不会等到图片也加载完毕就会执行
* */
/*
$(document).ready(function () {
// 1.通过jQuery入口函数可以拿到DOM元素
var $images = $("images");
console.log($images);
// 2.通过jQuery入口函数不可以拿到DOM元素的宽高
var $width = $images.width();
console.log("ready", $width);
});
*/
/*
1.原生的JS如果编写了多个入口函数,后面编写的会覆盖前面编写的
2.jQuery中编写多个入口函数,后面的不会覆盖前面的
*/
// window.onload = function (ev) {
// alert("hello lnj1");
// }
// window.onload = function (ev) {
// alert("hello lnj2");
// }
$(document).ready(function () {
alert("hello lnj1");
});
$(document).ready(function () {
alert("hello lnj2");
});
</script>
</head>
<body>
<img src="https://img.alicdn.com/tfs/TB1P_MofwmTBuNjy1XbXXaMrVXa-190-140.gif" alt="">
</body>
</html>
1.4 jQuery入口函数的其它写法
<script>
// 1.第一种写法
$(document).ready(function () {
// alert("hello lnj");
});
// 2.第二种写法
jQuery(document).ready(function () {
// alert("hello lnj");
});
// 3.第三种写法(推荐)
$(function () {
// alert("hello lnj");
});
// 4.第四种写法
jQuery(function () {
alert("hello lnj");
});
</script>
1.5jQuery冲突问题
很多js的框架都提供了类似jQuery这样的便捷访问方式,所以很有可能某一天我们在使用多个框架的时,多个框架作者提供的便捷访问方式冲突(A框架通过访 问 , B 框 架 也 通 过 访问,B框架也通过访问,B框架也通过访问),解决方案见代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>05-jQuery冲突问题</title>
<script src="js/jquery-1.12.4.js"></script>
<script src="js/test.js"></script>
<script>
// 1.释放$的使用权
// 注意点: 释放操作必须在编写其它jQuery代码之前编写
// 释放之后就不能再使用$,改为使用jQuery
// jQuery.noConflict();
// 2.自定义一个访问符号
var nj = jQuery.noConflict();
nj(function () {
alert("hello lnj");
});
</script>
</head>
<body>
</body>
</html>
2.jQuery核心函数和工具方法
2.1jQuery核心函数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>06-jQuery核心函数</title>
<script src="js/jquery-1.12.4.js"></script>
<script>
// $();就代表调用jQuery的核心函数
// 1.接收一个函数
$(function () {
alert("hello lnj");
// 2.接收一个字符串
// 2.1接收一个字符串选择器
// 返回一个jQuery对象, 对象中保存了找到的DOM元素
var $box1 = $(".box1");
var $box2 = $("#box2");
console.log($box1);
console.log($box2);
// 2.2接收一个字符串代码片段
// 返回一个jQuery对象, 对象中保存了创建的DOM元素
var $p = $("<p>我是段落</p>");
console.log($p);
$box1.append($p);
// 3.接收一个DOM元素
// 会被包装成一个jQuery对象返回给我们
var span = document.getElementsByTagName("span")[0];
console.log(span);
var $span = $(span);
console.log($span);
});
</script>
</head>
<body>
<div class="box1"></div>
<div id="box2"></div>
<span>我是span</span>
</body>
</html>
2.2 JQuery对象
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>07-jQuery对象</title>
<script src="js/jquery-1.12.4.js"></script>
<script>
$(function () {
/*
* 1.什么是jQuery对象
* jQuery对象是一个伪数组
*
*/
var $div = $("div");
console.log($div);
var arr = [1, 3, 5];
console.log(arr);
});
</script>
</head>
<body>
<div>div1</div>
<div>div2</div>
<div>div3</div>
</body>
</html>
什么是伪数组?
- 有0到length-1的属性
- 并且有length属性
例如:
var obj = {
0:"lnj", 1:"33", 2:"male", length: 3}
2.3 JQuery静态方法和实例方法
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>08-静态方法和实例方法</title>
<script>
// 1.定义一个类
function AClass() {
}
// 2.给这个类添加一个静态方法
// 直接添加给类的就是静态方法
AClass.staticMethod = function () {
alert("staticMethod");
}
// 静态方法通过类名调用
AClass.staticMethod();
// 3.给这个类添加一个实例方法
AClass.prototype.instanceMethod = function () {
alert("instanceMethod");
}
// 实例方法通过类的实例调用
// 创建一个实例(创建一个对象)
var a = new AClass();
// 通过实例调用实例方法
a.instanceMethod();
</script>
</head>
<body>
</body>
</html>
2.4 静态方法each
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>09-静态方法each方法</title>
<script src="js/jquery-1.12.4.js"></script>
<script>
var arr = [1, 3, 5, 7, 9];
var obj = {
0:1, 1:3, 2:5, 3:7, 4:9, length:5};
/*
第一个参数: 遍历到的元素
第二个参数: 当前遍历到的索引
注意点:
原生的forEach方法只能遍历数组, 不能遍历伪数组
*/
arr.forEach(function (value, index) {
console.log(index, value);
});
obj.forEach(function (value, index) {
console.log(index, value);
});
// 1.利用jQuery的each静态方法遍历数组
/*
第一个参数: 当前遍历到的索引
第二个参数: 遍历到的元素
注意点:
jQuery的each方法是可以遍历伪数组的
*/
$