JQuery总结——常用API、常用方法操作、事件操作、微博发布案例、拷贝对象(深拷贝、浅拷贝)等

一、jQuery概述
  1. 什么是jQuery?
    它是一个简单、快速的JS库,它设计的宗旨是“write less , do more”,因此它非常简洁,它还对于JS中的DOM进行了封装,优化了DOM操作、事件处理、动画设计等,让我们可以快速的查询使用里面的功能。
    学习jQuery就是学习调用这些方法。

  2. 它的优点有哪些?
    ①轻量级,不影响页面的加载速度
    ②跨浏览器兼容
    ③含有链式编程、隐式迭代
    ④对事件、样式、动画支持,简化了DOM操作
    ⑤支持插件扩展开发,有丰富的第三方插件,能方便的制作轮播图、树形菜单等
    ⑥免费、开源

  3. jQuery代码写在那里,如何书写?
    jQuery的代码不仅要写在<script></script>标签内还要写在入口函数内。在使用jQuery之前一定要在官网中下载 jquery.min.js 文件并引入页面中

  4. 什么是入口函数?
    jQuery有两种入口函数的写法,如下:


// $(document).ready(function() {
	// 	DOM加载完成的入口
// });

$(function() {
	// 	DOM加载完成的入口
})

平时书写更推荐第二种(因为更简单)。
入口函数是等着DOM结构渲染完毕就可以执行内部代码,不用等到所有外部资源加载完毕,因为jQuery已经完成了封装。
它相当于原生JS中的DOMContentLoaded.

二、jQuery对象与DOM对象
  1. jQuery的顶级对象就是我们上面看到的 $ 符号,它等价于 jQuery 这个单词,因此书写时可以替换,但是平时写成$,为了避免多库冲突(写在后面)时写成 jQuery。
  2. 这个顶级对象相当于原生JS中的 window。把元素利用顶级对象包装成jQuery对象,就可以调用里面的方法了。
  3. DOM对象:用原生JS获取过来的对象
var mydiv = document.querySelector('div');
  1. jQuery对象:用 jquery 获取的对象,本质是通过 $ 对 DOM 元素进行包装
$("div");
  1. 需要注意的是jQuery对象 只能使用 jQuery 的方法, DOM对象只能使用原生 JS 属性和方法,两者不能混淆。
  2. 两种对象之间的转换:
    DOM 对象转换为 jQuery 对象:
    ①直接获取 $("div");
    ②使用原生 JS 获取过来的 DOM 对象
var mydiv = document.querySelector("div");
$(mydiv);

jQurey 对象转换为 DOM 对象:
①jQurey对象[index].方法
②jQurey对象.get(index).方法

$("div")[index]
$("div").get(index)
三、隐式迭代与常用API
1. 隐式迭代

遍历内部DOM元素(以伪数组形式存储)的过程叫隐式迭代。简单理解就是元素内部自己遍历,执行相同的方法。不需要使用for循环。

2. 基础选择器

包括ID选择器、全选选择器、类选择器、标签选择器、并集选择器、交集选择器…
其中层级选择器还有子代选择器和后代选择器比较常用。

$("选择器") // $("#id")
$("子代选择器") // $("ul>li")
3. 筛选选择器

:first $("li:first") // 选择第一个li
:last $("li:last") // 选择最后一个li
:eq(index) $("li:eq(2)") // 选择索引号为 2 的li
:odd $("li:odd") // 选择索引号为奇数的 li
:even $("li:even") // 选择索引号为偶数的 li

4. 筛选方法

.parent()                  返回最近一级的父元素
.children(选择器)     选出亲儿子
.find(选择器)            选出父元素的所有孩子,包括儿子和孙子
.siblings(选择器)     选择除了自身以外的所有兄弟元素
.eq(index) 相当于 :eq(index) $("li:eq(2)") // 选择索引号为 2 的li

5. 样式操作
$("选择器").css("属性名") // 返回属性值
$("选择器").css("属性名", "属性值") // 设置属性值
$("选择器").css({"属性名", "属性值"}) // 参数为对象则可以设置多个样式
6. 类操作
//添加类
// $("选择器").addClass("类名")
$("div").addClass("current");
// 删除类
$("div").removeClass("current");
// 切换类
$("div").toggleClass("current");

jQuery中类操作的addClass与原生JS中 className最主要的区别是:原生JS中 className会覆盖原来的类,addClass是追加类,不会覆盖。

7.属性操作

①获取/设置元素的固有属性

element.prop("属性名") // 获取固有属性
element.prop("属性名", "属性值") // 设置固有属性

②获取/设置元素的自定义属性

element.attr("属性名") // 获取自定义属性
element.attr("属性名", "属性值") // 设置自定义属性

③数据缓存 data()
就是将获取过来的元素当成一个变量,可以在它身上存储数据,这个数据存在内存中,我们可以取出来,并且他不会修改DOM元素的结构,页面刷新以后,这个数据也会被移除。数据缓存还可以获取H5自定义属性 data-index ,需要注意写的时候 不加 data- 并且返回的数字型。

$("span").data("uname", "andy");
console.log($("span").data("uname")); //控制台显示 andy
//获取H5自定义属性 data-index 写的时候 不加 data- 并且返回的数字型
console.log($("div").data("index"));
8. 内容文本

①设置/获取内容             .html()
②设置/获取文本内容      .text()
③设置/获取表单值          .val()

9. 元素操作

① 遍历元素 $.each() (常用)
针对同一类元素做不同操作需要用到遍历,这个方法主要用于遍历数据,处理数据。这个方法不仅可以遍历数组,也可以遍历对象

