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

如何在JavaScript中获取及保留(X)HTML DOM元素名称的原始大小写?

HTML元素标签名大小写的规则与保留方法

核心规则

  • HTML命名空间(http://www.w3.org/1999/xhtml)内的元素:不管创建时用的是小写、大写还是混合大小写,nodeName和tagName都会返回全大写形式——这是HTML规范的要求,毕竟HTML标签本身就是不区分大小写的。
  • 非HTML命名空间的XML元素:nodeName会严格保留创建时的原始大小写,因为XML是大小写敏感的。

你的测试代码里,用document.createElement('fooBar')创建的元素默认属于HTML命名空间,所以nodeName返回全大写的FOOBAR,完全符合规范。

如何保留标签名的原始大小写

要让标签名在DOM中保留原始大小写,必须跳出HTML命名空间,有两种可靠方法:

  1. 创建独立的XML文档
    用new Document()生成一个纯XML文档,在这个文档里创建的元素会严格遵循大小写:
    const xmlDoc = new Document();
    const elem = xmlDoc.createElement('fooBar');
    console.log(elem.nodeName); // 输出 "fooBar"
    
  2. 使用自定义命名空间创建元素
    通过document.createElementNS()指定非HTML的命名空间,这样元素会保留原始大小写:
    const customElem = document.createElementNS('http://my-custom-namespace.com', 'fooBar');
    console.log(customElem.nodeName); // 输出 "fooBar"
    

至于你提到的“声明XHTML却没生效”:如果XHTML是以text/html的Content-Type发送的,浏览器会按HTML规则解析,依然会把标签名转成大写;只有当服务器以application/xhtml+xml的MIME类型发送时,浏览器才会以XML模式解析,此时标签名会保留大小写,但这种模式下浏览器容错性极低,且部分旧浏览器不兼容。

Chrome的特殊表现说明

从你提供的测试结果来看,Chrome控制台显示元素时能区分HTML命名空间下的原始大小写,但nodeName依然返回全大写,这是因为:

  • Chrome内部可能额外存储了元素创建时的原始标签名,但并没有暴露对应的API供开发者获取。
  • 这只是控制台的调试友好优化,不属于DOM规范的一部分,绝对不能依赖这个特性——Firefox等其他浏览器就没有这个行为,而且没有标准API支持获取所谓的“原始大小写”。

比如你在Chrome里创建document.createElementNS('http://www.w3.org/1999/xhtml', 'Test'),控制台显示<Test></Test>,但nodeName还是返回TEST,足以说明这只是控制台的特殊处理,而非DOM节点本身的属性。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 19:35:22