
本文介绍在 HTML 中批量为每个 内的第一个 元素应用相同样式或类名的方法,涵盖纯 CSS 选择器方案与 JavaScript 动态添加 class 的完整实现。
本文介绍在 html 中批量为每个 `
` 元素应用相同样式或类名的方法,涵盖纯 css 选择器方案与 javascript 动态添加 class 的完整实现。
在实际开发中,我们常遇到这样的结构:一个无序列表 <ul></ul> 包含多个 <li>,每个 <li> 内嵌套若干 <p></p><div class="aritcle_card flexRow">
<div class="artcardd flexRow">
<a class="aritcle_card_img" href="/xiazai/code/12093" title="CSS婚礼策划服务机构宣传网站模板"><img
src="https://img.php.cn/upload/webcode/000/000/018/178607072210981.jpg" alt="CSS婚礼策划服务机构宣传网站模板" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a href="/xiazai/code/12093" title="CSS婚礼策划服务机构宣传网站模板">CSS婚礼策划服务机构宣传网站模板</a>
<p>CSS婚礼策划服务机构宣传网站模板是一款适合提供婚礼策划和婚庆服务机构宣传网站模板下载。提示:本模板调用到谷歌字体库,可能会出现页面打开比较缓慢。</p>
</div>
<a href="/xiazai/code/12093" title="CSS婚礼策划服务机构宣传网站模板" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a>
</div>
</div> 段落。若需统一高亮或样式化每个 <li> 下的首个 <p></p>(而非整个列表中的第一个 <p></p>),仅靠 :first-child 伪类是不够的——因为它用于匹配 DOM 树中的位置关系,无法直接操作 class 属性。
✅ 推荐方案一:纯 CSS 选择器(适用于仅需样式控制)
使用子选择器 > 结合 :first-child 可精准定位每个 <li> 的直接子级中第一个 <p></p>:
li > p:first-child {
background-color: #ffebee;
font-weight: bold;
padding: 8px 12px;
border-left: 4px solid #f44336;
}该规则会自动作用于所有符合条件的 <p></p> 元素,无需修改 HTML 结构,也无需 JavaScript。注意:li > p:first-child 要求 <p></p> 是 <li> 的直接子元素且是其子元素中的第一个(即前面不能有其他同级标签如 <span></span> 或文本节点);若结构复杂,可改用 li p:first-of-type 提升容错性。
✅ 推荐方案二:JavaScript 动态添加 class(适用于需语义化类名或后续 JS 交互)
当必须为这些元素显式添加 class(例如用于响应式逻辑、第三方库识别或 BEM 命名规范),可借助 document.querySelectorAll() 配合 classList.add():
立即学习“前端免费学习笔记(深入)”;
// 获取所有 li 下的首个 p 元素
const firstParagraphs = document.querySelectorAll('li > p:first-child');
firstParagraphs.forEach(p => p.classList.add('highlight-first-paragraph'));配合 CSS:
.highlight-first-paragraph {
background-color: #e3f2fd;
color: #1976d2;
}✅ 优势:语义清晰、便于维护、支持条件判断(如跳过特定 li);
⚠️ 注意:需确保脚本在 DOM 加载完成后执行(推荐放在 DOMContentLoaded 事件中或 底部)。
? 补充说明
- 若
<li>内首子元素不是<p></p>(如含<h3></h3>或空格文本节点),:first-child将不匹配,此时建议改用li p:first-of-type(匹配第一个<p></p>类型元素,忽略中间其他标签); - 不推荐使用
:nth-of-type(1)替代:first-child,因它按类型计数而非位置,可能误选非首子元素; - 在 Vue/React 等框架中,更推荐在渲染层通过
v-for/map()结合索引逻辑处理,避免依赖 DOM 查询。
综上,优先使用 CSS 选择器实现样式需求;仅当业务需要显式 class 时,再引入轻量 JavaScript —— 这既符合渐进增强原则,也保障了性能与可维护性。

