// 遍历元素
$.each($("div"), function(index, ele) {
	console.log(index); // 输出索引号
	console.log(ele); // 输出元素对象
});
// 遍历对象/数组
$.each({
	name: "andy",
	age: 18
}, function(i, ele) {
	console.log(i); // 输出属性名
	console.log(ele); // 输出属性值
});

② 创建元素$("需要创建的元素标签对") 如 $("<li>我是后来创建的</li>")
③ 添加元素
    (1) 内部添加的是父子关系

$("ul").append(li); // 放到内容之后
$("ul").prepend(li); // 放到内容之前

    (2) 外部添加的是兄弟关系

$(".test").after(div); // 添加到元素之后
$(".test").before(div); // 添加到元素之前

④删除元素
删除匹配元素: .remove()
删除匹配元素里面的子节点: .empty()
删除匹配元素里面的子节点: .html()

四、事件
  1. 绑定事件 .on() 方法
    在匹配元素上绑定一个/多个事件处理函数element.on("事件类型", [子元素选择器], 回调函数)
<script>
	$(function() {
		// 1.单个事件注册
		// $("div").click(function() {
		// 	$(this).css("background", "pink")
		// });
		// $("div").mouseenter(function() {
		// 	$(this).css("background", "blue")
		// });
				
		// 2.事件处理on
		$("div").on({
			mouseenter: function() {
				$(this).css("background", "#ccc")
			},
			click: function() {
				$(this).css("background", "red")
			}
		});
				
		// 3.事件委托
		// click是绑定在ul 上面的 但是触发的是 li
		$("ul").on("click", "li", function() {
			alert(11);
		});
				
		// 4.给动态创建的元素绑定事件
		$("ol").on("click", "li", function() {
			alert(22);
		});
		var li = $("<li>后来建的</li>");
			$("ol").append(li);
		});
</script>

优势:①可以绑定多个事件,有多个事件处理程序 ,若事件处理程序相同,可以用空格隔开事件,使得代码简洁美观
②能够进行事件委托

  1. 解绑事件 .off()
    用来移除通过 on() 绑定的事件,它可以解除所有事件

  2. 仅触发事件一次的方法 one()

  3. 自动触发事件
    ①元素.事件()$("div").click(); // 刷新页面自动触发
    ②元素.trigger(“事件”) $("div").trigger("click");
    ③元素.triggerHandler(“事件”) 与上面两种方法的区别是它不会触发元素的默认行为,例如表单获得焦点之后光标闪动$("div").triggerHandler("click");

  4. 微博发布信息案例
    ①点击发布按钮就可以动态的创建 li , 取文本框的内容赋给li中并添加一个删除按钮,添加到 ul 中
    ②点击删除,将li 删除由于li中的删除链接是动态创建的,没有办法直接利用click事件进行删除所以使用 on()和事件委托

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>发布微博案例</title>
		<style type="text/css">
			.box {
				width: 600px;
				margin: 100px auto;
				border: 1px solid black;
				text-align: center;
				padding-top: 30px;
			}
			ul {
				width: 450px;
				padding-left: 80px;
				list-style: none;
			}
			ul li {
				line-height: 25px;
				border-bottom: 1px dashed #CCCCCC;
			}
			input {
				float: right;
			}
			ul li a{
				float: right;
			}
		</style>
		<script src="jquery.min.js"></script>
		<script>
			$(function() {
				// 1.点击发布按钮就可以动态的创建 li , 取文本框的内容赋给li中并添加一个删除按钮,添加到 ul 中
				$(".btn").on("click", function() {
					var li = $("<li></li>");
					li.html($(".txt").val() + "<a href='javascript:;'>删除</a>")
					$("ul").prepend(li);
					li.slideDown();
					$(".txt").val("");
				});
				// 2.点击删除,将li 删除 
				// 因为程序是自上而下执行的,当没有点击删除的时候执行下面代码
				// 又因为li中的删除链接是动态创建的,没有办法直接利用click事件进行删除所以使用 on()和事件委托
				$("ul").on("click", "a",function() {
					$(this).parent().slideUp(function() {
						$(this).remove();
					})
				});
			})
		</script>
	</head>
	<body>
		<div class="box" id="weibo">
			<span>微博发布</span>
			<textarea class="txt" cols="30" rows="10" style="resize: none;"></textarea>
			<button class="btn">发布</button>
			<ul></ul>
		</div>
	</body>
</html

在这里插入图片描述

五、拷贝对象

使用 $.extend([deep], target, obj1, objn) 方法
deep若为  true  则为深拷贝,反之为浅拷贝
target:  目标对象
obj1:  要拷贝对象的第一个对象
objn:  要拷贝对象的第n个对象

浅拷贝: 浅拷贝是把 原来对象的 复杂数据类型中的地址拷贝给目标对象,因此他们指向同一个地址
修改目标对象的复杂数据类型中的值 原来对象里面的值也会被覆盖(受影响)
深拷贝: 直接将原来对象克隆给目标对象 即拷贝的是一个对象而不是地址,不会覆盖冲突的值 而会合并冲突属性
修改目标对象的复杂数据类型中的值 原来对象里面的值不会受影响 因为他们在内存中指向单独的对象

六、多库共存引发的冲突
  1. 原因:编写一个网站往往会用到很多的JS库,其中难免 $ 会与其他的JS库冲突
  2. 解决方法:
    ① 将 $ 统一写成 jQuery
    ② 使用自定义变量 jQuery.noConflict()
var xx = jQuery.noConflict();
console.log(xx("span"));
  • 10
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值