Más contenido relacionado
La actualidad más candente (18)
Similar a JSer Class #2 (20)
JSer Class #2
- 3. 開催概要
• 開催日時
• 3/2(水)〜 毎週水曜 19:30〜21:30 全3回予定
• 会場
• コラボレーションスペース(N・W)
• コンテンツ
• 第1回 JavaScriptの言語仕様
• 第2回 DOMとXmlHttpRequest、軽量フレームワーク
• 第3回 クライアントサイドMVC
再掲
- 4. 参考情報
• サイト
• JavaScriptガイド@MDN
• https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide
• 書籍
• JavaScript 第6版(サイ本)
• http://www.amazon.co.jp/dp/4873115736
• Effective JavaScript
• http://www.amazon.co.jp/dp/4798131113
再掲
- 17. サンプルコード
// ドキュメント(=ページ)内からid="btn"要素を検索
var btnElm = document.getElementById("btn");
// 要素がクリックされたとき実行したい処理を関数として定義
var onClick = function () {
alert('An element has id="btn" was clicked.');
};
// その関数をaddEventListenerメソッドで登録
btnElm.addEventListener("click", onClick);
当時、こんな素朴な処
理ですら、ブラウザ間
のAPIシグネチャのち
がいなど諸々を克服す
る必要があった。
- 22. DOMって何?
• DOM:Document Object Modelの略。
• XML/HTMLドキュメントをプログラムコード(JavaやJS)か
ら読み取り、探索し、変更するためのAPI仕様。
• W3CがLv1〜3まで段階的に策定をした。
• ドキュメントを木構造のオブジェクトで表わす。
• CSSやイベントに関する仕様も含まれ、Lvが上がるにつれてそ
の傾向が強まる。
• XML/HTMLの仕様ではないし、XML/HTMLを操作するAPIの
唯一の仕様でもない(が、有名だし実際重要)。
- 24. サンプルコード
// ドキュメント(=ページ)内からh1要素を検索
var h1Tags = document.getElementsByTagName("h1");
// h1タグで囲われた子孫ノードを文字列として取得
var h1Cont = h1Tags[0].innerHTML;
// id属性をキーにして要素を検索
var fooIdentified = document.getElementById("foo");
// fooの子要素の一覧から1番目(0開始)の要素を取得
var fooChild1 = fooIdentified.childNodes[1];
// 新しい要素を作成
var barCreated = document.createElement("bar");
// 要素をDOMのツリー内に追加する
fooChild1.appendChild(barCreated);
- 25. 参考資料
• W3C - All Standards - DOM
• https://www.w3.org/TR/#tr_DOM
• どら猫本舗 - DOM Lv1 仕様書の邦訳
• http://www.doraneko.org/misc/dom10/19981001/cover.html
• Java SE同梱のDOM実装(W3C謹製)
• https://docs.oracle.com/javase/jp/6/api/org/w3c/dom/package-
summary.html
* DOMのAPIの使い勝手を向上させるためにライブラリをつくってみました。プロジェクトのリポジトリはこち
ら→https://github.com/unclazz/unclazz-dom-queries
Java SE 1.4で追加された。
W3Cの定めた仕様に起因
する使い勝手の悪さが際
立つ…(*)。
- 41. DOM vs. jQuery
DOM
• getterには「1要素 or null」
系メソッドと「0〜N要素」系
メソッドが用意されている。
• 言い換えれば、メソッドが返
すのはnull ot 要素オブジェク
ト or 要素オブジェクト配列。
jQuery
• 「0〜N要素」系メソッドのみ
用意されている。
• メソッドが返すのは「0〜N要
素」をあらわす集合オブジェ
クト。
• 集合オブジェクトのメソッド
を呼ぶことで「0〜N要素」す
べてに効果が及ぶ。
- 44. セレクタの基本
• CSSのセレクタみたいなもの。でもそれ以上(*)。
• 例えば:
• #〜 id属性による要素指定
• .〜 class属性による要素指定
• [name=value] 任意属性による要素指定
• tagname タグ名による要素指定
• foo > bar fooの子要素bar
• foo bar fooの子孫要素bar
* 詳細については公式リファレンス(http://api.jquery.com/category/selectors/)もしくは有志の邦訳
(http://semooh.jp/jquery/api/selectors/)を参照のこと。
- 49. 起動方法
① JDK 7以上のインストール
② Maven 3.xのインストール
③ コマンドプロンプトでプロジェクト・ディレクトリに移動
④ mvn spring-boot:runコマンドを実行
⑤ "Started SampleApplication in x.xxx seconds"という表示を
待つ
⑥ ブラウザでlocalhost:8080/index.htmlにアクセス
- 50. RESTful API
URL メソッド 説明
/api/tasks GET タスク一覧の取得
/api/tasks/{id} GET タスクの取得
/api/tasks POST タスクの登録
/api/tasks/{id} DELETE タスクの削除
- 56. サンプル・アプリ解説⑥:
バグはどこにある?
$.get("/api/tasks", {}, function(data) {
var key, item;
for (key in data) {
item = data[key];
var taskItem = taskTpl.clone().show();
taskItem.removeClass("task-tpl").addClass("task-item");
$("td.task-id", taskItem).text(item.id);
$("td.task-title", taskItem).text(item.title);
$("td.task-action > button", taskItem).click(function(event) {
deleteTask(item.id);
});
taskNew.before(taskItem);
}
});
- 57. サンプル・アプリ解説⑥:
バグはどう直す?(修正例)
$.get("/api/tasks", {}, function(data) {
$.each(data, function(index, item) {
var taskItem = taskTpl.clone().show();
taskItem.removeClass("task-tpl").addClass("task-item");
$("td.task-id", taskItem).text(item.id);
$("td.task-title", taskItem).text(item.title);
$("td.task-action > button", taskItem).click(function() {
deleteTask(item.id);
});
taskNew.before(taskItem);
});
});