前端之jQuery使用详情介绍

昨日内容回顾

  • JS标签查找
# 直接查找
	document.getElementById()	根据ID获取一个标签
	document.getElementsByClass()	根据class属性获取
	document.getElementsByTagName()	根据标签名获取标签合集

# 间接查找
	parentElement            父节点标签元素
	children                 所有子标签
	firstElementChild        第一个子标签元素
	lastElementChild         最后一个子标签元素
	nextElementSibling       下一个兄弟标签元素
	previousElementSibling	 上一个兄弟标签元素
  • JS操作节点
var aEle = document.createElement('a');  # 创建标签
setAttribute("属性名","属性值")
innerText
innerHTML
append
remove
  • 获取值操作
标签对象.value	# 普通文本类型
标签对象.files  # 文件类型
  • class与样式操作
classList		查看所有的类
classList.add		添加类
classList.remove	删除指定类
classList.contains	存在返回true,否则返回false
classList.toggle	存在就删除,否则添加

标签对象.style.属性名 = 属性值
  • 事件
# 绑定事件的两种方式

# js代码应该编写和导入在哪个位置

# 常见事件
	onclick
	onfocus
	onblur
	onchange
"""
熟练昨天事件的所有练习题:
	时间计时器
	数据校验
	省市联动
"""

今日内容概要

  • 前端类库之jQuery
  • jQuery查找标签
  • jQuery操作节点
  • jQuery绑定事件
  • jQuery知识补充

内容详细

1.jQuery简介

# jQuery是一个轻量级的、兼容多浏览器的JavaScript库(内部封装了js代码)

# 它的宗旨就是:Write less, do more.

# 作为第三方的类库:使用它需要提前导入
	版本:1.x 2.x 3.x  # 可以使用3.x最新版
        
# 下载:
	01 进入官网:https://jquery.com/
	02 直接点击download jQuery
	03 选择下载文件
		Download the compressed, production jQuery 3.6.0  # 打包压缩版
		Download the uncompressed, development jQuery 3.6.0  # 未压缩版
    
"""
直接下载链接地址:
	https://code.jquery.com/jquery-3.6.0.min.js
"""

	04 使用方式一:本地导入
		将官网的源代码复制到本地(pycharm新建一个js文件中存放) 
		在本地HTML文件中 head标签内用script标签导入即可
			<script src="文件路径"></script>
		"""
		缺点在于需要提前下载文件
		优点在于不会受到网络的影响
		"""
            
	05 使用方式二:CDN导入
		CDN:内容分发网络
		网站:bootcdn  https://www.bootcdn.cn/jquery/  
		jquery最好使用3.4.1版本
		复制script标签到本地HTML文件中 head标签内用script标签导入即可
		<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
"""
可以直接将导入语句放在pycharm中HTML模板内 这样在新建HTML文件时会自动加上
路径:
	file >> settings >> Editor >> file and code templates
"""


# 基本使用
	很多时候jQuery都是一行代码搞定所有
	"""
	使用jQuery需要有关键字声明
		jQuery() === $()
	"""

image

image

2.基本选择器

"""
如何通过变量名来区分指代的是何种对象?
	eg:
		如果是命名原生的js对象
			var pEle = ...
		如果是命名jQuery的对象
			var $pEle = ...
"""

# id选择器:
	$("#id") >>相当于js的>> document.getElementById('d1')

# 标签选择器:
	$("tagName") >>相当于js的>> document.getElementsByTagName('p')

# class选择器:
	$(".className") >>相当于js的>> document.getElementsByClassName('c1')
    
# 配合使用:
	$("div.c1")  // 找到有c1 class类的div标签

# 所有元素选择器:
	$("*")

# 组合选择器:
	$("#id, .className, tagName")  // 查找 id或 class或 标签名符合的标签
  

# 层级选择器:
	x和y可以为任意选择器
	$("x y");  // x的所有后代y(子子孙孙)
	$("x > y");  // x的所有儿子y(儿子)
	$("x + y");  // 找到所有紧挨在x后面的y
	$("x ~ y");  // x之后所有的兄弟y

3.基本筛选器

:first  // 第一个
:last  // 最后一个
:eq(index)  // 索引等于index的那个元素
:even  // 匹配所有索引值为偶数的元素,从 0 开始计数
:odd  // 匹配所有索引值为奇数的元素,从 0 开始计数
:gt(index)  // 匹配所有大于给定索引值的元素
:lt(index)  // 匹配所有小于给定索引值的元素
:not(元素选择器)  // 移除所有满足not条件的标签
:has(元素选择器)  // 选取所有包含一个或多个标签在其内的标签(指的是从后代元素找)
    
    
# 示例:
	$("div:has(h1)")  // 找到所有后代中有h1标签的div标签
	$("div:has(.c1)")  // 找到所有后代中有c1样式类的div标签
	$("li:not(.c1)")  // 找到所有不包含c1样式类的li标签
	$("li:not(:has(a))")  // 找到所有后代中不含a标签的li标签
    
    
# HTML文件内容:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
</head>
<body>

