在Pug模板中正确使用和JavaScript访问HTML data-* 属性

在Pug模板中正确使用和JavaScript访问HTML data-* 属性

本教程详细阐述了在Pug模板中定义并从JavaScript中正确访问HTML data-* 属性的关键。核心在于理解HTML data-* 属性必须以 data- 前缀命名,且在JavaScript中通过 HTMLElement.dataset 访问时,kebab-case 会自动转换为 camelCase。文章通过代码示例,指导开发者避免常见错误,确保前后端数据传递的顺畅性。

引言:理解 data-* 属性的作用

在web开发中,我们经常需要在html元素上存储一些不属于标准属性的自定义数据,以便javascript脚本能够读取和操作。html5引入的 data-* 全局属性正是为此目的而生。它们提供了一种标准的方式来存储私有数据,这些数据对页面内容的呈现没有直接影响,但可以被javascript轻松访问。

例如,一个按钮可能需要关联一个ID或一个特定的操作类型,这些信息可以通过 data-* 属性附加到按钮元素上,然后在用户点击时被JavaScript获取并处理。

问题解析:错误的 data-* 属性命名

在Pug(或任何HTML模板引擎)中定义 data-* 属性时,一个常见的错误是未能遵循其严格的命名规范。根据HTML标准,所有自定义数据属性都必须以 data- 前缀开头。

考虑以下Pug代码片段:

button.sbt-enroll(subject-data-slug=`${subject[0].slug}`) enroll

这里的属性名 subject-data-slug 虽然包含了 data 关键字,但它并没有以 data- 作为完整的前缀。这意味着浏览器不会将其识别为一个标准的 data-* 属性。当JavaScript尝试通过 HTMLElement.dataset API来访问这个属性时,它将无法找到预期的值,因为 dataset API只处理符合 data- 命名规范的属性。

立即学习“Java免费学习笔记(深入)”;

例如,如果一个属性是 my-data-id=”123″,那么在JavaScript中可以通过 element.dataset.myId 来访问。但如果属性是 custom-id=”123″,则 dataset 将无法直接访问它。在上述Pug示例中,subject-data-slug 实际上被视为一个普通的自定义属性,而不是 data-* 属性家族的一员。

解决方案:遵循 data-* 规范与 dataset 访问规则

要正确地在Pug模板中定义 data-* 属性并在JavaScript中访问它们,需要遵循以下两个关键规则:

HTML属性命名: 属性名必须以 data- 开头,后面跟着一个或多个小写字母、数字、连字符(-)、点(.)、冒号(:)或下划线(_)。通常推荐使用 kebab-case(短横线连接)来命名 data-* 属性,例如 data-subject-slug。

JavaScript访问: 当通过 HTMLElement.dataset 属性访问这些数据时,JavaScript会自动将 kebab-case 命名的属性转换为 camelCase(驼峰命名法)。例如,data-subject-slug 将被转换为 subjectSlug。

Pug模板中的正确定义

将原始的Pug代码修改为符合 data-* 规范:

button.sbt-enroll(data-subject-slug=`${subject[0].slug}`) enroll

这里,我们将属性名从 subject-data-slug 修改为 data-subject-slug,使其完全符合HTML data-* 属性的命名规范。

JavaScript中的正确访问

相应地,在JavaScript中访问这个属性时,需要使用其 camelCase 形式:

let subjectBtn = document.querySelector(".sbt-enroll");if (subjectBtn) {  subjectBtn.addEventListener("click", (e) => {    e.preventDefault();    // 从 e.target.dataset 中解构出 subjectSlug    // data-subject-slug 在 JS 中对应 subjectSlug    const { subjectSlug } = e.target.dataset;    applySubject(subjectSlug);  });}// 示例:假设 applySubject 函数存在function applySubject(slug) {  console.log(`Applying subject with slug: ${slug}`);  // 可以在这里执行 AJAX 请求或页面跳转等操作}

通过以上修改,当点击按钮时,e.target.dataset 将能够正确识别并包含 subjectSlug 属性,从而允许 applySubject 函数接收到正确的数据。

完整代码示例

为了更好地理解,以下是Pug模板和JavaScript代码的关键部分的整合示例:

Pug 模板 (index.pug)

doctype htmlhtml  head    // ... 其他头部内容 ...    title= subject[0].name    style      include ../public/style.css  body    section.courses-background      // ... 导航和其他元素 ...      .text-box        h1= subject[0].name        p= subject[0].summary    // subjects    section.course      p= subject[0].description      .subject        // 修正后的 data-* 属性        button.sbt-enroll(data-subject-slug=`${subject[0].slug}`) enroll  // 确保脚本在 DOM 元素加载后执行  script(src='/js/bundle.js')

JavaScript 文件 (bundle.js 或 index.js)

// 获取按钮元素let subjectBtn = document.querySelector(".sbt-enroll");// 确保按钮存在,避免空引用错误if (subjectBtn) {  // 添加点击事件监听器  subjectBtn.addEventListener("click", (e) => {    e.preventDefault(); // 阻止默认行为,如表单提交    // 从事件目标(被点击的按钮)的 dataset 中获取数据    // data-subject-slug 在 JavaScript 中被访问为 subjectSlug    const { subjectSlug } = e.target.dataset;    // 调用处理函数,并传入获取到的 slug    applySubject(subjectSlug);  });}// 定义 applySubject 函数function applySubject(slug) {  console.log(`执行报名操作,科目 slug 为: ${slug}`);  // 在这里可以添加实际的业务逻辑,例如:  // - 发送 AJAX 请求到后端 API 进行报名  // - 页面重定向到报名确认页  // - 显示一个确认消息}

注意事项与最佳实践

命名规范的严格性: 始终牢记 data-* 属性必须以 data- 开头。任何不符合这个前缀的属性都不会被 HTMLElement.dataset API识别。驼峰命名转换: 从 kebab-case 到 camelCase 的自动转换是 dataset API 的核心特性。理解这一点对于在JavaScript中正确访问属性至关重要。脚本加载时机: 确保你的JavaScript代码在DOM元素完全加载并可用之后再执行。将 标签放在

以上就是在Pug模板中正确使用和JavaScript访问HTML data-* 属性的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1513208.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
js怎样获取当前时间戳
上一篇 2025年12月20日 07:34:50
javascript闭包怎么避免循环引用问题
下一篇 2025年12月20日 07:35:05

相关推荐

  • vivo浏览器收藏夹在哪里_vivo浏览器书签收藏位置与管理方法

    1、打开vivo浏览器,点击右上角三点菜单进入“收藏”即可查看收藏夹;2、可通过主页添加“收藏夹”小部件快捷访问;3、在收藏夹中新建文件夹并拖动书签分类管理;4、支持导出HTML格式书签文件至本地备份;5、登录vivo账号并开启数据同步,可实现多设备间书签自动同步。 如果您在使用vivo浏览器时想要…

    2026年9月10日
    000
  • thinkphp ajax请求接收不到数据怎么回事

    答案:ThinkPHP中AJAX接收不到数据主因是请求方式与后端处理不匹配。1. 前端以JSON格式发送需用contentType: ‘application/json’,后端须通过file_get_contents(‘php://input’)解析;…

    2026年9月10日
    100
  • 倒反天罡!AI 新贵 345 亿美元报价谷歌浏览器,此前碰瓷 Tiktok 未果

    ai 应用领域再掀惊涛骇浪。 一家成立仅三年的初创公司 Perplexity,突然向科技巨头谷歌发起震撼攻势——正式提出以 345 亿美元全现金收购 Chrome 浏览器业务。 这一数字令人瞠目:Perplexity 在今年 7 月完成最新一轮融资后,估值仅为 180 亿美元。此次报价几乎达到自身估…

    2026年9月10日
    100
  • VSCode Webview面板架构设计

    Webview面板是VSCode扩展中用于嵌入网页内容的核心组件,基于Chromium引擎运行在隔离环境中,由Webview Panel、HTML内容、消息通信机制和资源加载策略构成;通过postMessage实现与扩展主进程的双向通信,需使用asWebviewUri安全引用本地资源;设计时应注重隔…

    2026年9月10日
    000
  • win10忘记开机密码怎么进入系统 _Win10忘记密码进入系统方法

    若无法登录Windows 10,可通过微软账户在线重置密码;本地账户可利用恢复环境替换Utilman.exe调用命令提示符修改密码,或使用PE启动盘清除密码;还可启用隐藏管理员账户绕过登录,若有预先创建的密码重置盘也可用于恢复访问。 如果您无法输入正确的密码登录Windows 10系统,导致被锁定在…

    2026年9月10日
    000
  • VSCode怎么右键打开HTML_VSCode右键菜单添加HTML预览功能教程

    首先安装“Open in Browser”插件并重启VSCode,右键HTML文件可选择在默认浏览器中预览;通过设置指定浏览器如Chrome或Firefox,或使用Live Server插件实现自动刷新预览,若插件失效则检查配置、环境变量或重装插件。 在VSCode中,右键打开HTML文件并进行预览…

    2026年9月10日
    100
  • 虚拟化与云计算硬核技术内幕 (32) —— 产品经理与潘金莲

    在上一期中,小e学习了如何利用namespace机制,实现了进程之间cpu、ram、网络、用户、文件系统挂载点和进程ipc的隔离,同时也学习了利用cgroups机制,来限制进程对资源的使用,例如将进程占用的cpu时间片限制为100mcore (100毫核,相当于0.1核)。 有了这两种机制,是不是就…

    2026年9月10日
    000
  • edge浏览器怎么为特定网站设置语言_edge浏览器多语言网站显示设置教程

    首先为特定网站设置首选语言,点击地址栏锁形图标进入语言选项并选择所需语言;其次调整浏览器默认语言顺序,添加语言并设为首选后重启浏览器;最后禁用自动翻译功能,关闭“提供翻译”选项并清除相关网站规则,确保目标网站以设定语言正常显示。 如果您在浏览多语言网站时发现Edge浏览器未正确显示特定语言,可能是由…

    2026年9月10日
    000
  • VSCode版本管理:解决代码冲突

    代码冲突发生时,VSCode通过颜色高亮和操作按钮直观展示当前与 incoming 更改,可选择保留、合并或手动编辑,解决后保存并提交即可。建议频繁拉取更新、使用特性分支、减少共改同一文件以降低冲突风险。 在使用 VSCode 进行版本管理时,代码冲突是多人协作开发中常见的问题。当多个开发者修改了同…

    2026年9月10日
    000
  • vs2010怎么显示代码行数

    在使用 visual studio 2010 编程时,显示代码行数可以更高效地定位问题和理解程序结构。以下是几种在 vs2010 中查看或显示代码行数的有效方式。 方法一:利用状态栏查看当前行号 启动 VS2010,并打开需要编辑的项目。 在顶部菜单中点击“视图” → “状态栏”,确保状态栏已启用并…

    2026年9月10日
    100
  • Microsoft Teams如何创建活动页 Microsoft Teams团队建设的策划指南

    首先登录Microsoft Teams并进入目标团队频道,点击“日历”后选择“新建活动”,填写活动名称、时间并添加参与成员;随后在描述中补充议程等详情,勾选“在线会议”以生成会议链接。为提升团队建设效果,应明确活动目标,使用“计划程序”协调时间,通过“文件”标签共享资料,并用“@所有人”提醒成员。活…

    2026年9月10日
    000
  • NAVEE登陆《财富》中国最佳设计榜,成短途出行品类唯一获奖作品

    近日,2025年《财富》中国最佳设计榜正式发布,坦途科技旗下高端自研出行品牌navee的全新旗舰产品——xt5pro全地形越野电动滑板车,凭借卓越性能、前沿设计理念以及打破场景边界的用户体验,成功登榜。 这款主打全地形穿越的电动滑板车,并未局限于“最后一公里”城市通勤的拥挤赛道,而是精准切入越野这一…

    2026年9月10日
    000
  • 装双系统后开机没有启动选项怎么办_EasyBCD修复引导菜单方法

    首先确认引导设置中仅显示一个系统,说明另一系统未被识别;使用EasyBCD添加新条目,选择对应系统类型并指定分区;随后通过“BCD部署”功能将引导记录安装到MBR;重启后应恢复启动菜单。注意区分UEFI与Legacy模式,EasyBCD适用于Legacy环境,双系统建议统一引导方式,操作前备份数据以…

    2026年9月10日
    100
  • Laravel如何创建自定义Artisan命令_命令行工具扩展与开发

    创建自定义Artisan命令需先生成命令文件,再定义签名与描述,在handle方法中编写逻辑并使用依赖注入获取服务,通过argument和option获取参数,结合ask、confirm等方法交互输入,关键操作用DB::transaction包裹确保数据一致性,最后注册命令并测试执行。 Larave…

    2026年9月10日
    300
  • Linux命令行中lsof命令的实用技巧

    lsof是Linux中用于列出打开文件的命令行工具,可定位端口占用进程(如lsof -i :8080)、查看指定用户或进程打开的文件、查找导致设备忙的元凶、监控网络连接状态,并支持按协议、目录、文件类型等条件筛选,广泛应用于资源排查与系统运维。 lsof(List Open Files)是Linux…

    2026年9月10日
    100
  • vivo Vision 探索版官宣,今年暂不公开销售

    vivo Vision 探索版官宣,今年暂不公开销售vivo Vision 探索版官宣,今年暂不公开销售vivo Vision 探索版官宣,今年暂不公开销售vivo Vision 探索版官宣,今年暂不公开销售

    今天,vivo官方正式揭晓,vivo vision发布会暨影像盛典将于8月21日14:30正式启幕。 官方表示:“vivo 30年本心之路,以热爱为名坚守初心,开启未来科技探索的新起点。你好,vivo Vision 探索版混合现实头显!你好,影像战略升级!” 从宣传内容来看,此次活动不仅将发布混合现…

    2026年9月10日 用户投稿
    100
  • Laravel事件系统?事件监听如何注册?

    Laravel事件系统通过发布/订阅模式实现解耦,核心逻辑触发事件后由独立监听器处理副作用,EventServiceProvider集中注册事件与监听器,提升代码可维护性;监听器实现ShouldQueue接口可异步执行,结合$tries重试机制与failed()方法处理错误,保障系统健壮性。 Lar…

    2026年9月10日
    000
  • 谷歌浏览器怎么去掉“由您的组织管理”的提示_Chrome企业管理提示隐藏方法

    若谷歌浏览器显示“由您的组织管理”,可通过禁用启动项与服务、删除注册表中Google Chrome策略键值、重置浏览器设置及卸载可疑软件四步解决,适用于工作策略或第三方程序导致的受控状态。 如果您在使用谷歌浏览器时,发现顶部出现“由您的组织管理”的提示,这通常意味着浏览器的某些设置已被企业策略或管理…

    2026年9月10日
    100
  • 【2025数智产业系列榜单】AI+教育场景创新领军企业榜发布!

    数字化与智能化转型已成为推动企业发展的核心引擎。如何准确洞察企业实际需求,科学衡量数智化发展水平,并充分释放数字技术的赋能潜力,正成为众多企业在转型升级过程中亟需破解的关键课题。在此背景下,一批先锋企业率先布局,以新技术、新业态、新模式为驱动,依托数智能力实现跨越式发展,树立了高质量转型的典范。 为…

    2026年9月10日
    000
  • windows怎么修复网络连接_windows网络连接故障排查方法

    首先运行网络疑难解答,依次重置网络适配器、更新驱动、检查DHCP和DNS服务状态,并将网络配置文件从公共改为专用以恢复连接。 如果您尝试连接网络时发现Windows设备无法正常上网,可能是由于网络配置错误、驱动问题或系统服务异常导致。以下是针对此类问题的排查与修复步骤: 本文运行环境:Dell XP…

    2026年9月10日
    100

发表回复

登录后才能评论
关注微信