我偶然发现了这样的事情......
function(element) {
...
var attributes = element.attributes;
for (var index = 0, length = attributes.length; index < length; index++) {
var attribute = attributes[index];
// what is ".specified"?
if (attribute.specified) {
...
}
}
}
我正在查看DOM元素的W3C规范,Element接口,我在任何地方都看不到specified
。
http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-745549614
attribute.specified
是什么意思?它代表什么?它在规格中的定义在哪里?
答案 0 :(得分:2)
<img src="kittens.jpg">
。属性为src
,其值为kittens.jpg
。 DOM元素是通用定义。实际属性由所使用的实际语言指定,例如, XML,HTML等......
指定=该属性具有分配给它的显式值。例如指定了src属性,因为它被赋予了值kittens.jpg,但是
<input type="checkbox" checked />
checked属性为PRESENT,但不是SPECIFIED。
答案 1 :(得分:1)
我刚刚发现了属性节点的属性specified
仅对IE 6-7有意义的信息,因为在IE 6-7中,attributes
返回支持的所有属性的集合由特定元素节点。然后,您可以使用specified
来确定集合中的属性是否附加到元素节点。如果元素节点没有指定/定义此属性,它将返回false。在现代浏览器中attributes
实际上返回附加到元素的属性集合,这意味着集合中的每个attribute.specified
都会在现代浏览器中返回true
。对于现代浏览器,element.hasAttribute(attribute)
的工作方式是element.attributes[attribute].specified
适用于IE 6-7。
答案 2 :(得分:-1)
不同的浏览器具有不同的DOM实现,并注意实现负责此属性,而不是用户。但是,用户可以更改属性的默认值。
对于Chrome 54.0.2840.71,它使每个attribute.specified为true,无论是否在DOM规范中,它是否具有值。
例如,Chrome中指定的属性__test
始终为true(版本54)。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div __test></div>
<script>
var div=document.querySelector("div");
var attributes = div.attributes;
var attr_test=attributes[0];
attr_test.specified=false;// "specified" is not writable and Setting it silently fails.
console.log(attr_test.specified);
</script>
</body>
</html>
所以我同意&#34;它正在被剥夺的方式&#34;。
&#34;属性指定&#34; DOM级别3与DOM级别2规范不同。
1.同点
如果在实例文档中显式指定了此属性,则为true,否则为false。如果应用程序更改了此属性节点的值(即使它最终具有与默认值相同的值),则将其设置为true。
2.Differences
&#34; DOM-2级别&#34;有更复杂的判断条件来判断&#34;属性指定&#34;是真是假
&#34; DOM-级别3&#34;说
实现可以类似地处理来自其他模式的默认值的属性,但应用程序应该使用Document.normalizeDocument()来保证此信息是最新的。
在中搜索specified of type boolean, readonly
https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-637646024
VS
https://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-862529273