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

如何让这段JavaScript代码作用于HTML中多个ID为frameText的标签

问题解决方法

首先明确HTML的基础规则:同一个页面中id属性值必须全局唯一,如果你给多个标签设置了相同的id,document.getElementById()只会匹配到第一个符合条件的元素,剩下的元素不会被选中,这就是你原来的代码只能给一个标签赋值的原因。
你猜测的用循环实现批量赋值的思路是完全正确的,具体实现步骤如下:

1. 调整HTML标签属性

把所有需要显示目标文本的标签,统一加上相同的class属性(class是专门给同类元素做分组用的,允许重复使用),比如都设置class="frameText":

<!-- 把原来重复写的id="frameText"全部替换成class属性 -->
<p class="frameText"></p>
<div class="frameText"></div>
<h3 class="frameText"></h3>

2. 修改JS赋值逻辑

你之前写的生成重复字符串的逻辑不需要改动,只需要把最后单元素赋值的代码,替换成批量选中元素+循环赋值的逻辑即可,完整代码如下:

let multi = 2;
let str = "Little lamb";
let multiStr = "";

while(multi > 0){
  multiStr += str
  multiStr += " ";
  multi--;
}

multiStr = multiStr.trimEnd();
console.log(multiStr); // 输出 "Little lamb Little lamb"

// 选中所有带frameText类名的标签,得到一个元素集合
const targetElements = document.querySelectorAll(".frameText");
// 遍历集合里的每一个标签,统一设置内容
for(let i = 0; i < targetElements.length; i++){
  targetElements[i].textContent = multiStr;
}

注:如果只是设置纯文本内容,用textContent比innerHTML更安全,性能也更好;如果要插入HTML内容再用innerHTML即可。

不推荐的兼容写法(违反HTML规范)

如果你暂时不想修改HTML里重复的id属性,也可以通过属性选择器强行选中所有id为frameText的元素,但这种写法不符合HTML规范,很容易在后续开发中引发其他问题,仅做了解:

// 不符合规范,非必要不要用
const targetElements = document.querySelectorAll('[id="frameText"]');
for(let i = 0; i < targetElements.length; i++){
  targetElements[i].textContent = multiStr;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 14:57:18