Web全栈~18.jQuery

article/2025/11/8 16:32:20

Web全栈~18.jQuery

上一期

       jQuery是JavaScript的一个函数库,对JavaScript进行了一个封装。jQuery将常用的、复杂的操作进行函数化封装,直接调用,大大降低了使用JavaScript的难度,改变了使用JavaScript的习惯。 jQuery能做的JavaScript也能做,但使用jQuery能大幅提高开发效率。

JavaScript中获取元素内容的方式

       getElementById( ) :返回一个节点对象。
       getElementsByName( ):返回多个(节点数组)。
       getElementsByTagName( ) :返回多个(节点数组)

jQuery选择器

基本选择器

标签选择器 $("a")

ID选择器 $("#id") $("p#id")

类选择器 $(".class") $("h2.class")

通配选择器 $("*")

并集选择器$("elem1,elem2,elem3")

后代选择器$(ul li)

父子选择器 $(ul>li)

属性选择器

[attribute] 匹配包含给定属性的元素

[attribute1][attribute2] 复合属性选择器,需要同时满足多个属性

[attribute=value] 匹配给定的属性是某个特定值的元素

[attribute!=value] 匹配所有属性不等于特定值的元素

[attribute^=value] 匹配给定的属性是以某些值开始的元素

[attribute$=value] 匹配给定的属性是以某些值结尾的元素

[attribute*=value] 匹配给定的属性是以包含某些值的元素

位置选择器

针对整个页面而言的位置选择器

first 获取第一个元素

:last 获取最后一个元素

odd 匹配所有索引值为奇数的元素,从 0 开始计数

even匹配所有索引值为偶数的元素,从 0 开始计数

eq(n) 匹配一个给定索引值的元素

gt(n) 匹配所有大于给定索引值的元素

lt(n) 匹配所有小于给定索引值的元素

针对上级标签而言的位置选择器

first-child 匹配第一个子元素

last-child匹配最后一个子元素

only-child如果某个元素是父元素中唯一的子元素,将会被匹配

nth-child(n) :nth-child(odd|even) :nth-child(xn+y) 匹配其父元素下的第N个子或奇偶元素

表单选择器

关于表单项的选择器

text :password :radio :checkbox :hidden :file :submit

input 匹配所有 input, textarea, select 和 button 元素

关于表单项状态的选择器

selected :checked :enabled :disabled

hidden :visible :not

注意$("input")和$(":input")的区别

$("input"):标签选择器,只匹配input标签

$(":input"): 匹配所有 input, textarea, select 和 button 元素