<ul>  <!-- >ul>li{$$$}*9 -->
    <li>001</li>
    <li>002</li>
    <li>003</li>
    <li>004</li>
    <li>005</li>
    <li>006</li>
    <li>007</li>
    <li>008</li>
    <li>009</li>
</ul>
</body>
</html>
    
    
    
    
# 练习:自定义模态框,使用jQuery实现弹出和隐藏功能。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title>自定义模态框</title>
  <style>
    .cover {
      position: fixed;
      left: 0;
      right: 0;
      top: 0;
      bottom: 0;
      background-color: darkgrey;
      z-index: 999;
    }
    .modal {
      width: 600px;
      height: 400px;
      background-color: white;
      position: fixed;
      left: 50%;
      top: 50%;
      margin-left: -300px;
      margin-top: -200px;
      z-index: 1000;
    }
    .hide {
      display: none;
    }
  </style>
</head>
<body>
<input type="button" value="弹" id="i0">

<div class="cover hide"></div>
<div class="modal hide">
  <label for="i1">姓名</label>
  <input id="i1" type="text">
   <label for="i2">爱好</label>
  <input id="i2" type="text">
  <input type="button" id="i3" value="关闭">
</div>
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
<script>
  var tButton = $("#i0")[0];
  tButton.onclick=function () {
    var coverEle = $(".cover")[0];
    var modalEle = $(".modal")[0];

    $(coverEle).removeClass("hide");
    $(modalEle).removeClass("hide");
  };

  var cButton = $("#i3")[0];
  cButton.onclick=function () {
    var coverEle = $(".cover")[0];
    var modalEle = $(".modal")[0];

    $(coverEle).addClass("hide");
    $(modalEle).addClass("hide");
  }
</script>
</body>
</html>

image

image
image

4.属性选择器

[attribute]
[attribute=value]  // 属性等于
[attribute!=value]  // 属性不等于


# 示例
	$("input[type='checkbox']");  // 取到checkbox类型的input标签
	$("input[type!='text']");  // 取到类型不是text的input标签



# HTML文件内容:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
</head>
<body>
<ul>
    <input type="text">
    <input type="password">
    <input type="checkbox">
</ul>
</body>
</html>

image

5.表单筛选器

# 区别记忆:
	$(':checked')  # 会连同opti=on默认的selected一起找到

	$(':selected')  # 就只会找 属性值是selected的标签
    
	$(':text')  # 查找属性值是text的form表单内的标签
    

# 表单对象属性:
	:enabled
	:disabled
	:checked
	:selected

image

6.筛选器方法

# 下一个元素:
	$("#id").next()
	$("#id").nextAll()  // 下面所有的
	$("#id").nextUntil("#i2")  // 下一个直到某个(不包含)为止的
    
# 上一个元素:
	$("#id").prev()  
	$("#id").prevAll()  // 上面所有的
	$("#id").prevUntil("#i2")  // 上一个直到某个(不包含)为止的
        
# 父亲元素:
	$("#id").parent()  // 查找上一层父辈
	$("#id").parents()  // 查找当前元素的所有的父辈元素
	$("#id").parentsUntil()  // 查找当前元素的所有的父辈元素,直到遇到匹配的那个元素为止
    
# 儿子和兄弟元素:
	$("#id").children();  // 儿子们
	$("#id").siblings();  // 兄弟们
    
# 查找:
	搜索所有与指定表达式匹配的元素 这个函数是找出正在处理的元素的后代元素的好方法
	$("div").find("p")  // 在div标签内部查找所有p标签
	等价于 $("div p")
    
    
# 筛选
	筛选出与指定表达式匹配的元素集合 这个方法用于缩小匹配的范围 用逗号分隔多个表达式
	$("div").filter(".c1")  // 从 div标签结果集中过滤出有 c1样式类的
	等价于 $("div.c1")
    
	补充:
	.first()  // 获取匹配的第一个元素
	.last()  // 获取匹配的最后一个元素
	.not()  // 从匹配元素的集合中删除与指定表达式匹配的元素
	.has()  // 保留包含特定后代的元素,去掉那些不含有指定后代的元素
	.eq()  // 索引值等于指定值的元素
    
    
"""
使用原生js代码批量查找到标签之后  结果是一个数组
需要索引取值之后才可以调用标签的一些方法

使用jQuery代码批量查找到标签之后 结果是一个jQuery对象(像数组)
不需要索引取值 就可以直接调用封装的方法

两者对象的转换:
	js对象转jQuery对象
		$(js对象)
	jQuery对象转js对象
		jQuery对象索引取值
"""

7.节点操作

# 1.样式类操作
	addClass();  // 添加指定的CSS类名
	等同于 classList.add()
    
	removeClass();  // 移除指定的CSS类名
	等同于 classList.remove()
    
	hasClass();  // 判断样式存不存在
	等同于 classList.contains()
    
	toggleClass();  // 切换CSS类名,如果有就移除,如果没有就添加
	等同于 classList.toggle()
    
# 2.样式操作
	css('属性名','属性值')
	css("color","red")  // js中DOM操作:tag.style.color="red"
	$("p").css("color", "red");  // 将所有p标签的字体设置为红色	
    
