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

使用原生JS将h1标题内No替换为N<sup>o</sup>并正常渲染标签

问题原因

你直接修改文本节点的nodeValue时,所有内容都会被识别为纯文本,写的HTML标签会被自动转义,因此不会被浏览器解析为DOM元素,只能显示成字符串。

方案1:安全DOM操作方案(推荐,适配有子元素的场景)

如果你的h1标题内包含其他子元素、或者有绑定事件的节点,用这个方案不会破坏原有DOM结构和事件绑定:

const title = document.querySelector('.product__title');
const walker = document.createTreeWalker(title, NodeFilter.SHOW_TEXT);
const textNodes = [];

// 先收集所有文本节点,避免DOM修改影响遍历
let node;
while (node = walker.nextNode()) {
  textNodes.push(node);
}

textNodes.forEach(textNode => {
  const text = textNode.nodeValue;
  // 全局匹配所有No并拆分文本
  const parts = text.split(/(No)/g);
  // 没有匹配到则跳过当前节点
  if (parts.length === 1) return;

  const fragment = document.createDocumentFragment();
  parts.forEach(part => {
    if (part === 'No') {
      // 拆分N和带sup标签的o
      fragment.appendChild(document.createTextNode('N'));
      const sup = document.createElement('sup');
      sup.textContent = 'o';
      fragment.appendChild(sup);
    } else {
      fragment.appendChild(document.createTextNode(part));
    }
  });

  // 替换原有文本节点
  textNode.parentNode.replaceChild(fragment, textNode);
});
方案2:简化方案(仅适用于纯文本标题)

如果你的h1标签内只有纯文本、没有其他子元素和绑定事件,可以直接用innerHTML实现,代码更短:

const title = document.querySelector('.product__title');
title.innerHTML = title.innerHTML.replace(/No/g, 'N<sup>o</sup>');

注意:该方案会覆盖原有h1内的所有DOM结构,原有子元素的事件绑定会全部失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:45:03