回答編集履歴

3

変な表現している文章があったので修正

2018/02/14 07:36

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
@@ -2,21 +2,29 @@
2
2
 
3
3
 
4
4
 
5
- 似たような変数候補になる記号として`_`も用意されていますが、変数や引数として宣言はするけど使わず捨てる事を明示したいケースでの慣習る他、[Underscore.js](http://underscorejs.org/)や、その改良版ともいえる[Lodash](https://lodash.com/docs/4.17.5)というライブラリが占拠しています。
5
+ 似たような変数候補になる記号として`_`も用意されていますが、変数や引数として宣言はするけど使わず捨てる事を明示したいケースでの慣習として利用される他、[Underscore.js](http://underscorejs.org/)や、その改良版ともいえる[Lodash](https://lodash.com/docs/4.17.5)というライブラリが占拠しています。
6
-
7
-
8
-
6
+
7
+
8
+
9
- まぁ、要するに1行目は`$`という変数に向かって`()`で関数実行、
9
+ まぁ、要するに1行目は`$`という変数を関数と決め打ちして`()`で関数実行、
10
10
 
11
11
  引数に`"#ajax-tab-container-" + blockId + "-" + tagId`という文字列を指定していると和訳できます。
12
12
 
13
13
 
14
14
 
15
- で、誰がグローバル変数領域の`$`を占拠してるねん…となった時
15
+ で、誰がグローバル変数の`$`を占拠してるねん…となりますが
16
+
16
-
17
+ これは有名ライブラリのjQueryがjQuery関数の別名(エイリアス)として採用しています。
18
+
19
+ この辺の知識を元に、フロントエンジニアの方に質問すれば「まぁjQueryでしょうね」という回答が帰ってきます。
20
+
21
+
22
+
23
+ 当時はprototype.jsも変数`$`を利用するライブラリとして有名でしたが、
24
+
25
+ ネイティブのJSの動作に影響を及ぼす程の改変を施すので嫌われており、最近では殆ど見かけません。
26
+
17
- フロントエンドエンジニアには`$`は一般的にjQueryのエイリアスとし認識されてので、まぁjQueryなんじゃね?とう風に連想されます。
27
+ 後発のライブラリもjQuery干渉を避け`$`を使ませんので、実質jQueryが`$`を独占してる状況です。
18
-
19
- 大穴としてprototype.jsも変数`$`を占拠しているライブラリですが、多くのネイティブのJSの動作を汚すので嫌われており、最近では殆ど見かけなくなりました。
20
28
 
21
29
 
22
30
 
@@ -40,13 +48,13 @@
40
48
 
41
49
 
42
50
 
43
- 当時は`getElementById`等の貧弱なメソッドしかなく、クラス名で合致するDOMをつかむ事も不可能でした。
51
+ 当時は`getElementById`等の貧弱なメソッドしかなく、クラス名でDOMを検索することも不可能でした。
44
-
52
+
45
- クラス名で検索したければ、DOMツリー構造をルートから全て総当りで検索するしかありません
53
+ DOMツリー構造をルートから全て総当りで調査する…という事をやる必要がありました
46
-
47
-
48
-
54
+
55
+
56
+
49
- これも今は`querySelectorAll`等の便利なメソッドを使ってCSSセレクタを使ってDOMを掴んで操作出来ます。
57
+ 今は`querySelectorAll`等の便利な機能が実装されたので無理にjQueryを使う必要はなくなってます。
50
58
 
51
59
 
52
60
 
@@ -58,15 +66,21 @@
58
66
 
59
67
  まず素のJSはHTML上にscriptタグがある場所で即発火する仕様なので、
60
68
 
61
- DOMが全て描画される前に実行し、ボタンクリックでイベント仕込みたいけどないから諦めようみたいな糞な挙動をします
69
+ DOMが全て描画される前に実行し、イベント仕込む対象のボタンが描画されてないから諦めた」と言始めます
70
+
71
+
72
+
62
-
73
+ そのために`addEventListener`という機能があり、
63
-
64
-
74
+
65
- そのために`addEventListener`という機能があり、DOMが全て描画されるのを待ってからJSを実行するようにするのが定跡です。
75
+ DOMが全て描画されるのを待ってからJSを実行するようにするのが定跡です。
76
+
77
+
78
+
66
-
79
+ しかし、当時は全てのブラウザが`addEventListener`を用意しているわけではありません。
80
+
67
- 当時`addEventListener`がなくて代わりに`attachEvent`使ってねというマジかよ…な状況でした。
81
+ IEでは代わりに`attachEvent`という似た役目の機能が用意されていました。
68
-
82
+
69
- DOM描画を待ってか実行するように書きたいだけで何行にも及ぶおまじない必要した。
83
+ つまり、jQueryが無ければあれやこれやらのおまじないをif文で繋げる必要があり、相当な時間を浪費ていました。
70
84
 
71
85
 
72
86
 
@@ -104,7 +118,7 @@
104
118
 
105
119
  当時貧弱であったJSのDOM検索機能を補う為に、
106
120
 
107
- jQueryは「そうだ、CSSセレクタと同じ書き方でDOMを検索出来るようにすれば便利なんじゃね?」というで実装されました。
121
+ jQueryは「そうだ、CSSセレクタと同じ書き方でDOMを検索出来るようにすれば便利なんじゃね?」という発想で実装されました。
108
122
 
109
123
 
110
124
 
@@ -120,11 +134,11 @@
120
134
 
121
135
 
122
136
 
137
+ どうですか?
138
+
123
- どうですか?子セレクタや子孫セレクタにも対応している本格的なCSSセレクタが使えます
139
+ 子セレクタや子孫セレクタにも対応しており、ほぼネイティブなCSSセレクタで検索出来ます。
124
-
125
- デザイナ向けとして流行った理由がわかりますね。
140
+
126
-
127
- とはいえ所詮エミュレータですので、擬似クラスや属性セレクタになってくると少差異があります。
141
+ しかし所詮エミュレータですので、擬似クラスや属性セレクタというレベルになると少しずつ差異がれます。
128
142
 
129
143
  ガチで使うならドキュメントを読み込んだり、検証はしっかりしてくださいね。
130
144
 
@@ -132,15 +146,17 @@
132
146
 
133
147
  jQueryの登場初期はJSにはクラス指定を検索する機能が存在しませんでしたので、
134
148
 
135
- 内部的にはDOMツリーを全て再帰的に検索するという力技を駆使していました。
149
+ 内部的にはDOMツリーを再帰的に検索するという力技を駆使していました。
136
-
150
+
137
- 最近では`querySelector`等の機能が登場しましたので、利用出来るケースでは利用しながらサボる感じで動作するようです。
151
+ 最近では`querySelector`等の機能が登場しましたので、利用出来るケースでは利用しながら最小の機能で動作するようです。
152
+
153
+
154
+
138
-
155
+ 取得してきたDOMツリーはJS純正のNodeインスタンスとは違い、
156
+
139
-
157
+ jQueryオブジェクトという独自のインスタンスを返します。
140
-
158
+
141
- 取得してきDOMツリーはJS純正のNodeイスタンスとは違い、jQueryオブジェクという独自のイスタスを返しますので、変数名の頭に`$`を付ける事が慣習となっています。
159
+ そのめにフロントドエジニアは変数名の頭に`$`を付ける事が慣習となっています。
142
-
143
- なんかPHPみたいですね。
144
160
 
145
161
 
146
162
 
@@ -164,6 +180,8 @@
164
180
 
165
181
  DOM描画後に引数として渡した関数を実行するようにjQueryがよしなにやってくれます。
166
182
 
183
+ 今は全てのモダンブラウザが`addEventListener`を採用しているのでそこまで便利ではありませんけどね。
184
+
167
185
 
168
186
 
169
187
  > Ajax
@@ -208,7 +226,7 @@
208
226
 
209
227
  まじかよ、タグの中にメモとか説明書きとか書きたいじゃん。
210
228
 
211
- こう描いておけばめっちゃ便利でしょ!?!?!?
229
+ こうけばめっちゃ便利でしょ!?!?!?
212
230
 
213
231
 
214
232
 
@@ -230,7 +248,7 @@
230
248
 
231
249
 
232
250
 
233
- HTML5では条件付きですが完全開放されました。
251
+ HTML5では条件付きで開放されました。
234
252
 
235
253
  接頭語として`data-`をつければ何定義してもOK
236
254
 

2

おまけ追加

2018/02/14 07:36

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
@@ -160,9 +160,9 @@
160
160
 
161
161
 
162
162
 
163
- これで解決です
163
+ たったのこれだけ
164
-
164
+
165
- DOM描画後に引数として渡した関数を実行するようにjQueryがよしなにやってくれます
165
+ DOM描画後に引数として渡した関数を実行するようにjQueryがよしなにやってくれます
166
166
 
167
167
 
168
168
 
@@ -183,3 +183,103 @@
183
183
  - [jQuery.ajax - 英語の公式サイト(最新)](https://api.jquery.com/jQuery.ajax/)
184
184
 
185
185
  - [jQuery.ajax - 日本語リファレンス(1.9)](http://js.studio-kingdom.com/jquery/ajax/ajax)
186
+
187
+
188
+
189
+ ---
190
+
191
+
192
+
193
+ 【おまけ】 dataに関して
194
+
195
+
196
+
197
+ HTMLではタグの属性に値を埋め込む事が可能です。
198
+
199
+ `<div class="ここの部分!"></div>`
200
+
201
+
202
+
203
+ この属性(アトリビュート)ですが、W3CというHTMLの仕様を作ってる団体曰く、
204
+
205
+ HTMLの仕様で定義された属性名しか宣言しちゃ駄目!と言っています。
206
+
207
+
208
+
209
+ まじかよ、タグの中にメモとか説明書きとか書きたいじゃん。
210
+
211
+ こう描いておけばめっちゃ便利でしょ!?!?!?
212
+
213
+
214
+
215
+ ```HTML
216
+
217
+ <table name="items">
218
+
219
+ <tr id="item-1" name="モンハンワールド" price="9800">
220
+
221
+ <th>モンハンワールド</th>
222
+
223
+ <td>¥ 9,800 -</td>
224
+
225
+ </tr>
226
+
227
+ </table>
228
+
229
+ ```
230
+
231
+
232
+
233
+ HTML5では条件付きですが完全開放されました。
234
+
235
+ 接頭語として`data-`をつければ何定義してもOK
236
+
237
+
238
+
239
+ ```HTML
240
+
241
+ <table name="items">
242
+
243
+ <tr id="item-1" data-id="1" data-name="モンハンワールド" data-price="9800">
244
+
245
+ <th>モンハンワールド</th>
246
+
247
+ <td>¥ 9,800 -</td>
248
+
249
+ </tr>
250
+
251
+ </table>
252
+
253
+ ```
254
+
255
+
256
+
257
+ 前置きが長くなりましたが、ここからjQueryのターンです。
258
+
259
+ jQueryでは、DOMを掴んでこの`data-`の属性を自由に操作することができます。
260
+
261
+
262
+
263
+ ```JavaScript
264
+
265
+ // 値を取り出す
266
+
267
+ var price = $('#item-1').data('price');
268
+
269
+ // 値を格納
270
+
271
+ $('#item-1').data('price', 8800);
272
+
273
+ ```
274
+
275
+
276
+
277
+ [この記事](https://qiita.com/Kta-M/items/2eda39750abd10df9801)等を見る限り微妙に曰く付きだったりするのですが…
278
+
279
+ 例えばdataはJSの世界でアクセスすると、数値だった場合は勝手にNumber型として扱います。
280
+
281
+ 普通に属性としてアクセスした場合は、数値っぽいものも全て文字列、その関係で混在させるとうまく動いたり動かなかったりします。
282
+
283
+
284
+
285
+ 自分でコード書く時は注意してみてくださいね。

1

DOM検索周りを強化

2018/02/09 02:30

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
@@ -102,25 +102,37 @@
102
102
 
103
103
 
104
104
 
105
- ```JavaScript
106
-
107
- var $hoge = $('.hoge');
108
-
109
- var $piko = $('#piko');
110
-
111
- ```
112
-
113
-
114
-
115
105
  当時貧弱であったJSのDOM検索機能を補う為に、
116
106
 
117
107
  jQueryは「そうだ、CSSセレクタと同じ書き方でDOMを検索出来るようにすれば便利なんじゃね?」という事で実装されました。
118
108
 
119
109
 
120
110
 
111
+ ```JavaScript
112
+
113
+ var $hoge = $('.hoge');
114
+
115
+ var $piko = $('#piko > div');
116
+
117
+ var $items = $('ul.hoge li');
118
+
119
+ ```
120
+
121
+
122
+
123
+ どうですか?子セレクタや子孫セレクタにも対応している本格的なCSSセレクタが使えますね。
124
+
125
+ デザイナ向けとして流行った理由がわかりますね。
126
+
127
+ とはいえ所詮エミュレータですので、擬似クラスや属性セレクタになってくると多少差異があります。
128
+
129
+ ガチで使うならドキュメントを読み込んだり、検証はしっかりしてくださいね。
130
+
131
+
132
+
121
133
  jQueryの登場初期はJSにはクラス指定を検索する機能が存在しませんでしたので、
122
134
 
123
- DOMツリーを全て再帰的に検索するという力技等を駆使していました。
135
+ 内部的にはDOMツリーを全て再帰的に検索するという力技等を駆使していました。
124
136
 
125
137
  最近では`querySelector`等の機能が登場しましたので、利用出来るケースでは利用しながらサボる感じで動作するようです。
126
138