[21] 要素の属性同士には順序がありますが、その順序は意味を持ちません。 これは少し複雑です。
[22] HTML文書やXML文書では開始タグの属性指定並びで属性が何らかの順序で記述されます。 これは文字列である以上、避けられないことです。 このとき、記述の順序はありますが、その順序には意味がなく、 順序を変えても解釈が変わることは原則ありません。 例外として、同じ属性名の属性が複数あるときは、 最初のもの以外が無視されます。
[23]
DOM では要素の属性並びに属性が格納されますが、
属性並びは並びです。並びには順序がありますが、
その順序には意味がなく、順序を変えても解釈が変わることは原則ありません。
例外として、同じ属性名の属性が複数あるときの挙動に影響します。
また、 attributes
NamedNodeMap
の列挙の順序となります。
属性並びの変更が発生する処理は DOM Standard
で定められていて、何もしていないのに勝手に順序が変わることはありません。
[25] HTMLの構文解析やXMLの構文解析では、 属性指定並び中の属性の順序が DOM の属性並び中の属性の順序にどう反映されるか、 仕様上定められていません。 これは仕様策定当時の実装がばらばらだったことに起因します >>7, >>5。
[26]
HTMLの直列化やXMLの直列化では、
DOM
の属性並び中の属性の順序が
HTML / XML
の属性指定並び中の属性の順序にどう反映されるか、
仕様上定めれていません。
ただし HTML では安定していることが要求され >>24、
明文規定がないものの XML でも同様です。
ここでいう安定とは、例えば innerHTML
取得器を連続して何度も実行したときに、
同じ順序で直列化されるということです。
[7] HTML文書中の属性の順序は、 Firefox と IE7 は逆ソース順、 Chrome はソース順となっています。
[27]
innerHTML
の設定器で HTML を与え、
直後に innerHTML
の取得器で HTML を取得すると、
Chrome は試した限り確実に元の順序で属性が並んでいますが、
Firefox は元通りだったり変わっていたり法則性が掴めません。
[28] 今となってはもうこんな非互換性を残しておく意味は皆無だし、 全部ソース順 = 属性並び順になるよう整理してほしいもんだなあ。
[1] attributes
内の属性節点の順序
[8] Bug 17176 – Element attributes should not be required to be stored in an ordered list, .innerHTML remains unspecified ( ( 版)) https://www.w3.org/Bugs/Public/show_bug.cgi?id=17176
[9] Bug 17871 – Element attributes should not be required to be stored in an ordered list ( ( 版)) https://www.w3.org/Bugs/Public/show_bug.cgi?id=17871
[10] XBL 2.0 ( ( 版)) http://dev.w3.org/2006/xbl2/Overview.html#the-attributes-attribute
[11] XBL 2.0 ( ( 版)) http://dev.w3.org/2006/xbl2/Overview.html#attribute-forwarding
[12] Bug 21986 – Element.attributes needs to have a named getter ( ( 版)) https://www.w3.org/Bugs/Public/show_bug.cgi?id=21986
[15] 13913 – Attributes don't have an order ( 版) https://www.w3.org/Bugs/Public/show_bug.cgi?id=13913
[16] Editorial: define attribute list in terms of Infra's list (annevk著, ) https://github.com/whatwg/dom/commit/f88c7a087268f5a9cf55b92c40754107e696d705
[17] Remove <applet> (zcorpan著, ) https://github.com/whatwg/html/commit/b9b9d60f9451c05f8e8d542e4094f987ae1a5fb8
[18] Make attribute order not matter for <progress> (annevk著, ) https://github.com/whatwg/html/commit/6bf4f3cf2fbfb265fcd9f079a371a7cc68d4fe62
[19] Spec for `progress` element either specifies attribute order dependency or can be easily misread that way · Issue #3066 · whatwg/html () https://github.com/whatwg/html/issues/3066
[20] Make attribute order not matter for <progress> by annevk · Pull Request #3067 · whatwg/html () https://github.com/whatwg/html/pull/3067