# 3.位置操作
	offset()  // 获取匹配元素在当前窗口的相对偏移或设置元素位置
	position()  // 获取匹配元素相对父元素的偏移
	scrollTop()  // 获取匹配元素相对滚动条顶部的偏移
	scrollLeft()  // 获取匹配元素相对滚动条左侧的偏移
    
	.offset()方法允许我们检索一个元素相对于文档(document)的当前位置
	和 .position()的差别在于: .position()是相对于相对于父级元素的位移
    
# 4.文本操作
	HTML代码:
		html()  // 取得第一个匹配元素的html内容
		html(val)  // 设置所有匹配元素的html内容

	文本值:
		text()  // 取得所有匹配元素的内容
		text(val)  // 设置所有匹配元素的内容

	值:
		val()  // 取得第一个匹配元素的当前值
		val(val)  // 设置所有匹配元素的值
		val([val1, val2])  // 设置多选的checkbox、多选select的值
        
	'''括号内不写参数就是获取值 写参数就是设置值'''
    
    
# 5.属性操作
	attr(attrName)  // 返回第一个匹配元素的属性值
	attr(attrName, attrValue)  // 为所有匹配元素设置一个属性值
	attr({k1: v1, k2:v2})  // 为所有匹配元素设置多个属性值
	removeAttr()  // 从每一个匹配的元素中删除一个属性
	
	prop() // 获取属性
	removeProp() // 移除属性

	attr() 等同于js的 setAttribute()
	'''适用于属性为静态的情况(不经常修改动态变化的)'''
	prop()
		$($(':checkbox')[1]).prop('checked',true)
	"""适用于动态变化的情况 尤其是选择类标签"""

image

image

8.文档处理

# 添加到指定元素内部的后面
	$(A).append(B)  // 把B追加到A
	$(A).appendTo(B)  // 把A追加到B

# 添加到指定元素内部的前面
	$(A).prepend(B)  // 把B前置到A
	$(A).prependTo(B)  // 把A前置到B

# 添加到指定元素外部的后面
	$(A).after(B)  // 把B放到A的后面
	$(A).insertAfter(B)  // 把A放到B的后面

# 添加到指定元素外部的前面
	$(A).before(B)  // 把B放到A的前面
	$(A).insertBefore(B)  // 把A放到B的前面
    
# 移除和清空元素
	remove()  // 从DOM中删除所有匹配的元素
	empty()  // 删除匹配的元素集合中所有的子节点


# 替换
	replaceWith()
	replaceAll()

# 克隆
	clone()  // 参数



# 克隆示例
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title>克隆</title>
  <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
  <style>
    #b1 {
      background-color: deeppink;
      padding: 5px;
      color: white;
      margin: 5px;
    }
    #b2 {
      background-color: dodgerblue;
      padding: 5px;
      color: white;
      margin: 5px;
    }
  </style>
</head>
<body>

<button id="b1">屠龙宝刀,点击就送</button>
<hr>
<button id="b2">屠龙宝刀,点击就送</button>

<script src="jquery-3.2.1.min.js"></script>
<script>
  // clone方法不加参数true,克隆标签但不克隆标签带的事件
  $("#b1").on("click", function () {
    $(this).clone().insertAfter(this);
  });
  // clone方法加参数true,克隆标签并且克隆标签带的事件
  $("#b2").on("click", function () {
    $(this).clone(true).insertAfter(this);
  });
</script>
</body>
</html>

image

9.事件

# 绑定事件的两种方式
	方式一:
	jQuery对象.事件名(function(){})
		$('#d1').click(function(){alert(123)})

	方式2
	jQuery对象.on('事件名',function(){})
		$('#d1').on('click',function(){alert(123)}) 
        
"""
有时候绑定事件可能没有效果 这个时候可以考虑切换绑定方式
	方式1不行就方式2
	方式2不行就方式1
"""

click(function(){...})
hover(function(){...})
blur(function(){...})
focus(function(){...})
change(function(){...})
keyup(function(){...})



# 实时监听input输入值变化示例
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>实时监听input输入值变化</title>
  <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
</head>
<body>
<input type="text" id="i1">

<script src="jquery-3.2.1.min.js"></script>
<script>
  /*
  * oninput是HTML5的标准事件
  * 能够检测textarea,input:text,input:password和input:search这几个元素的内容变化,
  * 在内容修改后立即被触发,不像onchange事件需要失去焦点才触发
  * oninput事件在IE9以下版本不支持,需要使用IE特有的onpropertychange事件替代
  * 使用jQuery库的话直接使用on同时绑定这两个事件即可。
  * */
  $("#i1").on("input propertychange", function () {
    alert($(this).val());
  })
</script>
</body>
</html>
input值变化事件



# hover事件示例:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
</head>
<body>
<p>苍茫的天涯是我的哎,绵绵的青山脚下一片海!</p>

<script src="jQuery-3.3.1.js">
</script>
<script>
    $('p').hover(
        function () {
            alert('来啦,老弟')
        },
        function () {
            alert('慢走哦~')
        }
    )
</script>
</body>
</html>

image

image

posted @ 2022-02-15 17:59  Deity_JGX  阅读(123)  评论(0)    收藏  举报