day76 jquery

news2024/11/26 17:27:40

知识点:
    1 在HTML中引入jQuery
    2 jQuery中就绪函数
    3 jQuery中选择器
    4 使用jQuery获取表单元素的值 及标签中间的内容
    5 jQuery中获取标签属性
    6 jQuery设置和获取标签样式
-----------------------------------

一  在HTML中引入jQuery

        

                

1


    1) 把jQuery.js文件添加到项目的js目录
    2) 在html页面使用<script>引入jQuery.js
        <script src="js/jQuery.js"></script>
     注意: 先引入jQuery.js然后再引入自己的js文件


二  jQuery中就绪函数


     1)  语法
        $(documnet).ready(function(){
            jQuery代码
        })
    2) 简化版
        $(function(){
            jQuery代码
        })
    3) jQuery代码的语法
        
    3.1) 标签对象的事件
        $("选择器").事件名(function(){})
        注意: 事件名 没有on  
                js : onclick  -->jQuery click()


三  jQuery中选择器


四 获取和设置标签的属性信息


    1) attr()
        获取属性值 : 标签对象.attr("属性名")
        设置属性值 :标签对象.attr("属性名",值)
        同时设置多个属性:  标签对象.attr({"属性名":值,"属性名":值})
    2) prop()
        获取属性值 : 标签对象.prop("属性名")
        设置属性值 :标签对象.prop("属性名",值)
        同时设置多个属性:  标签对象.prop({"属性名":值,"属性名":值})
     注意:
        使用prop获取或设置checked,disabled,selected,readonly属性时,值为true或false

                                                                                                                                                                                 几个复选框和全选框网页


<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<link rel="stylesheet" href="css/top.css">
		<link rel="stylesheet" href="css/style.css">
		<link rel="stylesheet" href="css/goods.css">
			<!-- <script src="js/checkBox.js"></script> -->
			<script src="js/jquery-3.5.1.min.js"></script>
			<script src="js/jqueryGoods.js"></script>
	</head>
	<body>
		<div id ="div_content">
		<iframe src="top.html" frameborder="0" id="iframe_top" scrolling="no"></iframe>
		<div id = "div_content_table">
			<table>
				<tr>
					<th class="goodsImg"><input  type = "checkbox" id="boxOne"  />全选</th>
					<th >商品图片</th>
					<th>商品名称/出售者/联系方式</th>
					<th>价格</th>
				</tr>
				<tr>
					<td>
						<input  type = "checkbox" name="box" />
					</td>
					<td>
							<img src="img/list1.jpg"/>
					</td>
					<td>杜比环绕,家庭影院必备,超真实享受
						<br />
						出售者:ling112233
						<br />
						<img src="img/1.gif"/><img src="img/2.gif"/>
					</td>
					<td>一口价:
						<br />
						2000.0
					</td>
				</tr>
				<tr>
					<td>
						<input  type = "checkbox" name="box" />
					</td>
					<td>
							<img src="img/list2.jpg"/>
					</td>
					<td>杜比环绕,家庭影院必备,超真实享受
						<br />
						出售者:ling112233
						<br />
						<img src="img/1.gif"/><img src="img/2.gif"/>
					</td>
					<td>一口价:
						<br />
						2000.0
					</td>
				</tr>
				<tr>
					<td>
						<input  type = "checkbox" name="box" />
					</td>
					<td>
							<img src="img/list3.jpg"/>
					</td>
					<td>杜比环绕,家庭影院必备,超真实享受
						<br />
						出售者:ling112233
						<br />
						<img src="img/1.gif"/><img src="img/2.gif"/>
					</td>
					<td>一口价:
						<br />
						2000.0
					</td>
				</tr>
				<tr>
					<td>
						<input  type = "checkbox" name="box"/>
					</td>
					<td>
							<img src="img/list4.jpg"/>
					</td>
					<td>杜比环绕,家庭影院必备,超真实享受
						<br />
						出售者:ling112233
						<br />
						<img src="img/1.gif"/><img src="img/2.gif"/>
					</td>
					<td>一口价:
						<br />
						2000.0
					</td>
				</tr>
			</table>
		</div>
		<iframe src="bottom.html" frameborder="0" id="iframe_bottom" scrolling="no"></iframe>
		</div>
		
	
	</body>
