jQuery .each() 遍历失效?警惕 data-* 属性名大小写陷阱
发布时间 - 2026-01-11 00:00:00 点击率:次jquery `.each()` 未执行或条件判断总失败,很可能是因 `$(this).data('viewname')` 中的驼峰式属性名与 html 中 `data-viewname` 的实际解析规则不符——jquery 会自动将 `data-*` 属性名转为小写并用驼峰转换(如 `data-view-name` → `'viewname'`),但 `data-viewname` 实际被解析为 `'viewname'`,导致取值为空。
在 jQuery 中,.data() 方法对 data-* 属性的读取遵循严格的命名规范化规则:*所有 `data-属性名在 DOM 中必须使用短横线分隔(kebab-case),jQuery 才能正确映射为驼峰式 JavaScript 键名**。而直接使用驼峰写法(如data-viewName)属于非法 HTML 属性命名,浏览器虽会容忍,但 jQuery 内部会将其统一转为全小写('viewname'),导致$(this).data('viewName')返回undefined,进而使整个.each()循环中的判断逻辑失效(undefined.toLowerCase()` 报错或恒为 false)。
✅ 正确做法是:
- 统一使用 kebab-case 命名 HTML data 属性;
- 在 JS 中用全小写键名调用 .data()(jQuery 自动完成 kebab → camelCase 映射,但前提是源属性名合法)。
修改后的 HTML(关键:data-view-name 替代 data-viewName):
Step 1 Step 2
对应 JavaScript(使用 'view-name' 或 'viewName' 均可,推荐语义清晰的 'viewName'):
var myURL = window.location.pathname; // ✅ 推荐用 pathname,避免协议/域名干扰
var arrURL = myURL.split('/');
var thisView = arrURL[arrURL.length - 1].toLowerCase();
console.log('Current view:', thisView);
console.log('Nav items found:', $('.navStep').length);
$('.navStep').each(function() {
// ✅ 正确:jQuery 自动将 data-view-name 映射为 'viewName'
var viewName = $(thi
s).data('viewName'); // 或 .data('view-name')
if (thisView === viewName?.toLowerCase()) {
$(this).addClass('current');
} else {
$(this).removeClass('current');
}
});⚠️ 注意事项:
- 永远不要在 HTML 中写 data-viewName —— 它违反 HTML5 规范,且 jQuery 无法可靠识别;
- 使用 window.location.pathname 而非完整 URL,避免路径匹配错误(如 /path/sftpaccount vs /sftpaccount);
- 添加空值防护 viewName?.toLowerCase(),防止 data-view-name 缺失时报错;
- 确保脚本在 DOM 加载完成后执行(推荐包裹在 $(document).ready() 或置于
# javascript
# java
# jquery
# html
# js
# html5
# 浏览器
# app
# win
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在宝塔面板创建新站点?
Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】
如何在云服务器上快速搭建个人网站?
Thinkphp 中 distinct 的用法解析
网站制作企业,网站的banner和导航栏是指什么?
Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控
如何获取PHP WAP自助建站系统源码?
如何快速使用云服务器搭建个人网站?
制作旅游网站html,怎样注册旅游网站?
高端企业智能建站程序:SEO优化与响应式模板定制开发
如何用5美元大硬盘VPS安全高效搭建个人网站?
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件
Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤
Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】
Laravel如何优化应用性能?(缓存和优化命令)
音乐网站服务器如何优化API响应速度?
Laravel如何使用withoutEvents方法临时禁用模型事件
Python并发异常传播_错误处理解析【教程】
phpredis提高消息队列的实时性方法(推荐)
开心动漫网站制作软件下载,十分开心动画为何停播?
HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程
如何确保西部建站助手FTP传输的安全性?
Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】
Laravel如何为API生成Swagger或OpenAPI文档
JavaScript实现Fly Bird小游戏
Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程
jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
,交易猫的商品怎么发布到网站上去?
如何用VPS主机快速搭建个人网站?
html5的keygen标签为什么废弃_替代方案说明【解答】
如何登录建站主机?访问步骤全解析
Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤
Laravel如何实现本地化和多语言支持?(i18n教程)
Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程
Laravel如何创建自定义Facades?(详细步骤)
如何制作一个表白网站视频,关于勇敢表白的小标题?
JS弹性运动实现方法分析
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信
如何在云主机上快速搭建多站点网站?
今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】
HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】
百度浏览器网页无法复制文字怎么办 百度浏览器复制修复


s).data('viewName'); // 或 .data('view-name')
if (thisView === viewName?.toLowerCase()) {
$(this).addClass('current');
} else {
$(this).removeClass('current');
}
});