html 之 jQuery库、阻止二次提交
一、jQuery介绍
1、库就类似于是Python中的模块,简称为jq
2、jQuery就是js、css等的封装版本,只要一封装,写法较简单
3、jQuery是一个轻量级的、兼容多浏览器的JavaScript库,封装版本的js。
4、jq的优势
-
简化 DOM 操作: jQuery 提供了简单易用的选择器和 DOM 操作方法,使得在 HTML 文档中查找元素、修改元素属性、样式、内容等操作变得非常简单。
-
跨浏览器兼容性: jQuery 能够处理不同浏览器之间的差异,使开发者不必为了适应不同浏览器而写大量的兼容性代码。
-
动画和效果: jQuery 提供了丰富的动画和效果方法,帮助开发者轻松实现页面元素的淡入淡出、滑动、展开等效果,使页面更具交互性。
-
AJAX 支持: jQuery 简化了 AJAX 调用,使得通过 JavaScript 和服务器进行数据交换变得更加简单,能够轻松实现异步加载数据和无刷新页面。
-
事件处理: jQuery 提供了方便的事件处理方法,能够轻松绑定和解绑事件,简化了事件处理的过程。
-
插件丰富: jQuery 生态系统中有大量的插件可供使用,这些插件提供了各种各样的功能,包括图表绘制、表单验证、日期选择等,极大地丰富了开发者的选择。
-
轻量级: 尽管功能强大,jQuery 本身的文件大小相对较小,这有助于加快页面加载速度,并降低网络传输成本。
-
易于学习和上手: jQuery 的语法简单明了,对于初学者来说学习曲线较为平缓,开发者可以快速上手使用 jQuery 开发网页。
-
社区支持: jQuery 拥有庞大的社区支持,开发者可以轻松找到解决问题的资源和文档。
5、jq的版本
1.x:兼容IE678,使用最为广泛的,官方只做BUG维护,功能不再新增。因此一般项目来说,使用1.x版本就可以了,最终版本:1.12.4 (2016年5月20日) 2.x:不兼容IE678,很少有人使用,官方只做BUG维护,功能不再新增。如果不考虑兼容低版本的浏览器可以使用2.x,最终版本:2.2.4 (2016年5月20日) 3.x:不兼容IE678,只支持最新的浏览器。需要注意的是很多老的jQuery插件不支持3.x版。目前该版本是官方主要更新维护的版本。
6、学习网站
官方网站:https://jquery.com/ 中文文档:https://jquery.cuishifeng.cn/
BootCDN - Bootstrap 中文网开源项目免费 CDN 加速服务
二、jQuery 对象
1、jQuery对象就是通过jQuery包装DOM对象后产生的对象
2、标签对象:直接就是通过各种选择器得到的标签
# 标签对象不能够直接使用jQuery库提供的很多方法
3、jQuery基础语法
$的含义
jQuery("#i1").html();
$("#i1").html();
# 以上两行代码的意思是一样的
jQuery === $
# 以后的代码里都使用$符号代替jQuery
jQuery基础语法
jQuery("selector").action();
$("selector").action();
4、基本选择器
id、class、标签选择器
var div1 = $("#d1"); ----------->S.fn.init [div#d1]-------->jQuery对象
var div = document.getElementById('d1');--->拿到的是一个标签对象
# jQuery对象和标签对象之间的相互转换
jQuery对象转为标签对象----------------->直接通过索引取值得到标签对象
标签对象转为jQuery对象---->$(document.getElementById('d1')) --->使用jQuery把DOM包起来-------->就可以使用jQuery提供的方法了
var div = document.getElementsByClassName('c1')[0];
var div1 = $(".c1");
console.log(div1);
var div = $('div');
console.log(div);
# 配合使用的
$("div.c1") // 找到有c1 class类的div标签
$('div#d1')
# 通用选择器
$("*")
5、组合选择器
$('#d1,.c1,p') # 并列+混用
$('div span') # 后代
$('div>span') # 儿子
$('div+span') # 毗邻
$('div~span') # 弟弟
6、基本筛选器
:first // 第一个 :last // 最后一个 :eq(index)// 索引等于index的那个元素 :even // 匹配所有索引值为偶数的元素,从 0 开始计数 :odd // 匹配所有索引值为奇数的元素,从 0 开始计数 :gt(index) // 匹配所有大于给定索引值的元素 # gt ---> greater than :lt(index) // 匹配所有小于给定索引值的元素 # lt----> less than :not(元素选择器)// 移除所有满足not条件的标签 :has(元素选择器)// 选取所有包含一个或多个标签在其内的标签(指的是从后代元素找)
示例
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.js"></script>
</head>
<body>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li class="c1">5</li>
</ul>
<script>
// $("ul li:first").css('color', 'red');
// $("ul li:last").css('color', 'red');
// $("ul li:eq(4)").css('color', 'red');
// $("ul li:even").css('color', 'red'); //偶数索引
// $("ul li:odd").css('color', 'red'); //奇数索引
// $("ul li:gt(1)").css('color', 'red');
// $("ul li:lt(1)").css('color', 'red');
$("ul li:not('.c1')").css('color', 'red');
</script>
</body>
7、自定义属性选择器
[attribute]
[attribute=value]// 属性等于
[attribute!=value]// 属性不等于
<input type="text">
<input type="password">
<input type="checkbox">
$("input[type='checkbox']");// 取到checkbox类型的input标签
$("input[type!='text']");// 取到类型不是text的input标签
8、表单筛选器
:text :password :file :radio :checkbox :submit :reset :button
例子:
$(":checkbox") // 找到所有的checkbox
$('input[type="text"]')---------->$(':text')
$('input[type="password"]')---------->$(':password')
表单对象属性:
:enabled :disabled :checked :selected
例子:
找到可用的input标签
<form>
<input name="email" disabled="disabled" />
<input name="id" />
</form>
$("input:enabled") // 找到可用的input标签
console.log($("input:disabled"))
找到被选中的option:
<select id="s1">
<option value="beijing">北京市</option>
<option value="shanghai">上海市</option>
<option selected value="guangzhou">广州市</option>
<option value="shenzhen">深圳市</option>
</select>
$(":selected") // 找到所有被选中的option
$(':checked') # 它会将checked和selected都拿到
$(':selected') # 它不会 只拿selected
$('input:checked') # 自己加一个限制条件
9、筛选器的方法
下一个元素
$("#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").find("a")----------------->等价于$("div p a")
$("#d1 .c1").find("a")----------------->等价于$("#d1 .c1 a")
验证
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js"></script>
</head>
<body>
<span id="d1">span1</span>
<span>span2</span>
<div id="d2">
<span>div>span3</span>
<p>div>p
<span id="d3">div>p>span</span>
</p>
<span>span4</span>
<span>span5</span>
<span class="c1">span5</span>
</div>
</body>

三、操作标签
1、样式操作(css)
addClass();// 添加指定的CSS类名。 removeClass();// 移除指定的CSS类名。 hasClass();// 判断样式存不存在 toggleClass();// 切换CSS类名,如果有就移除,如果没有就添加。
2、位置操作
offset()// 获取匹配元素在当前窗口的相对偏移或设置元素位置 position()// 获取匹配元素相对父元素的偏移 scrollTop()// 获取匹配元素相对滚动条顶部的偏移 scrollLeft()// 获取匹配元素相对滚动条左侧的偏移
.offset()方法允许我们检索一个元素相对于文档(document)的当前位置。
和 .position()的差别在于: .position()是相对于相对于父级元素的位移。
3、尺寸
height() width() innerHeight() innerWidth() outerHeight() outerWidth()
4、文本操作
html()// 取得第一个匹配元素的html内容 html(val)// 设置所有匹配元素的html内容 文本值: text()// 取得所有匹配元素的内容 text(val)// 设置所有匹配元素的内容 值: val()// 取得第一个匹配元素的当前值 val(val)// 设置所有匹配元素的值 val([val1, val2])// 设置多选的checkbox、多选select的值
例如:
<input type="checkbox" value="basketball" name="hobby">篮球
<input type="checkbox" value="football" name="hobby">足球
<select multiple id="s1">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
设置值:
$("[name='hobby']").val(['basketball', 'football']);
$("#s1").val(["1", "2"])
示例:
获取被选中的checkbox或radio的值
<label for="c1">女</label> <input name="gender" id="c1" type="radio" value="0"> <label for="c2">男</label> <input name="gender" id="c2" type="radio" value="1">
可以使用:
$("input[name='gender']:checked").val()
5、属性操作
用于ID等或自定义属性:
attr(attrName)// 返回第一个匹配元素的属性值
attr(attrName, attrValue)// 为所有匹配元素设置一个属性值
attr({k1: v1, k2:v2})// 为所有匹配元素设置多个属性值
removeAttr()// 从每一个匹配的元素中删除一个属性
用于checkbox和radio
prop() // 获取属性 removeProp() // 移除属性
prop和attr的区别:
attr全称attribute(属性)
prop全称property(属性)
虽然都是属性,但他们所指的属性并不相同,attr所指的属性是HTML标签属性,而prop所指的是DOM对象属性,可以认为attr是显式的,而prop是隐式的。
<input type="checkbox" id="i1" value="1">
针对上面的代码
$("#i1").attr("checked") // undefined
$("#i1").prop("checked") // false
1.对于标签上有的能看到的属性和自定义属性都用attr()
2.对于返回布尔值的比如checkbox、radio和option的是否被选中都用prop()。
四、操作文档
1、添加到指定元素内部的后面
let $pEle = $('<p>')
$pEle.text('你好啊 草莓要不要来几个?')
$pEle.attr('id','d1')
$('#d1').append($pEle) # 内部尾部追加
createElement('p') -----------> $('<p>')
appendChild() -----------> append()
$(A).append(B)// 把B追加到A
$(A).appendTo(B)// 把A追加到B
2、添加到指定元素内部的前面
$(A).prepend(B)// 把B前置到A $(A).prependTo(B)// 把A前置到B
3、添加到指定元素外部的后面
五、事件
1、常用事件
click(function(){...})
hover(function(){...})
blur(function(){...})
focus(function(){...})
change(function(){...})
keyup(function(){...})
input监控
$(window).keydown(function (event) {
console.log(event.keyCode)
if (event.keyCode === 16){
alert('你按了shift键')
}
})
补充:
1. .hover(function() { ... }): 这个方法用于绑定鼠标悬停(mouseenter)和鼠标离开(mouseleave)事件的处理函数。它可以用于在鼠标悬停在一个元素上时执行某些操作,以及鼠标离开元素时执行其他操作。常见的使用场景包括显示/隐藏工具提示、创建悬停效果等。
2. .blur(function() { ... }): 这个方法用于绑定元素失去焦点事件的处理函数。当用户从一个元素(通常是输入字段)移开并且该元素失去焦点时,这个事件会被触发。常见的使用场景包括在用户输入数据后,离开输入字段时执行验证或处理逻辑。
3. .focus(function() { ... }): 这个方法用于绑定元素获得焦点事件的处理函数。当用户在一个元素上点击或使用 Tab 键导航到该元素时,它会获得焦点并触发这个事件。常见的使用场景包括在用户点击输入字段或导航到字段时,执行某些操作,如显示帮助文本或提示。
4. .change(function() { ... }): 这个方法用于绑定元素值改变事件的处理函数。它通常用于处理表单元素(如 input、select、textarea)的值发生改变时的操作。当用户在表单元素中输入或选择新的值并导致值发生变化时,该事件会被触发。
2、事件的绑定
.on( events [, selector ],function(){})
●events: 事件
●selector: 选择器(可选的)
●function: 事件处理函数
3、移除事件
.off( events [, selector ][,function(){}])
off() 方法移除用 .on()绑定的事件处理程序。
●events: 事件
●selector: 选择器(可选的)
●function: 事件处理函数
4、阻止后续事件执行
常见用例是在处理表单提交时,防止表单的默认提交行为,以便可以在提交前执行一些其他操作,比如进行表单验证。
return false; // 常见阻止表单提交等 e.preventDefault();
例子
</head>
<body>
<form id="myForm">
<input type="text" name="username" required>
<input type="password" name="password" required>
<button type="submit">Submit</button>
</form>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js"></script>
<script>
$(document).ready(function () {
$("#myForm").submit(function (e) {
// 阻止表单的默认提交行为
e.preventDefault();
// 执行表单验证逻辑
if (validateForm()) {
// 如果表单验证通过,则继续执行其他操作
submitForm();
} else {
// 如果表单验证未通过,则显示错误信息
showError();
}
});
function validateForm() {
// 在此处进行表单验证,返回 true 或 false
// 根据验证结果来决定是否继续提交表单
// 例如,验证用户名和密码是否符合要求
// 返回 true 表示验证通过,返回 false 表示验证未通过
}
function submitForm() {
// 在此处执行表单提交操作
}
function showError() {
// 在此处显示表单验证错误信息
}
});
</script>
</body>
5、阻止事件冒泡
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>阻止事件冒泡</title>
</head>
<body>
<div>
<p>
<span>点我</span>
</p>
</div>
<script src="jquery-3.3.1.min.js"></script>
<script>
$("span").click(function (e) {
alert("span");
e.stopPropagation();
});
$("p").click(function () {
alert("p");
});
$("div").click(function () {
alert("div");
})
</script>
</body>
</html>
注:
e 是事件对象:在代码中的 function(e) { ... } 中,e 就是事件对象。
事件对象提供了关于事件的相关信息,例如事件类型、触发元素、坐标等。您可以在事件处理函数中通过 e 来获取这些信息。
6、页面载入
当DOM载入就绪可以查询及操纵时绑定一个要执行的函数。这是事件模块中最重要的一个函数,因为它可以极大地提高web应用程序的响应速度。
两种写法:
$(document).ready(function(){
// 在这里写你的JS代码...
})
###################
$(function(){
// 你在这里写你的代码
})
7、事件委托
在 jQuery 中,事件委托是通过 .on() 方法来实现的。
.on()方法允许我们将事件处理函数绑定到一个父元素上,以处理子元素的事件,从而实现事件委托。
</head>
<body>
<ul id="d1">
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.js"></script>
<script>
$("#d1").on("click", "li", function () {
// 处理子元素(li)的点击事件
alert($(this).text());
});
</script>
</body>

将点击事件绑定到了 <ul> 元素上,而事件处理函数被限定为只处理匹配 "li" 选择器的子元素的点击事件。当 <li> 元素被点击时,事件会冒泡到 <ul> 元素上,并由事件处理函数处理点击事件。通过这种方式,我们实现了事件委托,处理了动态生成的列表项的点击事件 。
8、.each方法
jQuery.each(collection, callback(indexInArray, valueOfElement)):
描述:一个通用的迭代函数,它可以用来无缝迭代对象和数组。数组和类似数组的对象通过一个长度属性(如一个函数的参数对象)来迭代数字索引,从0到length - 1。其他对象通过其属性名进行迭代。
// $('div').each(function (index, value) {
// console.log(value, index);
// });
// 第二种方式:BBS中要用的
var arr = [1, 2, 3, 4, 5];
$.each(arr, function (index, value) {
console.log(value,index);
});
9、.data() 方法
在匹配的元素集合中的所有元素上存储任意相关数据
或返回匹配的元素集合中的第一个元素的给定名称的数据存储的值。
# $('div').data('username', 'jack');
jQuery.fn.init(10) [div, div, div, div, div, div, div, div, div, div, prevObject: jQuery.fn.init(1)]
# $('div').data('username');
# 可以跟某一个标签设置data属性
$('div').first().data('username', 'jack');
$('div').eq(3).data('username', 'jack');
$('#d1').data('username', 'jack');
# 获取
$('div').first().data('username');

浙公网安备 33010602011771号