</html>

                                         效果图

                                    实现全选功能(包括全选及取消全选)checkBox.js代码

function checkBox(){
	let isOkAll = document.getElementById("boxOne").checked;
	
	let isOkBox  = document.getElementsByName("box");
	
	for (let s of isOkBox) {
		s.checked = isOkAll;
	}
}

function checkBoxOne(){
	let isOkBox = document.getElementsByName("box");
	
	let isOkAll = document.getElementById("boxOne");

	
	for(let s of isOkBox){
		if(!s.checked){
			isOkAll.checked = s.checked;
			return;
		}
			
	}
	isOkAll.checked = true;
}

                                 实现全选功能(包括全选及取消全选) 的jquery代码

$(document).ready(function(){
				$("#boxOne").click(function(){
				let isOk = $(this).prop("checked");
				console.log(isOk)
				$("[name='box']").prop("checked",isOk)
				})
				
				
				$("[name='box']").click(function(){
					let len = $("[name='box']").length;
					console.log(len)
					let checkedLen = $("[name='box']:checked").length;
					console.log(checkedLen)
					$("#boxOne").prop("checked",len == checkedLen)
				})
				
				
			})


五 添加和删除标签的样式


    1 类样式
        1) addClass("类样式名1 类样式名2 ... ") 添加类样式
        2) removeClass()
            removeClass("类样式名") :移除指定的类样式
            removeClass() :移除所有类样式
    2 通过 css() 设置样式
            css("样式属性名",值)
            css({"样式属性名":值,"样式属性名":值})
六  获取表单元素的value值 ,标签中间内容
    1 表单元素的value值
        赋值:  表单元素对象.val("值");
        取值:  表单元素对象.val();
    2 标签中间内容
            js    :innerHTML ,innerText
            jQuery:  html()
                    text()

                                     注册网页

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>当当网注册页面</title>
    <link href="css/global.css" rel="stylesheet" type="text/css" />
    <link href="css/layout.css" rel="stylesheet" type="text/css" />
	<!-- <script src="js/注册.js"></script> -->
	<script src="js/jquery-3.5.1.min.js"></script>
	<script src="js/注册jquery.js"></script>
</head>

<body>
<div id="header">
    <div id="register_header">
        <div class="register_header_left"><img src="images/logo.gif" alt="logo"></div>
        <div class="register_header_right"><a href="index.html" class="blue">首页</a> | <a href="product.html" class="blue">商品展示页</a>  | <a href="shopping.html" class="blue">购物车</a> |  <a href="login.html" class="blue">登录</a></div>
    </div>
</div>
<div id="main">
    <div class="register_content">
        <div class="register_top_bg"></div>
        <div class="register_mid_bg">
            <ul>
                <li class="register_mid_left">填写注册信息</li>
                <li class="register_mid_mid">2. 邮箱验证</li>
                <li class="register_mid_right">3. 完成注册</li>
            </ul>
        </div>
        <div class="register_top_bg_mid">
            <div class="register_top_bg_two_left"></div>
            <div class="register_top_bg_two_right"></div>
            <div class="register_title_bg"><img src="images/register_pic_02.gif" alt="欢迎注册"><br>您所提供的资料不会做其他用途,敬请安心填写。</div>
        </div>
        <div class="register_dotted_bg"></div>
        <div class="register_message">
            <form action="" method="post" id="myform">
                <dl class="register_row">
                    <dt>Email地址:</dt>
                    <dd><input id="email" type="text" class="register_input"></dd>
                    <dd><div id="email_prompt"	 ></div></dd>

                <dl class="register_row">
                    <dt>设置昵称:</dt>
                    <dd><input id="nickName" type="text" class="register_input"></dd>
                    <dd><div id="nickName_prompt"></div></dd>
                </dl>
                <dl class="register_row">
                    <dt>设定密码:</dt>
                    <dd><input id="pwd" type="password" class="register_input"></dd>
                    <dd><div id="pwd_prompt"></div></dd>
                </dl>
                <dl class="register_row">
                    <dt>再输入一次密码:</dt>
                    <dd><input id="repwd" type="password" class="register_input"></dd>
                    <dd><div id="repwd_prompt"></div></dd>
                </dl>
                <dl class="register_row">
                    <dt>性别:</dt>
                    <dd><input name="sex" id="man" type="radio" value="男" checked="checked"> <label for="man">男</label></dd>
                    <dd> <input name="sex" id="woman" type="radio" value="女"> <label for="woman">女</label></dd>
                </dl>
                <dl class="register_row">
                    <dt>所在地区:</dt>
                    <dd>
                        <select id="province" style="width:120px;" >
                            <option>请选择省/城市</option>
                        </select>
                    </dd>
                    <dd>
                        <select id="city"  style="width:130px;">
                            <option>请选择城市/地区</option>
                        </select>
                    </dd>
                </dl>
                <div class="registerBtn"><input id="registerBtn" type="image" src="images/register_btn_out.gif">
					<input type="button" id = "button123">
				</div>
            </form>
        </div>
    </div>
