You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过JS访问Mustache模板?登录后header.mustache中{{name}}显示用户名,但JS获取$('#user_id').text()返回空值的原因排查

问题

用户登录后,header.mustache模板中的{{name}}能正常显示用户名,但用JavaScript的$('#user_id').text()获取时却返回空值,想知道这是什么原因?

相关代码如下:

header.mustache 代码

<div class="navbar-collapse collapse" id="navbarSupportedContent"> 
<ul class="navbar-nav me-auto mb-2 mb-lg-0 ms-lg-4"> 
{{#userName}} 
<li class="nav-item"> 
<span class="nav-link active" id="user" aria-current="page" id="user_id">{{name}}</span> 
</li> 
<li class="nav-item"> 
<a href="/logout" class="nav-link active" role="button">Logout</a> 
</li> 
{{/userName}} 
{{^userName}} 
<li class="nav-item"> 
<a href="/oauth2/authorization/google" class="nav-link active" aria-current="page" >Login</a> 
</li> 
{{/userName}} 
<li class="nav-item"> 
<a href="/perfume/save" class="nav-link active" aria-current="page">register</a> 
</li> 
</ul> 
</div>

index.js 代码

save: function () { 
let data = { 
userId: $('#user_id').text(), 
perfumeName: $('#favorite_perfume').val(), 
image: $('#unfavorable_perfume').val() 
}; 
$.ajax({ 
type: 'POST', 
url: '/api/v1/pre', 
dataType: 'json', 
contentType: 'application/json; charset=utf-8', 
data: JSON.stringify(data) 
}).done(function () { 
alert('Pass'); 
window.location.href = '/'; 
}).fail(function (error) { 
alert(JSON.stringify(error)); 
}); 
}
分析与解决方案

嘿,我一眼就瞅出问题所在了——你的<span>标签里重复定义了两个id属性:id="user"和id="user_id"!

HTML规范里明确要求,一个元素只能有一个唯一的id,浏览器解析的时候只会认第一个出现的id,也就是这里的user。所以你用$('#user_id')去查找元素,浏览器根本找不到对应的节点,自然返回空值。

解决起来超简单,只需要删掉重复的id,把<span>标签改成这样就行:

<span class="nav-link active" id="user_id" aria-current="page">{{name}}</span>

顺带提个小细节:如果你的JS代码是在页面完全加载前执行的,也可能出现获取不到元素的情况,但从你说{{name}}已经正常显示来看,页面肯定渲染完成了,所以核心问题就是这个重复id的坑。改完之后再试,$('#user_id').text()就能正常拿到用户名啦!

内容的提问来源于stack exchange,提问作者Patrick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 09:07:47