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

滚动时仅在指定类存在时单次前置插入元素 如何避免重复添加?

问题根源

  • 滚动事件触发频率极高,只要#container有active类,每次触发都会执行一次prepend操作,导致元素重复插入
  • $("#container-wrapper").remove("<p>Test</p>")写法错误,jQuery的remove()方法是删除当前选中的元素本身,而非传入选择器删除子元素,原有代码根本无法正确移除插入的p标签

修正方案

核心思路是插入前先判断元素是否已经存在,避免重复插入;删除时精准选中要移除的p标签,两种实现可选:

方案1:给插入元素加专属标识判断(逻辑更直观)

$(window).scroll(function() {
  const $wrapper = $("#container-wrapper");
  const $targetP = $wrapper.children("p.insert-test");
  if($("#container").hasClass("active")){
    $wrapper.addClass("active-exists");
    // 元素不存在才执行插入
    if($targetP.length === 0) {
      $wrapper.prepend("<p class='insert-test'>Test</p>");
    }
  } else {
    $wrapper.removeClass("active-exists");
    // 元素存在才执行删除
    if($targetP.length > 0) {
      $targetP.remove();
    }
  }
});

方案2:用状态变量判断(性能更好,减少DOM查询次数)

// 外部定义状态标记,无需每次滚动都查询DOM判断元素是否存在
let hasInserted = false;
$(window).scroll(function() {
  const $wrapper = $("#container-wrapper");
  if($("#container").hasClass("active")){
    $wrapper.addClass("active-exists");
    if(!hasInserted) {
      $wrapper.prepend("<p class='insert-test'>Test</p>");
      hasInserted = true;
    }
  } else {
    $wrapper.removeClass("active-exists");
    if(hasInserted) {
      $wrapper.children("p.insert-test").remove();
      hasInserted = false;
    }
  }
});

额外优化建议

如果想进一步降低滚动事件的执行频率,避免不必要的性能消耗,可以加节流处理:

// 100ms最多执行一次滚动逻辑
let scrollTimer = null;
let hasInserted = false;
$(window).scroll(function() {
  if(scrollTimer) return;
  scrollTimer = setTimeout(() => {
    const $wrapper = $("#container-wrapper");
    if($("#container").hasClass("active")){
      $wrapper.addClass("active-exists");
      if(!hasInserted) {
        $wrapper.prepend("<p class='insert-test'>Test</p>");
        hasInserted = true;
      }
    } else {
      $wrapper.removeClass("active-exists");
      if(hasInserted) {
        $wrapper.children("p.insert-test").remove();
        hasInserted = false;
      }
    }
    scrollTimer = null;
  }, 100);
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:18:02