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

点击.moveright按钮时关联音频div无法移动的问题排查

音频div无法同步移动的代码问题分析

代码中的核心问题

  • 错误1:获取图片类名的目标元素错误
    你用$('.moveright').first('div.c img.r')是从页面所有.moveright按钮中查找第一个匹配的图片,这和当前点击按钮所属的div.c完全无关。应该基于当前点击的按钮,定位到它所在的div.c里的图片:

    const imgClasses3 = $(this).closest('div.c').find('img.r').attr('class');
    
  • 错误2:语法错误(括号未闭合)
    最后一行代码的insertAfter方法缺少闭合括号,导致代码无法正常执行:
    原错误代码末尾:

    $($(selector3).closest('div.aud')).insertAfter($($(selector3).closest('div.aud')).next('div.aud');
    

    需补上最后的):

    $(selector3).closest('div.aud').insertAfter($(selector3).closest('div.aud').next('div.aud'));
    
  • 额外优化:避免重复DOM查询
    原代码多次重复查询同一个元素,既冗余又影响性能,可将查询结果存为变量复用,比如:

    const currentAudDiv = $(selector3).closest('div.aud');
    currentAudDiv.insertAfter(currentAudDiv.next('div.aud'));
    

修正后的完整代码

$('.parent').on('click', '.moveright', function() {
  // 处理图片所在的div.c移动
  const currentCDiv = $(this).closest('div.c');
  const nextCDiv = currentCDiv.next('div.c');
  if (nextCDiv.length) { // 仅当存在下一个div.c时执行移动
    currentCDiv.insertAfter(nextCDiv);
  }

  // 处理对应音频的div.aud移动
  const imgClasses3 = currentCDiv.find('img.r').attr('class');
  const selector3 = 'audio.' + imgClasses3.split(' ').join('.'); 
  const currentAudDiv = $(selector3).closest('div.aud');
  const nextAudDiv = currentAudDiv.next('div.aud');
  if (nextAudDiv.length) { // 仅当存在下一个div.aud时执行移动
    currentAudDiv.insertAfter(nextAudDiv);
  }
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 19:35:23