新闻中心
jQuery 代码重构:通过函数避免重复指令以优化动态 UI 更新

本文将指导读者如何通过封装函数来优化重复的 jQuery 代码,特别是在处理页面加载和用户交互时动态更新 UI 的场景。我们将以一个根据下拉菜单选择项显示不同提示信息的实例为例,详细解析如何将重复的逻辑提取为可重用的函数,从而提高代码的可读性、可维护性,并避免常见的语法错误。
在前端开发中,我们经常需要根据用户的操作或页面状态动态地更新用户界面(UI)。一个常见的场景是,当页面加载时需要检查某个初始状态,并且在用户后续与该元素交互时(例如,改变下拉菜单的选项)再次执行相同的逻辑。这种模式很容易导致代码重复,降低代码的可维护性和可读性。本教程将通过一个具体的 jQuery 示例,演示如何有效地避免这种重复。
识别重复代码问题
假设我们有一个下拉菜单,根据其选中的值,需要显示不同的提示信息(tooltip)。初始的实现可能如下所示,它在页面加载时检查一次,并在下拉菜单值改变时再次执行相同的逻辑:
$(document).ready(function(){
var service = "";
var otherservice = "";
var selectId = 'select#989022_58716pi_989022_58716'; // 优化选择器重复
// 页面加载时检查下拉菜单值
service = '.v' + $(selectId + ' option:selected').val();
otherservice = '#form-tooltips div:not('+service+')';
$('#form-tooltips div'+service).show();
$(otherservice).hide();
// 下拉菜单值改变时再次检查
$(selectId).on('change', function(){
service = '.v' + $(selectId + ' option:selected').val();
otherservice = '#form-tooltips div:not('+service+')';
$('#form-tooltips div'+service).show();
$(otherservice).hide();
});
});
// 提示信息的HTML结构,通常在页面其他地方或通过JS动态生成
$("<div id='form
-tooltips'><div class='v1381962'>Tooltip 1</div><div class='v1381965'>Tooltip 2</div></div>").insertAfter(".add-tooltip-after");在这段代码中,显示和隐藏提示信息的逻辑在 $(document).ready() 块中和 on('change') 事件处理器中重复出现了。这种重复不仅增加了代码量,而且一旦需要修改提示逻辑,就必须在多个地方进行同步更新,容易出错。
解决方案:封装为可重用函数
为了避免代码重复,我们可以将这部分逻辑封装到一个独立的函数中。这样,无论是在页面加载时还是在事件触发时,我们都可以简单地调用这个函数。
错误的尝试及原因分析
在尝试封装函数时,初学者可能会遇到语法错误。例如,以下尝试是错误的:
$(document).ready(function(){
var service = '';
var otherservice = '';
// 错误的函数定义语法
function checkTooltip({ // 错误:函数定义不应使用对象解构语法,且缺少函数体的大括号
service = '.v' + $('select#989022_58716pi_989022_58716 option:selected').val();
otherservice = '#form-tooltips div:not("+service+")';
$('#form-tooltips div'+service).show();
$(otherservice).hide();
}); // 错误:函数定义后不应有分号
checkTooltip();
// 错误的事件绑定:checkTooltip() 会立即执行并将其返回值(undefined)作为事件处理器
$('select#989022_58716pi_989022_58716').on('change', checkTooltip());
});上述代码中的主要问题在于函数定义的语法不正确,以及事件处理器绑定时对函数的调用方式不当。J*aScript 函数定义通常使用 function name() { ... } 或箭头函数 const name = () => { ... } 形式。此外,在事件绑定时,我们应该传递函数本身的引用,而不是调用函数的返回值。
正确的函数封装与应用
以下是正确的函数封装和应用方式:
MarsCode
字节跳动旗下的免费AI编程工具
339
查看详情
$(document).ready(function(){
// 建议使用 let 或 const 替代 var
let service = '';
let otherservice = '';
const selectId = 'select#989022_58716pi_989022_58716'; // 缓存选择器
// 定义一个函数来处理提示信息的显示/隐藏逻辑
const checkTooltip = () => {
// 获取当前选中项的值,并构建选择器
service = '.v' + $(selectId + ' option:selected').val();
// 构建要隐藏的其他提示信息的选择器
otherservice = '#form-tooltips div:not(' + service + ')';
// 显示与选中值对应的提示信息
$('#form-tooltips div' + service).show();
// 隐藏所有其他提示信息
$(otherservice).hide();
};
// 页面加载时立即执行一次,以处理初始状态(如页面刷新后值仍存在)
checkTooltip();
// 绑定 change 事件,当下拉菜单值改变时调用 checkTooltip 函数
// 注意:这里是传递函数引用 checkTooltip,而不是执行函数 checkTooltip()
$(selectId).on('change', checkTooltip);
});
// 提示信息的HTML结构,通常在页面其他地方或通过JS动态生成
$("<div id='form-tooltips'><div class='v1381962'>Tooltip 1</div><div class='v1381965'>Tooltip 2</div></div>").insertAfter(".add-tooltip-after");代码解析与注意事项
-
函数定义 (const checkTooltip = () => { ... }):
- 我们使用 ES6 的箭头函数语法定义了 checkTooltip 函数。这是一种简洁的函数定义方式,也可以使用传统的 function checkTooltip() { ... } 语法。
- 函数体内包含了所有与显示/隐藏提示信息相关的逻辑。
-
变量声明 (let service = '';):
- 推荐使用 let 或 const 替代 var 进行变量声明。let 允许变量在块级作用域内重新赋值,而 const 用于声明常量(不可重新赋值)。这有助于避免变量污染和意外的副作用。
-
缓存选择器 (const selectId = 'select#989022_58716pi_989022_58716';):
- 将重复使用的选择器字符串存储在一个常量中,可以提高代码的可读性,并便于后续修改。
-
初始调用 (checkTooltip();):
- 在 $(document).ready() 内部直接调用 checkTooltip(),确保页面加载时根据当前下拉菜单的选中值显示正确的提示信息。这对于处理页面因表单提交错误而刷新,但下拉菜单值仍保持不变的情况非常重要。
-
事件绑定 ($(selectId).on('change', checkTooltip);):
- 这是关键点之一。在 on() 方法中,我们将 checkTooltip 函数本身作为第二个参数传递,而不是调用它(即 checkTooltip())。
- 当 change 事件发生时,jQuery 会自动调用 checkTooltip 函数。如果写成 checkTooltip(),那么函数会在事件绑定时立即执行,并将函数的返回值(通常是 undefined)作为事件处理器,导致事件无法正常触发。
-
选择器优化建议:
- 原始的选择器 select#989022_58716pi_989022_58716 包含了一长串数字和下划线,可读性较差。在实际项目中,建议使用更具语义化和人类可读性的 ID 或类名,例如 select#service-selector。这会使代码更容易理解和维护。
总结
通过将重复的逻辑封装到函数中,我们成功地将 jQuery 代码从重复模式转变为更简洁、更易于维护的结构。这种重构不仅减少了代码量,还提高了代码的可读性,并使得未来的功能扩展或修改变得更加简单。在编写 J*aScript 和 jQuery 代码时,始终寻找机会将重复的逻辑提取为可重用的函数,是提高代码质量的关键实践之一。
以上就是jQuery 代码重构:通过函数避免重复指令以优化动态 UI 更新的详细内容,更多请关注其它相关文章!
# es6
# 开封网络营销sem推广有前景吗
# 什么样的网站容易优化
# 汕头外贸社交媒体推广营销指南
# 马鞍山和县企业营销推广
# 莆田网站建设推广多少钱
# 戴尔公司网站优化
# 而不是
# 返回值
# 绑定
# 有什么
# 表单
# 是在
# 重构
# 选择器
# javascript
# java
# jquery
# html
# js
# 前端
# 处理器
# 前端开发
# 作用域
# 表单提交
# 提示信息
# 加载
# 江门网站优化推广哪家快
# 抖音seo投放服务
# 阜阳网站优化单位有哪些
# 网站优化错误代码大全
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
PHP 枚举:根据字符串获取枚举案例的策略与实现
win11 arm版怎么安装 M1/M2 Mac虚拟机安装ARM win11的方法
Django表单验证失败时保留用户输入数据的最佳实践
CSS布局中意外空白:解决padding-top导致的顶部间距问题
如何在离线环境中使用Composer_Composer离线安装依赖包的技巧与策略
Pandas DataFrame 多条件优先级排序与排名
CSS布局:解决全屏元素100%尺寸与外边距导致的页面溢出问题
如何在 Windows 11 中启动游戏手柄设置
J*aScript打印功能_j*ascript输出控制
XML中包含HTML标签导致解析错误? 正确嵌入非XML数据的两种方法
iwriter统一登录平台 iwrite账号密码登录页面
Typer应用中灵活处理命令行参数的令牌化与解析
J*aScript中赋值与自增运算符的复杂交互与执行机制
漫蛙漫画登录站点 漫蛙2正版漫画快速访问
处理动态列数据:J*a ArrayList的正确初始化与字符累加教程
《刺客信条:影》PS5 Pro和Switch 2画面对比
J*aScript中正确使用querySelectorAll与复杂CSS选择器
163邮箱网页版入口导航平台 163邮箱网页版登录入口官网导航
小猿搜题在线学习页面在哪_小猿搜题在线学习中心入口
深入理解Google Cloud Datastore查询:祖先路径与数据一致性
微信聊天记录怎么加密_微信聊天记录加密方法
三星GalaxyZFold5怎样在相册制作折叠屏分镜_iPhone三星GalaxyZFold5相册制作折叠屏分镜【创意编辑】
Surface怎么安装系统 微软Surface Pro U盘重装win11教程
J*aScript数组对象转换:按指定键分组与值收集
Golang切片为何属于引用类型_Golang slice底层结构与引用语义说明
Excel文件在线转换快速入口 Excel在线格式转换网站
Centos/Linux 系统下安装 composer 的完整步骤
优化Log4j2控制台输出性能:解决异步日志瓶颈
必由学官网快捷入口 必由学网页版在线学习平台
小米汽车11月交付量突破40000台!雷军:将继续努力
抖音极速版最新版本 抖音极速版官方下载地址
高德地图怎么看全景照片_高德地图全景照片浏览教程
Win11怎么开启卓越性能模式 Win11电源选项启用高性能释放硬件潜力【方法】
php源码怎么看淘宝客系统_看php源码淘宝客系统技巧
韩剧圈正版入口页面_韩剧圈官网登录链接
C++如何实现线程池_C++11手动实现一个简单的固定大小线程池
在Qt QML中通过Python字典动态更新TextEdit内容的教程
Lar*el的路由模型绑定怎么用_Lar*el Route Model Binding简化控制器逻辑
Golang如何使用context实现超时取消_Golang context超时取消模式实践
LINQ to XML为何解析失败? 深入理解C# XDocument的异常处理
AO3中文官网链接_AO3网页版稳定镜像站
steam官方入口大全 steam账号注册及操作指南
Node.js 中使用 node-cron 实现定时 API 数据抓取与处理
PPT平滑切换怎么做 PPT炫酷“平滑”切换动画制作教程【必学】
深入理解字体排版:Adobe光学字偶距与CSS字偶距的差异与实现
如何使用spryker/configurable-bundles-products-resource-relationship模块解决复杂产品捆绑关系难题
邮编格式怎么匹配地址_根据邮编格式快速匹配详细地址的技巧
汽车之家官方网站官网入口_汽车之家网页版直接进入
sublime怎么进行远程开发编辑_配置rsub/rmate实现sublime编辑服务器文件
顺丰快递查单号物流信息 顺丰快递小程序查询入口


2025-10-14
浏览次数:次
返回列表
-tooltips'><div class='v1381962'>Tooltip 1</div><div class='v1381965'>Tooltip 2</div></div>").insertAfter(".add-tooltip-after");