元素的属性nodeName自动变为小写

问题描述 投票:0回答:3

为什么元素的attributes属性中属性的nodeName会变成小写,如何变成驼峰式命名法?

我有以下代码:

<div myAttr = "true"></div>
<script>
var div = document.getElementsByTagName('div')[0];
var attr = div.attributes[0];
console.log(attr.nodeName);
</script>

这会显示myattr,但是在标记中,它是myAttr,为什么会这样?以及如何修复它?

javascript html
3个回答
0
投票

所有代码都必须小写:这适用于 HTML 元素名称、属性、属性值(除非文本/CDATA)、CSS 选择器、属性和属性值(字符串除外)。

请参考此链接: https://google.github.io/styleguide/htmlcssguide.html#Capitalization


0
投票

来自 HTML 规范

[…] 在 HTML 语法中,属性名称,甚至是外国的属性名称 元素,可以使用小写和大写字母的任意组合书写 这是属性名称的 ASCII 不区分大小写的匹配。

如果您点击链接并向上滚动一点,也有关于标签名称的类似部分。

因此,HTML 解析器并不关心您对属性名称使用哪种大小写组合。我找不到准确说明自定义属性必须由 DOM 规范化为小写的地方(这是最相关的位),但由于匹配的 必须 不区分大小写,为什么不呢。请注意,如果您尝试使用混合大小写:

div.getAttribute('myAttr')

它将返回预期值,即使内部属性名称是“myattr”。话又说回来,这会做同样的事情:

div.getAttribute('MYattR')

0
投票

这是一个老派的解决方案,来自 B 开发人员(最初在 APL-360 中接受过 A 培训)

    static void ChangeNodeNamesToLower(XmlDocument dom)
    {
        if (dom == null) return;
        char[] sampleXML = dom.DocumentElement.OuterXml.ToCharArray();
        bool inquote=false;
        for(var i=0; i<sampleXML.Length; i++)
        {
            if (sampleXML[i]=='"') inquote= !inquote;
            if(!inquote) {
                sampleXML[i] =Char.ToLower( sampleXML[i]);
            }
        }
        dom.LoadXml(new string(sampleXML));           
    }
© www.soinside.com 2019 - 2024. All rights reserved.