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

如何选择首个无属性的span元素(排除末尾无属性元素)

选中第一个无属性的Span(避开最后一个)

嘿,针对你给出的HTML结构,要精准挑出第一个不带任何属性的<span>,同时避开最后那个无属性的<span>,我给你分两种场景整理了方案,看你用哪种技术:


方案1:纯CSS(适配你的特定结构)

如果你的HTML结构比较固定——第一个无属性span紧跟在带属性的span后面,最后那个无属性span是父元素的最后一个子元素——那用组合选择器就能搞定:

/* 精准命中目标:紧跟带class的span、无任何属性、还不是最后一个子元素 */
span[class] + span:not([class]):not([attribute]):not(:last-child) {
  /* 给你整个红框方便看效果 */
  outline: 2px solid red;
}

为啥这么写?

  • span[class] + span: 先锁定紧跟在带class的span后面的兄弟span;
  • :not([class]):not([attribute]): 把带class或那个自定义attribute的span都过滤掉,只留光秃秃的无属性span;
  • :not(:last-child): 直接排除掉父元素最后一个子元素,也就是你不想选的那个末尾span。

要是你需要更通用的(比如要适配所有可能的属性,不只是class和attribute),纯CSS就有点局限了,因为CSS没有直接匹配“完全无属性”的选择器,这时候用JS会更靠谱。


方案2:JavaScript/jQuery(灵活通用,适配各种结构)

如果你的HTML结构可能变,或者想更稳妥,用JS或者jQuery就简单多了:

jQuery版本(省事)

// 先找出所有无属性的span,直接取第一个就行
$('span:not([class]):not([attribute])').first().css('outline', '2px solid red');

原生JS版本(不用依赖库)

// 先筛选出所有符合条件的无属性span
const noAttrSpans = document.querySelectorAll('span:not([class]):not([attribute])');
// 要是有这样的元素,就给第一个加样式
if (noAttrSpans.length > 0) {
  noAttrSpans[0].style.outline = '2px solid red';
}

这个思路很直接:

先把所有不带class和自定义attribute的span都捞出来,然后直接取第一个,自然就跳过了最后那个无属性的span,不管结构怎么变,只要第一个无属性span存在,就能选中它。


测试一下你的代码

把上面的方案用到你给的HTML里:

<div>
  <span class="one" attribute="test"></span>
  <span></span> <!-- 这个会被选中 -->
  <span class="three" attribute="test"></span>
  <span class="four" attribute="test"></span>
  <span></span> <!-- 这个会被排除 -->
</div>

绝对能精准命中你要的那个span!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:36:50