什么是DOMs元素属性的attribute.specified?

时间:2013-01-23 20:57:50

标签: dom attributes

我偶然发现了这样的事情......

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是什么意思?它代表什么?它在规格中的定义在哪里?

3 个答案:

答案 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