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

为何js-cookie无法作用于href值?请求技术协助

问题排查与修复方案

嘿,我帮你找出第一个代码跑不起来的几个关键问题啦,对比你那个正常运行的示例就能清晰看到差异:


1. attr() 方法的用法错误

第一个示例里的这段代码是核心问题:

if (href_name){
 $('#switch_style').attr(href_name);
}

jQuery.attr() 方法如果只传一个参数,它的作用是获取对应属性的值,而不是设置属性!你需要像点击事件里那样,明确指定要设置的属性名(这里是href)和对应的值,也就是写成 attr("href", 具体值) 的形式。

而第二个示例里的 addClass(box_color) 是正确的,因为 addClass() 本身就是接收类名字符串作为设置参数,和 attr() 的逻辑不一样。

2. 缺失初始默认状态的设置

第一个示例的 else 代码块是空的,当 cookie 不存在时,你没有给 #switch_style 设置默认的 href 值。而第二个示例会在 else 里给元素加上默认的black类,保证页面加载时就有正常的初始状态。

3. 可选优化:Cookie 路径设置(避免刷新后丢失)

有时候如果不指定 cookie 的路径,它可能只会在当前页面路径下生效,刷新或者跳转后就找不到了。可以在设置 cookie 时加上 path: '/' 参数,确保全站都能读取到这个 cookie。


修正后的完整代码

// Set Default
var names = ['car', 'bus'];
// Get Cookie
var href_name = $.cookie('href_name');
// Cookie Exists
if (href_name){
  // 正确使用attr:第一个参数是属性名,第二个是要设置的值
  $('#switch_style').attr("href", href_name);
}
// Cookie Doesn't Exist - 设置默认的href值
else {
  $('#switch_style').attr("href", 'car'); // 用默认的car作为初始链接
}
$('#box').on('click', function(){
  $("#switch_style").attr("href", 'bus' );
  // 添加path参数,确保cookie在全站范围内有效
  $.cookie('href_name', 'bus', { path: '/' });
});

这样修改后,点击#box会切换href为bus并写入cookie,刷新页面后会读取cookie并保持修改后的状态,页面加载时也会有默认的car链接值啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:22:37