</div>
<!--网站版权部分开始-->
<div id="footer">
    <iframe src="footer.html" height="50px" width="900px" frameborder="0"></iframe>
</div>
</body>
</html>

                                                        注册js文件



	let classDl = document.getElementsByClassName("register_row")
function checkemail(){
	let email = classDl.getElementsById("email").value
	let emailInner = classDl.getElementsById("email_prompt")
	
	if(email == ""){
		emailInner.innerHTML = "邮箱为空"
		emailInner.style.color = "red"
		return false;
	}
	
	let reg = /[@][.]{1}/
	if(!reg.test(email)){
		emailInner.innerHTML = "邮箱包含一个@ 后面一个."
		emailInner.style.color = "red"
		return false;
	}
	
	emailInner.innerHTML = "✔"
	emailInner.style.color = "green"
	return true;
}
function checkNickName(){
	let name = classDl.getElementsById("nickName").value
	let nameInner = classDl.getElementsById("nickName_prompt")
	
	if( name == ""){
		 nameInner.innerHTML = "邮箱为空"
		 nameInner.style.color = "red"
		return false;
	}
	
	
	let reg = /^[0-9][A-z_]{5,12}/
	if(!reg.test(name)){
		nameInner.innerHTML = "开头不能为数字,长度6到13位"
		nameInner.style.color = "red"
		return false;
	}
	
	nameInner.innerHTML = "✔"
	nameInner.style.color = "green"
	return true;
}

function checkPwd(){
	let password = classDl.getElementsById("pwd").value
	let passwordInner = classDl.getElementsById("pwd_prompt")
	
	let(password == ""){
		passwordInner.innerHTML = "密码为空"
		passwordInner.style.color = "red"
		return false;
	}
	
	let reg =/[/w]{8,16}/
	if{
		passwordInner.innerHTML = "只能包含数字字母下划线"
		passwordInner.style.color = "red"
		return false;
	}
	
	passwordInner.innerHTML = "✔"
	passwordInner.style.color = "green"
	return true;
}

function checkPwd(){
	let password = classDl.getElementsById("pwd").value
	let repassword = classDl.getElementsById("repwd").value
	let repasswordInner = classDl.getElementsById("repwd_prompt")
	
	let(password == ""){
		repasswordInner.innerHTML = "密码为空"
		repasswordInner.style.color = "red"
		return false;
	}
	
	if(!password === repassword){
		passwordInner.innerHTML = "密码错误"
		passwordInner.style.color = "red"
		return false;
	}
	
	passwordInner.innerHTML = "✔"
	passwordInner.style.color = "green"
	return true;
}



let pros = new Array();
	pros["湖北省"] = ["襄阳市","宜昌市","武汉市"]
	pros["北京市"] = ["东城区","西城区","海淀区"]
function addPro(){
	let pro = document.getElementById("province");
	for (let s in pros) {
		let op = new Option(s,s);
		pro.add(op,null);
	}
}
	window.onload = addPro;
	
function addCity(){
	let city = document.getElementById("city")
	city.options.length = 1
	let pro = document.getElementById("province").value
	for (let s of pros[pro]) {
		let op = new Option(s,s);
		city.add(op,null)
	}
}
	

                                        注册jquery文件

