6

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

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 规范,但我看不到specified任何地方。

http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-745549614

是什么attribute.specified意思?它代表什么?它在规范中的哪里定义?

4

3 回答 3

3

<img src="kittens.jpg">. 属性为src,其值为kittens.jpg。DOM 元素是通用定义。实际属性由所使用的实际语言指定,例如 XML、HTML 等....

指定 = 属性有一个明确的值分配给它。例如,指定了 src 属性,因为它被赋予了值 kittens.jpg,但是

<input type="checkbox" checked />

选中的属性是 PRESENT,但不是 SPECIFIED。

于 2013-01-23T20:59:26.193 回答
1

我刚刚发现属性节点的属性specified仅对 IE 6-7 有意义的信息,因为在 IE 6-7 中attributes返回特定元素节点支持的所有属性的集合。然后您可以使用specified来确定集合中的属性是否附加到元素节点。如果元素节点没有指定/定义此属性,它将返回 false。在现代浏览器中返回附加到元素attributes的属性的集合实际上,这意味着集合中的每一个都将在现代浏览器中返回。对于现代浏览器,这种方式适用于 IE 6-7。attribute.specifiedtrueelement.hasAttribute(attribute)element.attributes[attribute].specified

于 2017-01-21T23:36:00.377 回答
-1

不同的浏览器对 DOM 有不同的实现,注意实现是负责这个属性的,而不是用户。但是,用户可以更改该属性的默认值。

至于 Chrome 54.0.2840.71,它使每个 attribute.specified 都为真,无论它是否在 DOM 规范中,它是否具有价值。例如,__test指定的属性在 Chrome(版本 54)中始终为 true。

<!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>

所以我同意“它正在被淘汰”。

DOM level3 中的“attribute.specified”与 DOM level2 规范不同。

1.同一点

如果该属性在实例文档中被显式地赋予了一个值,则为真,否则为假。如果应用程序更改了此属性节点的值(即使它最终具有与默认值相同的值),则将其设置为 true。

2.差异
“DOM-Level2”有更复杂的判断条件来判断“attribute.specified”是否为真。
“DOM-Level3”说

该实现可以类似地处理来自其他模式的具有默认值的属性,但应用程序应使用 Document.normalizeDocument() 来保证此信息是最新的。

specified of type boolean, readonly
https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-637646024
https://www.w3.org/TR/DOM-Level-2-Core/中搜索
core.html#ID-862529273

于 2016-11-11T14:49:02.543 回答