回答編集履歴
3
変な表現している文章があったので修正
test
CHANGED
@@ -2,21 +2,29 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
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
|
-
|
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`等の貧弱なメソッドしかなく、クラス名で
|
51
|
+
当時は`getElementById`等の貧弱なメソッドしかなく、クラス名でDOMを検索することも不可能でした。
|
44
|
-
|
52
|
+
|
45
|
-
|
53
|
+
DOMツリー構造をルートから全て総当りで調査する…という事をやる必要がありました。
|
46
|
-
|
47
|
-
|
48
|
-
|
54
|
+
|
55
|
+
|
56
|
+
|
49
|
-
|
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
|
-
|
75
|
+
DOMが全て描画されるのを待ってからJSを実行するようにするのが定跡です。
|
76
|
+
|
77
|
+
|
78
|
+
|
66
|
-
|
79
|
+
しかし、当時は全てのブラウザが`addEventListener`を用意しているわけではありません。
|
80
|
+
|
67
|
-
|
81
|
+
IEでは代わりに`attachEvent`という似た役目の機能が用意されていました。
|
68
|
-
|
82
|
+
|
69
|
-
|
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
|
-
|
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
|
-
|
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
おまけ追加
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検索周りを強化
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
|
|