$(function(){
	addPro()
	$("#province").change(function(){
		addCity()
	})
	
		let isEmail = false
	$("#email").blur(function(){
		let email =	$(this).val()
		let emailPrompt = $("#email_prompt")
		if(email == ""){
			emailPrompt.html("邮箱不能为空!")
			emailPrompt.removeClass().addClass("register_prompt_error")
			isEmail = false
			return;
		}
		let reg =/^\w{5,10}@[a-z\d]{2,10}[.][a-z]{2,4}$/i;
		if(!reg.test(email)){
			emailPrompt.html("格式有误")
			emailPrompt.removeClass().addClass("register_prompt_error")
			isEmail = false
			return;
		}
		emailPrompt.html("")
		emailPrompt.removeClass().addClass("register_prompt_ok")
		isEmail = true;
	})
		
		let isNickName =false
		$("#nickName").blur(function(){
			let nickName = $(this).val()
			let nickNamePro = $("#nickName_prompt")
			
			if(nickName == ""){
				nickNamePro.html("不能为空")
				nickNamePro.removeClass().addClass("register_prompt_error")
				isNickName = false;
				return
			}
			let reg = /[\w]{2,10}/
			if(!reg.test(nickName)){
				nickNamePro.html("错误格式")
				nickNamePro.removeClass().addClass("register_prompt_error")
				isNickName = false;
				return
			}
			nickNamePro.html("")
			nickNamePro.removeClass().addClass("register_prompt_ok")
			isNickName = true
			
		})
		
		let isPwd = false
		$("#pwd").blur(function(){
			let pwd = $(this).val()
			let pwdPro = $("#pwd_prompt")
			
			if(pwd == ""){
				pwdPro.html("不能为空")
				pwdPro.removeClass().addClass("register_prompt_error")
				isPwd = false
				return
			}
			
			let reg = /[\w]{6,20}/
			if(!reg.test(pwd)){
				pwdPro.html("格式错误")
				pwdPro.removeClass().addClass("register_prompt_error")
				isPwd = false
				return
			}
			pwdPro.html("")
			pwdPro.removeClass().addClass("register_prompt_ok")
			isPwd = true
			
		})
		let isrepwd = false
		$("#repwd").blur(function(){
				let repwd = $(this).val()
				let pwd = $("#pwd").val()
				let repwdPro = $("#repwd_prompt")
				
				if(repwd == ""){
					repwdPro.html("不能为空")
					repwdPro.removeClass().addClass("register_prompt_error")
					isrePwd = false
					return
				}
				if(repwd != pwd){
					repwdPro.html("密码不一致")
					repwdPro.removeClass().addClass("register_prompt_error")
					isrePwd = false
					return
				}
				repwdPro.html("")
				repwdPro.removeClass().addClass("register_prompt_ok")
				isrepwd = true
			
			})
			
			$("#myform").submit(function(){
				$(".register_input").trigger("blur")
				return isEmail&&isNickName&&isPwd&&isepwd
			})
			
			$("#button123").click(function (){
				$(".register_input").trigger("blur")
				if(isEmail&&isNickName&&isPwd&&isrepwd){
					$("#myform").submit();
				}
			})
}) 

let pros = new Array();
	pros["湖北省"] = ["襄阳市","宜昌市","武汉市"]
	pros["北京市"] = ["东城区","西城区","海淀区"]
	
	function addPro(){
		for (let s in pros) {
			$("<option>",{
				text:s,
				val:s
			}).appendTo("#province")
		}
	
		
	}	
	function addCity(){
		let pro = $("#province").val()
		
		$("#city option:not(:first-of-type)").remove()
		
		for (let s of pros[pro]) {
			$("<option>",{
				text:s,
				val:s
			}).appendTo("#city")
		}
		
	}	


七 内添加


    1) append(content|fn)
        appendTo(content)
        示例:把B添加到A内部结尾处
        A.append(B)
        B.apppendTo(A)
    2) prepend(content|fn)
        prependTo(content)

let pros = new Array();
    pros["湖北省"] = ["襄阳市","宜昌市","武汉市"]
    pros["北京市"] = ["东城区","西城区","海淀区"]
    
    function addPro(){
        for (let s in pros) {
            $("<option>",{
                text:s,
                val:s
            }).appendTo("#province")
        }       
    }    


