回答編集履歴

4

名前の衝突リスク

2019/11/02 09:11

投稿

think49
think49

スコア18189

test CHANGED
@@ -24,7 +24,53 @@
24
24
 
25
25
 
26
26
 
27
+ form要素のname属性値が他のname属性値と重複しない場合、`document.formName` は**要素ノード**を返します。
28
+
29
+
30
+
31
+ ```HTML
32
+
33
+ <form name="foo"></form>
34
+
35
+ <script>
36
+
37
+ console.log(document.foo); // <form name="foo"></form>```
38
+
39
+ </script>
40
+
41
+ ```
42
+
43
+
44
+
27
- name属性値が文書中で一意前提でコードを書くと、`TypeError` 為、単数/複数もに対応できように条件分岐処理分けする事拡張性を担保できるようになりま
45
+ 将来的にHTML文書が変更されて、返り値が上記2つ状態変化すを想定すなら、条件分岐処理でどちらのパターンにも対応できるように書かければなりません
46
+
47
+
48
+
49
+ ```JavaScript
50
+
51
+ const foo = document.foo; // 要素ノードかHTMLCollectionか不明なノード
52
+
53
+ const fooList = foo.length ? foo : [foo]; // HTMLCollection でなければ、配列に格納しておく
54
+
55
+
56
+
57
+ for (let i = 0, len = fooList.length; i < len; ++i) {
58
+
59
+ const foo = fooList[i];
60
+
61
+
62
+
63
+ if (foo.tagName === 'FORM') {
64
+
65
+ console.log(foo); // <form name="foo"></form>
66
+
67
+ break;
68
+
69
+ }
70
+
71
+ }
72
+
73
+ ```
28
74
 
29
75
 
30
76
 
@@ -88,7 +134,51 @@
88
134
 
89
135
 
90
136
 
137
+ form要素ノードに限定されている為、`<img name>` 等の他要素のname属性値と衝突する事はありません。
138
+
91
139
  `document.forms` は **HTMLCollection** を返すAPIで現在でも実用できます。
140
+
141
+
142
+
143
+ ただし、HTMLCollection は `id` または `name` 属性値を検索するので、id属性値とは衝突します。
144
+
145
+ DOM Standard仕様上は「コレクションの中で初めに出現する要素」を参照します。
146
+
147
+
148
+
149
+ - [4.2.10.2. Interface HTMLCollection - DOM Standard](https://dom.spec.whatwg.org/#interface-htmlcollection)
150
+
151
+
152
+
153
+ > Return the first element in the collection for which at least one of the following is true:
154
+
155
+ >
156
+
157
+ > - it has an ID which is key;
158
+
159
+ > - it is in the HTML namespace and has a name attribute whose value is key;
160
+
161
+
162
+
163
+ が、「Google Chrome 78.0.3904.87」は順序に関わらず、id属性値を優先しました。
164
+
165
+ name属性値と衝突しないように気をつけた方が良さそうです。
166
+
167
+
168
+
169
+ ```HTML
170
+
171
+ <form name="foo"></form>
172
+
173
+ <form id="foo"></form>
174
+
175
+ <script>
176
+
177
+ console.log(document.forms['foo']); // <form id="foo"></form>
178
+
179
+ </script>
180
+
181
+ ```
92
182
 
93
183
 
94
184
 

3

typo修正

2019/11/02 09:11

投稿

think49
think49

スコア18189

test CHANGED
@@ -1,4 +1,4 @@
1
- ### <form name> はform要素の中で一意である
1
+ ### <form name> はform要素の中で一意である
2
2
 
3
3
 
4
4
 
@@ -72,7 +72,7 @@
72
72
 
73
73
 
74
74
 
75
- `form.formname` 下記コードの簡易版です。
75
+ `form.formname` 下記コードの簡易版です。
76
76
 
77
77
 
78
78
 

2

変換ミス

2019/11/02 01:32

投稿

think49
think49

スコア18189

test CHANGED
@@ -64,7 +64,7 @@
64
64
 
65
65
  本事象を回避する為に、組み込みのプロパティ名が**ドット記法で参照可能な名前に限定**されている事に着目し、ドット記法では表せない名前にする方法があります。
66
66
 
67
- 例えば、`-` はその一つであり、Selectors APIとも愛称が良いので、お勧めです。
67
+ 例えば、`-` はその一つであり、Selectors APIとも相性が良いので、お勧めです。
68
68
 
69
69
 
70
70
 

1

typo修正

2019/11/02 01:28

投稿

think49
think49

スコア18189

test CHANGED
@@ -24,7 +24,7 @@
24
24
 
25
25
 
26
26
 
27
- name属性値が文書中で一意の前提でコードを書くと、`TypeError` になる為、単数/複数ともに対応できるように上9件分岐で処理分けする事で拡張性を担保できるようになります。
27
+ name属性値が文書中で一意の前提でコードを書くと、`TypeError` になる為、単数/複数ともに対応できるように件分岐で処理分けする事で拡張性を担保できるようになります。
28
28
 
29
29
 
30
30