表单验证案例

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title><script src="./js/jquery.min.js" type="text/javascript" charset="utf-8"></script><script type="text/javascript">function checkForm(){//判断用户名是否符合验证规则var flag1 = checkUser();//判断邮箱是否符合验证规则var flag2 = checkEmail();//如果均符合验证规则,验证成功,否则验证出错if(flag1 && flag2){return true;}else{return false;}}function checkUser(){//清空上次检查的提示信息//$("#usererror").html("");$("#usererror").empty();//	用户名不能为空var user = $("#user").val();if(user == ""){//alert("用户名不能为空");$("#usererror").html("用户名不能为空");return false;}//     用户名长度大于6if(user.length <=6){//alert("用户名长度需要大于6");$("#usererror").html("用户名长度需要大于6");return  false;}//     用户名中不能有数字  ad34adffor(var i=0;i<user.length;i++){var ch = user.charAt(i);if(ch>='0' && ch<='9' ){//alert("用户名中不能有数字");$("#usererror").html("用户名中不能有数字");return false;}}return true;//return undefined}function checkEmail(){//清空上次验证邮箱的提示信息$("#emailerror").empty();var email = $("#email").val();if(email.indexOf('@')<0){//alert("邮箱中必须有@");$("#emailerror").html("邮箱中必须有@");					return false;}if(email.indexOf('.')<0){//alert("邮箱中必须有.");$("#emailerror").html("邮箱中必须有.");	return false;}		return true;				}function operUser(){$("#user").select();//$("#user").val("");}</script></head><body><table  id="center" border="0" cellspacing="0" cellpadding="0"><form action="doRegister.jsp" method="post" name="myform" onsubmit="return checkForm()" ><tr><td >您的姓名:</td><td><input id="user" type="text" onfocus="operUser()" onblur="checkUser()"/><div id="usererror" style="display: inline;"></div></td></tr><tr><td >输入密码:</td><td><input id="pwd" name="pwd" type="password"/></td></tr><tr><td >再输入一遍密码:</td><td><input id="repwd" type="password"/></td></tr><tr><td >您的Email:</td><td><input id="email" type="text" onblur="checkEmail()"/><span id="emailerror"></span></td></tr>   <tr><td>&nbsp;</td><td ><input name="btn"  type="submit"   value="注册" class="rb1" /></td></tr></form></table></body>
</html>

购物车案例

       需求:使用jQuery实现对购物车的增删查改全选反选功能。单个选择复选框的时候如果满了,全选框也必须自动勾上。修改数量的时候数量变成文本格式,修改数量按钮自身变成确定按钮。修改的时候要检查数量是否正确。

       做这个的目的就和我写数据结构一样,主要是为了顺顺手。因为这些选择器也好还是事件也好都太多了。我不可能一个一个去背,只能说下次要用的时候看看文档可以上手。待会儿也会用到各种选择器

在这里插入图片描述

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title><script type="text/javascript" src="./js/jquery.min.js"></script><script type="text/javascript">//全选操作$(function(){//全选操作$("#chks").click(function(){//获取全选框的值,this就相当于是chks。//prop会根据是否选中返回true和false,也可以在后面修改true和falsevar flag = $(this).prop("checked");//这句话的意思是将所有input name = chk 的值都根据flag改变//触发chks单机事件勾选了的时候flag是true,没勾选的时候就是false//所以当全选框是true的时候,下面全改成true。全选是false下面就全改成false就好了$("input[name=chk]").prop("checked",flag);});//为了防止复选框被一个一个点满的时候全选框没有被改变.所以这里要处理一下//使用了该选择器后,用户每次点击复选框,都会在这里进行判断一下$("input[name=chk]").click(judgeAll());//反选操作$("#fx").click(function(){//获取所有复选框$("input[name=chk]").each(function(){//获取原来的值var flag = $(this).prop("checked");//修改相反的值$(this).prop("checked",!flag);})//直接调用就可以了judgeAll();});/*** 新增*/$("#addRow").click(function(){//创建一个var newRow = $('<tr>'+'<td><input type="checkbox" name="chk" id="" value="2"/></td>'+'<td>《c primer plus》</td>'+'<td>Stephen Prata</td>'+'<td>10</td>'+'<td>'+'<input type="button" name="aa" id="" value="修改数量" οnclick="updateAmount(this)"/>'+'<input type="button" name="" id="" value="删除" οnclick="delRow(this)"/>'+'</td>'+'</tr>');//======================================//这里用到了位置选择器,last是最后一个。如果要放在第一个就用first$("tr:last").after(newRow);});/*** 多行删除*///这个对应的是横着那一排的删除id。不是单独删除的那个单击事件$("#delRow").click(function(){//获取所有被选中的复选框var toDelArr = $("input[name=chk]:checked");//先判断是否选择,如果没选就提示if(toDelArr.length == 0){alert("至少选中一行");}else{//toDelArr.remove();是反面教材,因为刚刚只是获得复选框。直接删自然也只会删掉复选框//toDelArr.parent().remove();也不行,因为它只会删掉当前的td。要想删掉tr需要两个parent//toDelArr.parent().parent().remove(); 这种写法虽然可以但是也太麻烦了//最好的写法还是这种。parents里面一定要写东西。不然整个页面都删掉了。。。toDelArr.parents("tr").remove();}});/*** 复制多行*/$("#copyRow").click(function(){//获取所有被选中的复选框var toCopyArr = $("input[name=chk]:checked");//先判断是否选择,如果没选就提示if(toCopyArr.length == 0){alert("至少选中一行");}else{//each是在循环,所以循环里面一个一个加就相当于多行增加toCopyArr.each(function(){//复制一份var cloneRow = $(this).parents("tr").clone();//粘贴一份$("#ta").append(cloneRow);});}});})/*** 为了让反选和普通选择都进行判断并且代码不用重复写* 所以这里就封装成一个函数让它们调用*/function judgeAll(){//获取所有的复选框var arr = $("input[name=chk]");//先默认全部选中var flag = true;//arr.each就相当于是在循环遍历arr.each(function(){//判断所有复选框是否被选中var flagplus = $(this).prop("checked");		//假如有一个没被选中,那么全选框就是falseif(flagplus == false){flag = false;return;}});//决定全选框的值$("input[name=chks]").prop("checked",flag);}/*** 修改当前数量*/function updateAmount(obj){//数量变成文本框的值,文本框变成数量的值//获取原来的数量   prev是指修改数量的前面一个表格。不然就会把自己变成下面input的格式//如果要把input格式换成作者那个位置,可以用两个prev()试试var amountCell = $(obj).parent().prev();var amount =  amountCell.html();//将指定位置的td改成input文本格式amountCell.html('<input type="text" value = "'+ amount +'" οnblur="checkAmount(this)"/>');//把修改按钮变成确定按钮//获得当前按钮单元格var buttonCell = $(obj).parent();//准备新按钮var newButton = $('<input type="button" name="" id="" value="确定" οnclick="confirmAmount(this)"/>'+'<input type="button" name="" id="" value="删除" οnclick="delRow(this)" />');//添加新按钮buttonCell.html(newButton);}/*** 确定数量* @param {Object} obj*/function confirmAmount(obj){//文本框变成数量//获取原来的数量 var amountInput = $(obj).parent().prev().find("input");var amount = amountInput.val();//修改文本框的数量$(obj).parent().prev().html(amount);//确定按钮变成修改按钮//获得当前按钮单元格var buttonCell = $(obj).parent();//准备新按钮var newButton = $('<input type="button" name="" id="" value="修改数量" οnclick="updateAmount(this)"/>'+'<input type="button" name="" id="" value="删除" οnclick="delRow(this)" />');//添加新按钮buttonCell.html(newButton);}//判断数量是否正确function checkAmount(obj){//获取值var amount = $(obj).val();//判断是否正确if(isNaN(amount) || amount < 1 || parseInt(amount) != amount){alert("必须是大于0的整数!");}}/*** 删除当前行*/function delRow(obj){//这里就是一句话解决了。。。$(obj).parents("tr").remove();}</script></head><body><h3>购物车</h3><hr /><input type="button" id="fx" value="反选" /><input type="button" id="addRow" value="新增一行" /><input type="button" id="delRow" value="删除行"/><input type="button" id="copyRow" value="复制行" /><table border="1px" cellpadding="10px" cellspacing="0" id="ta"><tr><td width="50px"><input type="checkbox" name="chks" id="chks"  value="1" /></td><td width="200px">书名</td><td width="200px">作者</td><td width="200px">数量</td><td width="200px">操作</td></tr><tr><td><input type="checkbox" name="chk" id="" value="2"/></td><td>《计算机组成原理》</td><td>Alan Clements</td><td>10</td><td><input type="button" name="aa" id="" value="修改数量" onclick="updateAmount(this)"/><input type="button" name="" id="" value="删除" onclick="delRow(this)"/></td></tr>			<tr><td><input type="checkbox" name="chk" id="" value="3" /></td><td>《深入理解计算机系统》</td><td>布赖恩特</td><td>10</td><td>					<input type="button" name="" id="" value="修改数量" onclick="updateAmount(this)"/><input type="button" name="" id="" value="删除" onclick="delRow(this)" /></td></tr><tr><td><input type="checkbox" name="chk" id="" value="4" /></td><td>《编译原理》</td><td>Alfred V.Aho</td><td>30</td><td><input type="button" name="" id="" value="修改数量"οnclick="updateAmount(this)"/><input type="button" name="" id="" value="删除" onclick="delRow(this)"/></td></tr></table></body>
</html>

http://chatgpt.dhexx.cn/article/3CeBvYhq.shtml

相关文章

处女作《Web全栈开发进阶之路》出版了!

书中源码下载地址&#xff1a;https://github.com/qinggee/WebAdvanced 01、 当初决定写博客的原因非常的纯洁&#xff1a;只要每个月写上 4 篇以上博客&#xff0c;月底的绩效奖金就多 500 块。你可能会好奇地问&#xff0c;哪里会有这么好的公司呢&#xff1f;偷偷地告诉你…

小白都能看懂的实战教程 手把手教你Python Web全栈开发(DAY 3)

小白都能看懂的实战教程 手把手教你Python Web全栈开发 Flask(Python Web)实战系列之在线论坛系统 第三讲 这是小白都能看懂的实战教程 手把手教你Python Web全栈开发 的第三讲&#xff0c;如果文中有基础知识不太熟悉的话&#xff0c;可以看博主前几期的博客&#xff1a; 本文…

【哈士奇赠书活动 - 18期】-〖Flask Web全栈开发实战〗

文章目录 ⭐️ 赠书活动 - 《Flask Web全栈开发实战》⭐️ 编辑推荐⭐️ 内容提要⭐️ 赠书活动 → 获奖名单 ⭐️ 赠书活动 - 《Flask Web全栈开发实战》 内容简介&#xff1a; 《Flask Web全栈开发实战》围绕 Flask 框架&#xff0c;详细地讲解了使用 Flask 开发网站的各项技…

java web全栈漫谈

点击上方“ java工会 ”&#xff0c;选择“置顶公众号” 关注我&#xff0c;查看更多全栈相关技术&#xff01; 原文&#xff1a;https://www.aliyun.com/jiaocheng/1124708.html 一个项目从需求确认到上线,生命周期其实还是挺长的。作为一般公司的话,分工是比较具体的,比如从需…

Web全栈~34.CAS

Web全栈~34.CAS 上一期 原子变量 Java并发包中的原子变量有以下几种 AtomicBoolean&#xff1a;原子Boolean类型&#xff0c;常用来在程序中表示一个标志位。 AtomicInteger&#xff1a;原子Integer类型。 AtomicLong&#xff1a;原子Long类型&#xff0c;常用来在程序中生成…

PythonWeb全栈开发介绍

文章目录 1 什么是Web开发2 Python Web开发技能点3 什么是全栈开发4 技术选型如何开始 1 什么是Web开发 权威定义 Web&#xff08;World Wide Web&#xff09;即全球广域网也称为万维网&#xff0c;它是一种基于超文本和HTTP的、全球性的、动态交互的、跨平台的分布式图形信息…

Web全栈~17.购物车案例(JavaScript动态效果)

Web全栈~17.购物车案例(JavaScript动态效果) 上一期 前言 前三期已经对购物车的样式绘制完毕,那么这一期就用JavaScript来实现动态效果。 全选 思路 可以在input标签里,添加单击事件,并且传递一个this。这个this就会把input本身传递过去。 <li><input type"ch…

java web全栈_web全栈java开发哪个前景好

展开全部 全栈和java哪个能更好62616964757a686964616fe58685e5aeb931333365633862迎合市场需求&#xff0c;有同学咨询学习哪个在以后前景和工作薪水上能更吃香&#xff0c;首先我们先来了解下Java开发和全栈开发的区别。 全栈开发工程师是指掌握多种技能&#xff0c;能够独立…

Web全栈开发基础(小白入门版本)

博客传送门 近几个月认真写了写Web全栈代码&#xff0c;有点小收获这里分享一下。我还做了个PPT&#xff0c;资源路径 欢迎拍砖指点&#xff01; Web全栈开发是一个听起来很虎的名词。本文从技术层面解释全栈开发&#xff0c;能帮助没有全栈概念&#xff0c;或者说对相关技术…

web全栈开发项目搭建整体思路和学习路线

web全栈开发 全栈开发技术介绍&#xff1a; 全栈技术指可以完整整个项目搭建的有效集合。 包括&#xff1a;网站的设计&#xff0c;web前端开发&#xff0c;web后端开发&#xff0c;数据库设计&#xff0c;接口和组件&#xff0c;移动端开发&#xff0c;产品设计&#xff0c;系…

mysql建立索引的几大原则

1&#xff0e;选择唯一性索引 唯一性索引的值是唯一的&#xff0c;可以更快速的通过该索引来确定某条记录。例如&#xff0c;学生表中学号是具有唯一性的字段。为该字段建立唯一性索引可以很快的确定某个学生的信息。如果使用姓名的话&#xff0c;可能存在同名现象&#xff0c…

MySQL建立索引的正确姿势与使用索引的最佳指南!

引言 数据库索引&#xff0c;绝对是MySQL的核心功能之一&#xff0c;如果没有索引机制的数据库&#xff0c;那数据的检索效率绝对是令人无法接受的&#xff0c;毕竟没有索引的表数据&#xff0c;就如同一个普通的文本文件存储在磁盘中。在《索引上篇》中&#xff0c;我们对于M…

mysql创建索引语句

1:表结构 2:创建索引语句 alter table staffs add index idx_staffs_nameAgePos(NAME,age,pos); 执行后效果

MySQL建立索引的注意事项

大家都知道对数据库表字段建立索引可以有效的提升数据的查询效率&#xff0c;但索引也不是随便建立的&#xff0c;需要我们对建立索引的规范有一定的了解&#xff0c;才能更好的发挥出索引的优势&#xff0c;避免因为滥建索引反而带来整体性能的下降。 1、哪些列上建立索引&am…

MySQL之创建索引

文章目录 MySQL之创建索引1.五种索引分类2.创建表后创建索引命令(create)3.创建表后创建索引命令(alter)3.1单列主键索引3.2单列唯一索引3.3组合唯一索引3.4单列普通索引3.5组合普通索引3.6单列全文索引 4.创建表时创建索引命令(create)4.1单列主键索引(不起名)4.2组合普通索引…

MySQL几种创建索引的方式

一、创建表时创建索引 key 索引名 &#xff08;column&#xff09;&#xff1b; 二、表创建好后创建索引 1、通过Alter创建索引 ①PRIMARY KEY&#xff08;主键索引&#xff09; mysql > ALTER TABLE table_name ADD PRIMARY KEY ( column ) ②UNIQUE(唯…

Mysql 创建索引

数据库建立索引常用的规则如下&#xff1a; 1、表的主键、外键必须有索引&#xff1b; 2、数据量超过300的表应该有索引&#xff1b; 3、经常与其他表进行连接的表&#xff0c;在连接字段上应该建立索引&#xff1b; 4、经常出现在Where子句中的字段&#xff0c;特别是大表的…

mysql 创建索引的三种方式

1、使用CREATE INDEX创建&#xff0c;语法如下&#xff1a; CREATE INDEX indexName ON tableName (columnName(length)); 2、使用ALTER语句创建&#xff0c;语法如下&#xff1a; ALTER TABLE tableName ADD INDEX indexName(columnName); ALTER语句创建索引&#xff0c;下面提…

前端的rem的用法

1.概念 首先来说说rem的概念&#xff0c;rem就是根元素的字体大小单位。 2.简单讲讲rem的概念 <html><head><meta charset"utf-8"><style type"text/css">html {font-size: 30px;}.div1 {font-size: 1rem;}.div2{font-size: 30…

前端预览pdf文件流

场景是前端需要实现预览各种文件的功能&#xff0c;又要保证安全&#xff0c;所以采用了文件后端转换成pdf文件流前端预览的方式进行预览&#xff0c;经过一段时间查找帖子&#xff0c;记录一下遇到最大的坑 网上帖子很多&#xff0c;试了之后一直没有实现&#xff0c;究其根源…