八 : 创建jQuery对象


    1 语法:
      $("<标签名>",{
          属性名:值,
          属性名:值
          ....
      })

let pros = new Array();
    pros["湖北省"] = ["襄阳市","宜昌市","武汉市"]
    pros["北京市"] = ["东城区","西城区","海淀区"]
    
    function addPro(){
        for (let s in pros) {
            $("<option>",{
                text:s,
                val:s
            })
.appendTo("#province")
        }
    }    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1578438.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3.C++ Make

1.Makefile 1.1 什么是 Makefile 一个工程中有很多文件&#xff0c;文件之间都是相辅相成有着编译的先后顺序&#xff0c;但是如果自己手动根据编译顺序编译文件造成速度非常慢。Makefile 是”自动化编译“&#xff0c;只需一个 make 指令系统就会根据编译顺序帮自己编译文件…

excel散点图怎么每个点添加名称

最终效果图&#xff1a; 添加图标元素->数据标签->其他数据标签选项 选择单元格中的值 手动拖动数据标签&#xff0c;调整到合适的位置。

Spring学习笔记:IOC控制反转、AOP面向切面

挺快的&#xff0c;框架这一部分 文章目录 一、Spring概述入门案例导入依赖包在src下写配置文件创建普通类和测试类 二、IOC&#xff08;控制反转&#xff09;2.1 IOC bean 的XML操作&#xff08;创建对象&#xff0c;注入属性2.2 IOC bean 的 注解 操作 三、AOP&#xff08;面…

《UE5_C++多人TPS完整教程》学习笔记31 ——《P32 角色移动(Character Movement)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P32 角色移动&#xff08;Character Movement&#xff09;》 的学习笔记&#xff0c;该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版&#xff0c;UP主&#xff08;也是译者&…

用国内版Devin:DevOpsGPT开发一个简易官网

前言&#xff1a; 世界上第一个AI程序员Devin想必已经给大家带来了不小的震撼&#xff0c;这种L4级的技术也许已经昭示着AGI离我们或许真的不远了。 这里先给大家普及一个概念&#xff1a; L4是谷歌对AGI划分的第四个等级&#xff0c;把代码丢给 AI 改这个是 L1 或者 L2 级别的…

CentOS7安装Docker及禅道

https://blog.csdn.net/weixin_46453070/article/details/136183615?ops_request_misc%257B%2522request%255Fid%2522%253A%2522171246925816800222886233%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id171246925816800222886233&biz_i…

基于RTThread的学习(三):正点原子潘多拉 QSPI 通信 W25Q128 实验

1、基于芯片创建工程 2、QSPI配置 2.1、RTThing_setting 设置组件 2.2、配置board.h 文件 2.3、cubemx生成QSPI的硬件初始化代码&#xff1b;HAL_QSPI_MapInit; 这里注意&#xff1a;你所买的开发板对应的qspi 连接的是否是cubemx 上边显示的&#xff0c;如果不是你需要将引脚…

Spring Security——13,认证成功失败注销成功处理器

认证成功&&失败&&注销成功处理器 说明&#xff1a;一、认证成功处理器1.1 自定义成功处理器1.2 配置自定义成功处理器 二、认证失败处理器2.1 自定义失败处理器2.2 配置自定义失败处理器 三、登出成功处理器3.1 自定义登出处理器3.2 配置登出处理器 四、完结撒…

聊一聊,JMeter分布式性能测试!

在做后端服务器性能测试中&#xff0c;我们会经常听到’分布式’。但你是否了解分布式呢&#xff1f;今天&#xff0c;我们就来给大家讲讲&#xff0c;在企业实战中&#xff0c;如何使用分布式进行性能测试&#xff0c;实战过程中&#xff0c;又有哪些地方要特别注意&#xff1…

Inotify

一、关于Inotify linux内核的inotify机制 可以监测文件系统的变动情况&#xff0c;并做出通知响应 二、关于inotify 使用inotify通知接口&#xff0c;可以用来监控文件系统的各种变化情况&#xff0c;可以非常方便地实现文件异动告警、增量备份&#xff0c;并针对目录或文件的…

