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

如何改写JavaScript使其在Squarespace的Ajax加载场景下正常运行

问题原因

开启Ajax加载功能的Squarespace站点在页面跳转时不会触发完整的页面重载,仅会替换页面主体内容区域。原有代码绑定在$(document).ready()中的逻辑仅会在首次进入站点时执行一次,后续通过Ajax加载的新页面中的h3元素无法被原有逻辑处理,因此只有手动刷新页面后才能生效。

改写后可用代码

将原有逻辑封装为可重复调用的函数,同时监听Squarespace内置的Ajax加载完成事件,每次新内容加载后自动重新执行初始化逻辑:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
// 折叠功能初始化逻辑
function initFoldEffect() {
  const $titleEls = $('.markdown-block .sqs-block-content h3');
  // 清除已绑定的点击事件,避免重复绑定
  $titleEls.css('cursor','pointer').off('click');
  // 设置默认折叠状态
  $titleEls.nextUntil("h3").slideToggle();
  // 绑定点击切换折叠事件
  $titleEls.click(function(){
    $(this).nextUntil("h3").slideToggle();
  });
}

// 首次页面加载完成后执行
$(document).ready(function(){
  initFoldEffect();
});

// 监听Squarespace Ajax加载完成事件,每次加载新页面后重新执行初始化
window.addEventListener('DOMContentLoaded', function() {
  if (window.Squarespace) {
    window.Squarespace.onInitialize(Y, function() {
      initFoldEffect();
    });
  }
});
</script>

代码说明

  • 若你的站点已经默认加载了jQuery,可以删除第一行的jQuery引入代码,避免重复加载影响页面性能
  • 代码中加入了事件解绑逻辑,避免同一元素被多次绑定点击事件导致折叠动画重复触发
可选简化方案(事件委托实现)

如果不需要每次加载页面都重复执行初始化逻辑,也可以用事件委托的写法,仅需执行一次即可适配所有Ajax动态加载的内容:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
  // 绑定全局样式生效逻辑
  $(document).on('mouseover', '.markdown-block .sqs-block-content h3', function() {
    $(this).css('cursor', 'pointer');
  });
  // 动态识别新增的h3元素,设置默认折叠
  $(document).on('DOMNodeInserted', '.markdown-block .sqs-block-content h3', function() {
    $(this).nextUntil("h3").hide();
  });
  // 全局委托点击事件,所有新增的h3元素都会触发折叠逻辑
  $(document).on('click', '.markdown-block .sqs-block-content h3', function(){
    $(this).nextUntil("h3").slideToggle();
  });
});
</script>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 17:45:02