为什么元素的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,为什么会这样?以及如何修复它?
所有代码都必须小写:这适用于 HTML 元素名称、属性、属性值(除非文本/CDATA)、CSS 选择器、属性和属性值(字符串除外)。
请参考此链接: https://google.github.io/styleguide/htmlcssguide.html#Capitalization
来自 HTML 规范:
[…] 在 HTML 语法中,属性名称,甚至是外国的属性名称 元素,可以使用小写和大写字母的任意组合书写 这是属性名称的 ASCII 不区分大小写的匹配。
如果您点击链接并向上滚动一点,也有关于标签名称的类似部分。
因此,HTML 解析器并不关心您对属性名称使用哪种大小写组合。我找不到准确说明自定义属性必须由 DOM 规范化为小写的地方(这是最相关的位),但由于匹配的 必须 不区分大小写,为什么不呢。请注意,如果您尝试使用混合大小写:
div.getAttribute('myAttr')
它将返回预期值,即使内部属性名称是“myattr”。话又说回来,这会做同样的事情:
div.getAttribute('MYattR')
这是一个老派的解决方案,来自 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));
}