JQuery – 要素指定方法

基本形

要素種類

$('要素名')

全てのp要素の色が緑になる。

id指定

$('#id値')

id=1の要素が赤くなる。

クラス指定

$('.class値')

class='target'が指定された要素が青くなる。

包含関係

$('セレクター1 セレクター2')

スペースで並べる→セレクター1に含まれるセレクター2

$('セレクター1 > セレクター2')

'>'でつなぐ→セレクター1直下のセレクター2

$('セレクター1 + セレクター2')

'+'でつなぐ→セレクター1の次に現れるセレクター2

属性値指定

1つの属性値

HTML中の要素のうち、特定の属性が指定された要素をJQueryで指定したい場合。

$('要素名[属性=値])

value属性が"1"div要素が赤くなる。

2つの属性値のAND

$('要素名[属性1=値1][属性2=値2]')

name属性が"NAME"value属性の値が"VALUE"div要素の色が黄色になる。

 

JS/ES – 画像ファイルを読み込んでcanvasに表示

概要

JS/ES/JQueryで、ローカルのファイルを読み込んでcanvasに表示する手順。

大まかな流れは以下の通り。

  1. Imageクラスのオブジェクトを準備する
  2. document読み込み後(onload/ready)に以下を実行
    1. canvas要素の取得
    2. canvasからcontextの取得
    3. 画像ファイル選択時の処理
      1. 選択されたファイルのFileオブジェクトの取得
      2. FileReaderオブジェクトを構築
      3. FileReaderdata:URLとして読み込み
      4. FileReaderの読み込み完了時のリスナー登録
        • 読込後にリーダーの読み込み結果をImage.srcにセット
    4. Imageオブジェクトのロード後のリスナー登録
      • context.drawImagecanvasに描画

HTML

body内のhtmlは以下の通り。

input要素のtype属性をfileとすることで、HTML5のAPIが利用可能となる。

canvasのサイズは、ここではhtmlで設定しているが、スクリプトで動的に設定して画像サイズとcanvasのサイズを合わせることもできる。

JavaScript

全体の構造は以下の通り。ドキュメント内でグローバルに使う可能性があるImageオブジェクト以外は、onload/ready後の処理に入れている。

 

 

JQuery – 視覚効果

JQueryのみによる効果

ネイティブのCSSやJQueryによって、要素の表示/非表示の切り替え時のアニメーション効果を設定することができる。他のライブラリーによらない視覚効果についてこちらにまとめている

また、このうちのslideUp()/slideDown()メソッドについてこちらに詳しくまとめている

scrollTop

scrollTopによる画像スクロールでは、背景画像の縦位置をスクロール位置から計算する。その結果、画像のスクロールに伴って背景画像がスクロールし、立体的なイメージ効果を与える。

外部フレームワーク

ScrollMe

ScrollMeはJQueryのフレームワークで、画面をスクロール伴ってHTML要素に動きを加えることができる。

こちらのページにScrollMeの機能をまとめた。

 

 

JS/ES – JQuery – DOMの追加

概要

動的に生成したDOMを指定したDOMに対して追加する。追加されるDOMの外側/内側、前/後に応じて、before()prepend()append()after()の各メソッドを使う。

書式

[追加されるDOM].before([追加するDOM])
追加されるDOMの外側直前に追加。
[追加されるDOM].prepend([追加するDOM])
追加されるDOMの内側先頭に追加。
[追加されるDOM].append([追加するDOM])
追加されるDOMの内側末尾に追加。
[追加されるDOM].after([追加するDOM])
追加されるDOMの外側直後に追加。

実行例

結果イメージ:

beforeで追加

prependで追加
既存の要素の中身
appendで追加

 

afterで追加

JS/ES/JQuery – ストック

JQuery

プロパティーの設定

$([セレクター]).attr(属性名, 値);

取得

valueの取得

$([セレクター]).val();

連鎖

anchor要素を生成し、href属性にurlの文字列を設定し、表示文字列としてlink_nameを設定する。

 

JS/ES – JQuery – CSS

概要

JQueryでDOMのCSSの追加・変更・削除をするにはcss()メソッドを使う。

スタイルの設定

単一のプロパティー

css()メソッドの1つ目の引数にプロパティー、2つ目の引数に値を文字列で与えて、スタイルを設定する。

また、css()の第1引数だけにプロパティー名を指定すると、スタイルの値が得られる(以下の例では#00fで与えた色の値がrgb(0, 0, 255)で返されている)。

複数プロパティーの一括設定

css()の引数に連想配列(Object型)を与えて、複数のスタイルを一括指定する。連想配列のキーがプロパティー、値がスタイルの値になる。

複数のスタイルの値を確認するには、css()の引数に配列を与え、その配列の中で必要なスタイルプロパティーを複数指定する。戻り値は連想配列で返される。

スタイルの解除

css()の1つ目の引数にプロパティーを指定し、2つ目の引数を空文字列にすると、指定したスタイルが解除される。

 

JS/ES – JQuery – スクリプトの配置

概要

JavaScriptやJQueryの配置位置については、HTML要素の読み込みとの前後関係に注意しなければならない。

HTML要素の内容・スタイルの設定やイベントリスナーの登録など、オブジェクトの実体が必要な殆どの操作は、DOMが読み込まれた後に行う必要がある。

以下、JQueryのコードを中心に、コード配置について整理する。

不適切な配置

以下の例は、対象となるDOMが読み込まれる前にスクリプトが実行される。

このため、スクリプト実行段階ではDOMの実体が存在せず、意図したp要素の文字の色の設定は行われない。これはJavaScriptのコードでも同じ。

スクリプトをbodyの末尾に置く

以下の場合は、スクリプトがbodyの末尾に置かれていて、body内のDOMが全て読み込まれた後にスクリプトが実行される。

このため、スクリプト実行時にはDOMの実体が定まっていて、意図したp要素の色の変更が行われる。これもJavaScriptで書く場合と共通。

スクリプトをhead内に置く

DOM読み込み後に実行

$(document).ready(function() {});

&(document).ready()メソッドに渡した関数は、HTMLやDOMが読み込まれると実行される。

画像ファイルなどのリソースはまだ完全に読み込まれていない状態。

$(document).ready(() => {});

ready()に渡す関数をアロー関数で書くと、表現が簡略化される。

$(function {});

関数を直接JQueryの引数に渡す、redayメソッドよりも簡略化された書き方。

$(() => {});

JQueryに渡す関数をアロー関数にした、最も簡潔な書き方。

リソースの完全読み込み後に実行

$(window).onload(function() {});

DOMに続いて画像ファイルなどのリソースが完全に読み込まれた後に実行される。画像サイズの利用や変更を伴う場合にはこの方法で。

$(window).onload(() => {});

onloadの引数にアロー関数を渡すと、簡潔になる。

 

jQuery – イベント

ソース別イベント

個別イベントハンドラの一般形

要素に発生しうるイベントは下記一覧の通りで、イベントが発生した時、対応したハンドラが呼ばれる。

たとえばクリックイベントに対する処理の記述は以下の通り。

ただしこの形式のハンドラは、動的に追加された要素には対応していない。

マウスイベント

click クリック時
dblclick ダブルクリック時
mousedown マウスボタンを押した時
mouseup マウスボタンを離したとき
mouseover マウスカーソルが要素内に入った時(子要素を含む)
mouseout マウスカーソルが要素から出たとき(子要素を含む)
mouseenter マウスカーソルが要素に入った時(子要素は除く)
mouseleave マウスカーソルが要素から出た時(子要素は除く)
mousemove 要素内でマウスカーソルが移動した時
hover mouseenter / mouseleaveを一つにまとめたもの
toggle クリックの度に異なる処理を実行。v1.9以降廃止。

キーイベント

keydown キーを押した時
keypress キー入力があった時
keyup キーを離した時
focusin フォーカスされた時(子要素を含む)
focusout フォーカスが外れた時(子要素を含む)

フォームイベント

focus フォーカスされた時(子要素は除く)
blur フォーカスが外れた時(子要素は除く)
change 内容が変更された時
select 文字が選択された時
submit データ送信時

ブラウザイベント

resize リサイズした時
scroll スクロールした時
error エラーが発生した時

ロードイベント

load 読み込みが完了した時
unload ページから離れる時
ready DOMの読み込みが完了した時

イベントハンドラ・アタッチメント

イベントハンドラを要素にアタッチするメソッド。

たとえばon()メソッドの書き方の一つとして以下がある。

on()メソッドのハンドラとして、1つのイベントオブジェクトを引数に持つ関数を指定する。

探索範囲を限定してオブジェクトを探索する場合は以下の構文を用いる。

下表のbindoffまでのうち、現在はon/offメソッドのみ使えばよい。

また、on/offメソッドに指定できるイベントは、上記ソース別イベントの内、hoverとtoggle以外で指定する。

bind jQueryで最初に登場したアタッチメント。動的な要素に対応していないため、v1.3でliveが導入される。
unbind bindで設定された処理を解除。
live 動的な要素に対応したアタッチメント。処理負荷が高いため、v1.9で廃止された。
die liveで設定された処理を解除。v1.9で廃止。
delegate イベントの調査範囲を限定できるアタッチメント。v1.7で”on”に移行。
undelegate delegateで設定された処理を解除。
on イベントハンドラ・アタッチメントの最終形。
off onで設定されたイベント発生時の処理を解除。
one 1回だけ利用できるイベント発生時の処理を設定。構文はonと同じ。
triggerHandler 要素に指定したイベントを発生させるが、要素に対するブラウザ標準の機能は実行されない。
trigger 要素に指定したイベントを発生させ、ブラウザ標準の機能も実行させる。

イベントオブジェクト

概要

イベントオブジェクトはイベントハンドラに必ず渡されるobjectオブジェクト。イベント発生ごとに作成される。

基本形のコンストラクタでは、引数にイベント名を指定して作成する。たとえばclickイベントに対応するイベントオブジェクトは以下の様に作成される。

プロパティ

e.type イベントの種類
e.data イベントハンドラに渡された情報
e.pageX イベントが発生したX座標(ブラウザの座標系)
e.pageY イベントが発生したY座標(ブラウザの座標系)
e.timeStamp イベントが発生した時間(1970-01-01からのミリ秒)
e.which 正規化されたキーコード
e.result 直前に実行したイベントハンドラが返した値
e.namespace 名前空間に設定された名称
e.target イベントが発生したDOM要素
e.currentTarget 現在のDOM要素
e.delegateTarget デリゲート時の調査範囲のDOM要素
e.relatedTarget イベントの発生に関連したDOM要素

メソッド

e.stopPropagation()
バブリング(親要素方向へのイベントの伝播)を停止。
e.stopImmediatePropagation()
バブリングとイベントハンドラの実行を停止。
e.preventDefault()
ブラウザ標準の機能を停止。
e.isPropagationStopped()
stopPropagation()メソッドが実行されたかを調査。
e.isImmediatePropagationStopped()
stopImmediatePropagation()メソッドが実行されたかを調査。
e.isDefaultPrevented()
preventDefault()メソッドが実行されたかを調査。

 

jQuery – メソッド

値の取得

メソッドを通して、オブジェクトの持つプロパティなどを取得する。

※引数がない場合もある。

オブジェクトの操作

メソッドによりオブジェクトにプロパティを設定したり、動作させたりする。

※引数がない場合もある

イベント処理

構文1

オブジェクトに発生したイベントに対応して呼び出されるハンドラで、引数に処理を記述。

この構文では、後から動的に追加された要素には対応できない。

ハンドル用の関数を別に定義して引数に関数名を書いてもよいが、多くの場合無名関数が使われる。

構文2

動的に追加された要素にも対応するため、イベントが発生するたびに指定された範囲内でセレクタで指定されたオブジェクトを探索する。

この場合のon()メソッドは”イベントハンドラ・アタッチメント”の一つで、特定のイベントとそれに対するハンドラを結び付ける機能を持つ。

イベント名とセレクタは文字列で指定。

以下の例では、body要素の中の任意の要素がクリックされるとalertが立ち上がる。この場合は、H1、H2のいずれをクリックしてもalertが立ち上がる

また、on()メソッドの引数を以下のようにすると、H1をクリックしても反応せず、H2をクリックした時だけalertが立ち上がる。

イベントの種類、イベントハンドラ・アタッチメントについては、jQueryのイベントを参照。