transformer上手(1) —— transformer介绍

1 起源与发展 2017 年 Google 在《Attention Is All You Need》中提出了 Transformer 结构用于序列标注&#xff0c;在翻译任务上超过了之前最优秀的循环神经网络模型&#xff1b;与此同时&#xff0c;Fast AI 在《Universal Language Model Fine-tuning for Text Classificat…

烤羊肉串引来的思考--命令模式

1.1 吃羊肉串&#xff01; 烧烤摊旁边等着拿肉串的人七嘴八舌地叫开了。场面有些混乱&#xff0c;由于人实在太多&#xff0c;烤羊肉串的老板已经分不清谁是谁&#xff0c;造成分发错误&#xff0c;收钱错误&#xff0c;烤肉质量不过关等。 外面打游击烤羊肉串和这种开门店做烤…

Windows系统下安装java开发环境所需的JDK开发工具包

目录 一、JDK开发工具包下载二、安装三、环境变量配置3.1 添加安装包路径3.2 添加lib路径3.3 添加bin目录 四、检查是否安装成功五、总结 一、JDK开发工具包下载 官网地址&#xff1a;JDK下载 打开网址后有多个版本的JDK&#xff0c;学者根据自己电脑需求选择对应版本下载。如…

类,构造,this,static

第1关&#xff1a;什么是类&#xff0c;如何创建类 100 任务要求参考答案 任务描述相关知识 什么是类怎么定义类创建对象并且使用对象的属性和方法编程要求测试说明 任务描述 本关任务&#xff1a;创建一个类和一个对象&#xff0c;调用这个对象的属性和方法。 相关知识 …

34-5 CSRF漏洞 - CSRF分类

环境准备:构建完善的安全渗透测试环境:推荐工具、资源和下载链接_渗透测试靶机下载-CSDN博客 1)GET 类型 传参: 参数连接在URL后面 POC构造及执行流程: 构造URL,诱导受害者访问点击利用利用标签进行攻击: 构造虚假URL,在链接上添加payload抓包获取数据包,通过CSRF POC…

解决Xshell连接Linux虚拟机速度慢问题

我们频繁更换网络环境时&#xff0c;可能会发现xshell连接Linux虚拟机的速度变得很慢 为什么呢&#xff1f; 因为ssh的服务端在连接时会自动检测dns环境是否一致导致的 我们把它修改为不检测即可 修改文件位置&#xff1a; vi /etc/ssh/sshd_config 把 #UseDNS yes 修改…

Redis7(二)数据类型及其用法

一、概述 命令不区分大小写&#xff0c;key区分大小写 数据类型针对value String List Set Hash ZSet bitmap GEO HyperLogLog Stream bitfield 二、String <K,V> 1、设值/取值 getrange key index1 index2 getrange key 0 -1//获取所有的值 SETRANGE KEY_N…

代码随想录第34天| 1005.K次取反后最大化的数组和 134. 加油站 135. 分发糖果

1005.K次取反后最大化的数组和 1005. K 次取反后最大化的数组和 - 力扣&#xff08;LeetCode&#xff09; 代码随想录 (programmercarl.com) 贪心算法&#xff0c;这不就是常识&#xff1f;还能叫贪心&#xff1f;LeetCode&#xff1a;1005.K次取反后最大化的数组和_哔哩哔…

如何选择苹果iOS系统的企业签名分发平台

哈喽&#xff0c;大家好呀&#xff0c;淼淼有和大家见面啦&#xff0c;前两期讲了分发内测的一些相关知识&#xff0c;这一期咱们来聊聊企业签名分发平台的相关知识。最近移动应用市场的竞争一天比一天要激烈&#xff0c;许多做开发的小伙伴们都在为此发愁&#xff0c;愁着该怎…

不要再使用 @Builder 注解了!有深坑呀!

曾经&#xff0c;我在《千万不要再随便使用 lombok 的 Builder 了&#xff01;》 一文中提到 Builder 注解的其中一个大坑会导致默认值失效&#xff01; 最近阅读了 《Oh !! Stop using Builder》 发现 Builder 的问题还不止一个&#xff0c;Builder 会让人误以为是遵循构建器…