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

为何使用setAttribute为li添加class后fontSize样式未生效?

问题原因及解决办法

你遇到的问题根源很明确:你是在创建新<li>元素之前,就用document.querySelectorAll(".list-items")获取了页面上的列表项,这个方法返回的是静态集合,只会包含调用时页面已存在的5个初始<li>。后续动态添加的新<li>不会自动加入这个集合,所以自然不会被执行style.fontSize = "2rem"的设置。

下面给你几种可行的解决方式:

方式一:直接给新元素设置样式

在创建并添加新<li>后,单独给它设置字体大小:

const title = document.querySelector("#main-heading");
title.style.color = "red";

const listItems = document.querySelectorAll(".list-items");
for (i = 0; i < listItems.length; i++) {
    listItems[i].style.fontSize = "2rem";
}

const ul = document.querySelector("ul");
const li = document.createElement("li");
ul.append(li);
li.innerText = "X-men";
li.setAttribute('class', 'list-items');
// 给新元素单独设置样式
li.style.fontSize = "2rem";

方式二:用CSS类控制样式(推荐)

把字体大小的样式写到CSS的.list-items类中,而不是通过JS设置行内样式。这样不管是页面初始的元素,还是后续动态添加的元素,只要加上这个类,就会自动应用样式,更符合样式与逻辑分离的最佳实践。

添加CSS代码:

.list-items {
  font-size: 2rem;
}

修改后的JS代码(去掉循环设置行内样式的部分):

const title = document.querySelector("#main-heading");
title.style.color = "red";

const ul = document.querySelector("ul");
const li = document.createElement("li");
ul.append(li);
li.innerText = "X-men";
li.setAttribute('class', 'list-items');

方式三:添加新元素后重新获取并设置(不推荐)

如果一定要坚持用JS设置行内样式,可以在添加完新<li>之后,重新获取所有.list-items元素并统一设置样式。不过这种方法会重复处理已经设置过样式的初始元素,有点冗余,不推荐使用:

const title = document.querySelector("#main-heading");
title.style.color = "red";

const ul = document.querySelector("ul");
const li = document.createElement("li");
ul.append(li);
li.innerText = "X-men";
li.setAttribute('class', 'list-items');

// 重新获取所有列表项并设置样式
const listItems = document.querySelectorAll(".list-items");
for (i = 0; i < listItems.length; i++) {
    listItems[i].style.fontSize = "2rem";
}

内容的提问来源于stack exchange,提问作者David-JSON

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 16:05:15