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

如何获取class为demo的父元素下子元素的id,排除父元素id为simone的情况?

解决方案:跳过指定父元素的子元素ID收集

我来帮你搞定这个需求!咱们先明确目标:要获取所有class为demo的元素下的子元素ID,但如果这个demo元素的ID是simone,就跳过它的子元素,不收集其ID。

原代码的问题分析

你的现有代码存在几个小问题:

  • name变量未初始化,直接拼接会导致结果开头出现undefined
  • 没有判断子元素所属的.demo父元素是否为simone,所以会误收集simone-child的ID
  • 在循环内部重复更新DOM,没必要且影响性能

修改后的完整代码

HTML部分(保持不变)

<div id="maja" class="demo"><div id="maja-child"></div></div>
<div id="alex" class="demo"><div id="alex-child"></div></div>
<div id="simone" class="demo"><div id="simone-child"></div></div>
<div id="pit" class="demo"><div id="pit-child"></div></div>
<div id="get-demo"></div>

JavaScript部分

// 初始化空字符串,避免undefined开头
let name = '';
// 获取所有.demo元素下的后代元素
const divsname = document.querySelectorAll('.demo *');

divsname.forEach(function(div) {
  // 找到当前元素最近的.demo父元素
  const parentDemo = div.closest('.demo');
  // 检查父元素存在,且父元素ID不是simone,同时当前元素有ID
  if (parentDemo && parentDemo.id !== 'simone' && div.hasAttribute('id')) {
    name += "Name: "+div.getAttribute("id")+", ";
  }
});

// 循环结束后统一更新DOM,提升性能
document.getElementById("get-demo").innerHTML = name.slice(0, -2); // 去掉最后多余的逗号和空格
console.log(name.slice(0, -2));

关键代码解释

  • closest('.demo'):这个方法会从当前元素向上查找,找到最近的带有demo类的祖先元素,能准确判断子元素属于哪个.demo父容器
  • 增加判断parentDemo.id !== 'simone':直接跳过属于simone父元素的所有子元素
  • name.slice(0, -2):最后去掉拼接时多余的末尾逗号和空格,让结果更整洁
  • 把DOM更新放在循环外部:避免每次循环都操作DOM,提升代码运行效率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 15:52:37