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

HTML自定义元素报错:‘anime’不是有效自定义元素名称的问题

问题原因与解决方法

报错核心原因

自定义元素的名称必须包含至少一个连字符(-),这是W3C自定义元素规范的强制要求——目的是避免与原生HTML标签冲突,同时防止未来新增的原生标签和自定义标签重名。你使用的anime是单单词,没有连字符,不符合合法命名规则,因此浏览器抛出CustomElementRegistry.define: 'anime' is not a valid custom element name错误。

解决方法

只需将自定义元素名称修改为包含连字符的格式(比如anime-item、my-anime等),同时对应更新JS和HTML代码即可。以下是两种可行的修正方案:

方案1:独立自定义元素(推荐)

这种方式直接创建独立的自定义标签,无需依赖原生内置元素:

class AnimeItem extends HTMLElement {
  constructor() {
    super();

    const name = this.getAttribute("name");
    const time = this.getAttribute("time");

    // 创建元素
    const checkbox1 = document.createElement("input");
    checkbox1.type = "checkbox";
    const checkbox2 = document.createElement("input");
    checkbox2.type = "checkbox";
    const nameContainer = document.createElement("span");
    const boldName = document.createElement("b");
    
    // 设置内容,匹配预期输出格式
    boldName.textContent = name;
    nameContainer.append(boldName);
    nameContainer.append(` (${time})`);

    this.append(checkbox1, checkbox2, nameContainer);
  }
}

// 注册带连字符的自定义元素
customElements.define("anime-item", AnimeItem);

对应的HTML代码:

<anime-item name="One Piece" time="15 Days"></anime-item>

方案2:自定义内置元素(继承原生div)

如果你需要继承HTMLDivElement的特性,可以使用这种方式,注册时需指定extends选项:

class AnimeDiv extends HTMLDivElement {
  constructor() {
    super();

    const name = this.getAttribute("name");
    const time = this.getAttribute("time");

    const checkbox1 = document.createElement("input");
    checkbox1.type = "checkbox";
    const checkbox2 = document.createElement("input");
    checkbox2.type = "checkbox";
    const nameContainer = document.createElement("span");
    const boldName = document.createElement("b");
    
    boldName.textContent = name;
    nameContainer.append(boldName);
    nameContainer.append(` (${time})`);

    this.append(checkbox1, checkbox2, nameContainer);
  }
}

// 注册继承div的自定义元素
customElements.define("anime-div", AnimeDiv, { extends: "div" });

对应的HTML代码:

<div is="anime-div" name="One Piece" time="15 Days"></div>

补充说明

  • 自定义元素命名规则完整要求:必须包含至少一个连字符,仅由小写字母、数字、连字符、下划线组成,且不能以数字、连字符开头(冒号用于命名空间,不推荐使用)。
  • 方案1的独立自定义元素更符合你直接使用自定义标签的需求,代码更简洁直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 07:18:11