jQuery チートシート

cheatsheet

🎯 セレクタ

HTML要素を選択するための様々な方法を提供します。

基本セレクタ

セレクタ 説明 使用例
#id 指定されたIDを持つ要素を選択します。
$('#myElement') // IDが "myElement" の要素を選択
.class 指定されたクラス名を持つすべての要素を選択します。
$('.highlight') // "highlight" クラスを持つ要素を選択
element 指定されたタグ名のすべての要素を選択します。
$('p') // すべての <p> 要素を選択
* すべての要素を選択します。
$('*') // ページ上のすべての要素を選択
selector1, selector2, ... 複数のセレクタに一致するすべての要素を選択します。
$('div, span, p.myClass') // <div>, <span>, "myClass" クラスを持つ <p> 要素を選択

階層セレクタ

セレクタ 説明 使用例
ancestor descendant 指定された祖先要素を持つ、すべての子孫要素を選択します。
$('ul li') // <ul> 要素内にあるすべての <li> 要素を選択
parent > child 指定された親要素の直接の子要素を選択します。
$('ul > li') // <ul> 要素の直接の子である <li> 要素を選択
prev + next 指定された `prev` 要素の直後にある `next` 要素を選択します。
$('h2 + p') // <h2> 要素の直後にある <p> 要素を選択
prev ~ siblings 指定された `prev` 要素の後にある、同じ親を持つすべての `siblings` 要素を選択します。
$('#start ~ div') // ID "start" の要素の後にあるすべての兄弟 <div> 要素を選択

属性セレクタ

セレクタ 説明 使用例
[attribute] 指定された属性を持つ要素を選択します。
$('[href]') // href属性を持つ要素を選択
[attribute=value] 指定された属性が特定の値を持つ要素を選択します。
$('[type="text"]') // type属性が "text" の要素を選択
[attribute!=value] 指定された属性を持たない、または特定の値を持たない要素を選択します。
$('input[type!="button"]') // type属性が "button" でない <input> 要素を選択
[attribute^=value] 指定された属性が特定の値で始まる要素を選択します。
$('[href^="https://"]') // href属性が "https://" で始まる要素を選択
[attribute$=value] 指定された属性が特定の値で終わる要素を選択します。
$('[src$=".png"]') // src属性が ".png" で終わる要素を選択
[attribute*=value] 指定された属性が特定の値を含む要素を選択します。
$('[class*="test"]') // class属性に "test" を含む要素を選択
[attr~=value] 指定した属性の値が、スペースで区切られたリストの中に特定の値を含む要素を選択します。
$('[data-options~="urgent"]') // data-options属性に "urgent" を含む要素を選択
[attr|=value] 指定した属性の値が特定の値と等しいか、特定の値で始まりハイフン(-)が続く要素を選択します。言語コードの指定などで利用されます。
$('[lang|="en"]') // lang属性が "en" または "en-..." の要素を選択

フィルタリングセレクタ

セレクタ 説明 使用例
:first 最初に一致した要素を選択します。
$('li:first') // 最初の <li> 要素を選択
:last 最後に一致した要素を選択します。
$('li:last') // 最後の <li> 要素を選択
:eq(index) 指定されたインデックス(0から始まる)に一致する要素を選択します。
$('li:eq(2)') // 3番目の <li> 要素を選択
:even 偶数番目の要素(0, 2, 4, …)を選択します。
$('tr:even') // 偶数番目のテーブル行を選択
:odd 奇数番目の要素(1, 3, 5, …)を選択します。
$('tr:odd') // 奇数番目のテーブル行を選択
:gt(index) 指定されたインデックスより大きいインデックスを持つ要素を選択します。
$('li:gt(1)') // 2番目より後の <li> 要素を選択 (インデックス 2, 3, ...)
:lt(index) 指定されたインデックスより小さいインデックスを持つ要素を選択します。
$('li:lt(2)') // 2番目より前の <li> 要素を選択 (インデックス 0, 1)
:not(selector) 指定されたセレクタに一致しない要素を選択します。
$('input:not(:checked)') // チェックされていない <input> 要素を選択
:has(selector) 指定されたセレクタに一致する要素を少なくとも1つ含む要素を選択します。
$('div:has(p)') // <p> 要素を含む <div> 要素を選択
:contains(text) 指定されたテキストを含む要素を選択します(大文字・小文字を区別します)。
$('p:contains("重要")') // "重要" というテキストを含む <p> 要素を選択
:empty 子要素(テキストノードを含む)を持たない要素を選択します。
$('td:empty') // 空のテーブルセルを選択
:parent 子要素(テキストノードを含む)を持つ要素を選択します。(:emptyの逆)
$('td:parent') // 空ではないテーブルセルを選択
:header ヘッダー要素(h1, h2, h3 など)を選択します。
$(':header') // すべてのヘッダー要素を選択
:animated 現在アニメーション中の要素を選択します。
$('div:animated') // アニメーション中のすべてのdiv要素を選択
:focus 現在フォーカスを持っている要素を選択します。
$(':focus') // フォーカスされている要素を選択
:root ドキュメントのルート要素を選択します (HTMLでは `<html>` 要素)。
$(':root') // ルート要素を選択
:target URLのフラグメント識別子 (例: `#section2`) によって示されるターゲット要素を選択します。
$('#mySection:target') // URLが `...#mySection` の場合にID "mySection" の要素を選択
:lang(language) 指定された言語コードを持つ要素を選択します。
$('p:lang(ja)') // lang属性が "ja" (または "ja-JP" など) の <p> 要素を選択

フォームセレクタ 📝

セレクタ 説明 使用例
:input すべての <input>, <textarea>, <select>, <button> 要素を選択します。
$(':input') // フォーム内のすべての入力要素を選択
:text すべての type="text"<input> 要素を選択します。
$(':text') // すべてのテキスト入力フィールドを選択
:password すべての type="password"<input> 要素を選択します。
$(':password') // すべてのパスワード入力フィールドを選択
:radio すべての type="radio"<input> 要素を選択します。
$(':radio') // すべてのラジオボタンを選択
:checkbox すべての type="checkbox"<input> 要素を選択します。
$(':checkbox') // すべてのチェックボックスを選択
:submit すべての type="submit"<input> または <button> 要素を選択します。
$(':submit') // すべての送信ボタンを選択
:image すべての type="image"<input> 要素を選択します。
$(':image') // すべての画像入力要素を選択
:reset すべての type="reset"<input> または <button> 要素を選択します。
$(':reset') // すべてのリセットボタンを選択
:button すべての type="button"<input> または <button> 要素を選択します。
$(':button') // すべての汎用ボタンを選択
:file すべての type="file"<input> 要素を選択します。
$(':file') // すべてのファイル選択フィールドを選択
:hidden すべての非表示要素 (type="hidden" または CSSで非表示) を選択します。
$('form :hidden') // フォーム内のすべての非表示要素を選択
:visible すべての表示されている要素を選択します。
$('div:visible') // 表示されているすべての <div> 要素を選択
:enabled 有効な (disabledではない) フォーム要素を選択します。
$('input:enabled') // 有効なすべての <input> 要素を選択
:disabled 無効な (disabled) フォーム要素を選択します。
$('input:disabled') // 無効なすべての <input> 要素を選択
:checked チェックされている/選択されている (チェックボックス、ラジオボタン、option) 要素を選択します。
$('input:checked') // チェックされているすべての <input> 要素を選択
:selected 選択されている <option> 要素を選択します。
$('select option:selected') // 選択されているすべての <option> 要素を選択

🛠️ DOM操作

ドキュメントの構造や内容を変更します。

コンテンツの取得・設定

メソッド 説明 使用例
html() 要素のHTMLコンテンツを取得または設定します。
// 取得
var content = $('#myDiv').html();
// 設定
$('#myDiv').html('<p>新しいコンテンツ</p>');
text() 要素のテキストコンテンツを取得または設定します(HTMLタグは除去されます)。
// 取得
var text = $('#myDiv').text();
// 設定
$('#myDiv').text('新しいテキスト');
val() フォーム要素の値を取得または設定します。
// 取得 (テキスト入力)
var name = $('#nameInput').val();
// 設定 (テキスト入力)
$('#nameInput').val('山田太郎');
// 取得 (セレクトボックス - 単一選択)
var selectedOption = $('#mySelect').val();
// 取得 (セレクトボックス - 複数選択)
var selectedOptions = $('#myMultiSelect').val(); // 配列が返る
// 設定 (ラジオボタン)
$('input[name="gender"][value="male"]').val(['male']); // もしくは .prop('checked', true)
// 設定 (チェックボックス)
$('#hobbies').val(['music', 'sports']); // 配列で複数指定

要素の追加・挿入

メソッド 説明 使用例
append(content) 各要素の内部の末尾にコンテンツを追加します。
$('#myList').append('<li>新しい項目</li>');
appendTo(target) 選択した要素をターゲット要素の内部の末尾に追加します。(appendと引数の順番が逆)
$('<li>新しい項目</li>').appendTo('#myList');
prepend(content) 各要素の内部の先頭にコンテンツを追加します。
$('#myList').prepend('<li>最初の項目</li>');
prependTo(target) 選択した要素をターゲット要素の内部の先頭に追加します。(prependと引数の順番が逆)
$('<li>最初の項目</li>').prependTo('#myList');
after(content) 各要素の直後にコンテンツを追加します。
$('#myElement').after('<p>この要素の後に追加</p>');
insertAfter(target) 選択した要素をターゲット要素の直後に追加します。(afterと引数の順番が逆)
$('<p>追加要素</p>').insertAfter('#myElement');
before(content) 各要素の直前にコンテンツを追加します。
$('#myElement').before('<p>この要素の前に追加</p>');
insertBefore(target) 選択した要素をターゲット要素の直前に追加します。(beforeと引数の順番が逆)
$('<p>追加要素</p>').insertBefore('#myElement');
wrap(html) 各要素を指定したHTML構造で囲みます。
$('p').wrap('<div class="wrapper"></div>'); // 各p要素をdivで囲む
wrapAll(html) 選択したすべての要素をまとめて、指定したHTML構造で囲みます。
$('p').wrapAll('<div class="container"></div>'); // すべてのp要素を一つのdivで囲む
wrapInner(html) 各要素の内部コンテンツを指定したHTML構造で囲みます。
$('p').wrapInner('<strong></strong>'); // 各p要素のテキストをstrongで囲む

要素の削除・置換

メソッド 説明 使用例
remove([selector]) 選択した要素をDOMから削除します。引数でさらにフィルタリング可能。データやイベントハンドラも削除されます。
$('#myElement').remove(); // 要素を完全に削除
$('li').remove('.old'); // "old"クラスを持つli要素のみ削除
detach([selector]) 選択した要素をDOMから削除しますが、データやイベントハンドラは保持します。後で再挿入する場合に便利です。
var detachedElement = $('#myElement').detach();
// ... 何らかの処理 ...
$('body').append(detachedElement); // 後で再挿入
empty() 選択した要素の子要素(テキストノード含む)をすべて削除します。要素自体は残ります。
$('#myContainer').empty(); // コンテナの中身を空にする
unwrap() 選択した要素の親要素を削除し、要素自体は残します。
$('p.wrapped').unwrap(); // "wrapped"クラスを持つp要素の親要素を削除
replaceWith(content) 選択した各要素を指定したコンテンツで置き換えます。
$('h2').replaceWith('<h3>新しい見出し</h3>');
replaceAll(target) ターゲット要素を選択した要素で置き換えます。(replaceWithと引数の順番が逆)
$('<p>置き換え後のコンテンツ</p>').replaceAll('.old-content');

要素のコピー

メソッド 説明 使用例
clone([withDataAndEvents], [deepWithDataAndEvents]) 要素のディープコピー(子孫要素も含む)を作成します。引数でデータやイベントハンドラもコピーするか指定できます。
true: データとイベントハンドラもコピー
false (デフォルト): 要素のみコピー
– 第2引数に true を指定すると、子孫要素のデータとイベントハンドラもコピーします。
// 要素のみコピー
var cloned = $('#original').clone();
// データとイベントハンドラもコピー
var clonedWithEvents = $('#original').clone(true);
// 子孫要素のデータとイベントハンドラもコピー
var deepCloned = $('#original').clone(true, true);

$('#container').append(cloned);

🏷️ 属性操作

要素の属性やプロパティ、クラスを操作します。

属性 (Attribute) の操作

メソッド 説明 使用例
attr(attributeName) 指定された属性の値を取得します。
var linkUrl = $('a').attr('href');
attr(attributeName, value) 指定された属性に値を設定します。
$('img').attr('src', 'new_image.jpg');
$('a').attr('target', '_blank');
attr(attributes) 複数の属性をオブジェクト形式で一度に設定します。
$('img').attr({
  src: 'another_image.png',
  alt: '代替テキスト',
  title: '画像タイトル'
});
attr(attributeName, function(index, currentValue)) 関数を使って属性値を設定します。各要素に対して個別に値を計算できます。
$('a').attr('href', function(i, currentHref) {
  return currentHref + '?param=' + (i + 1);
});
removeAttr(attributeName) 指定された属性を要素から削除します。
$('img').removeAttr('alt');

プロパティ (Property) の操作

checked, selected, disabled など、要素の状態を表す真偽値のプロパティや、DOM要素が本来持つプロパティ (value, tagName, selectedIndex など) の操作には prop() を使うのが推奨されます。

メソッド 説明 使用例
prop(propertyName) 指定されたプロパティの値を取得します。
var isChecked = $('#myCheckbox').prop('checked'); // true または false
var tagName = $('#myDiv')[0].tagName; // jQueryオブジェクトではなくDOM要素のプロパティとして取得も可
var tagNameProp = $('#myDiv').prop('tagName'); // 'DIV' (大文字)
prop(propertyName, value) 指定されたプロパティに値を設定します。
$('#myCheckbox').prop('checked', true);
$('#myInput').prop('disabled', true);
$('#mySelect').prop('selectedIndex', 2); // 3番目のオプションを選択
prop(properties) 複数のプロパティをオブジェクト形式で一度に設定します。
$('input[type="checkbox"]').prop({
  checked: true,
  disabled: false
});
prop(propertyName, function(index, currentValue)) 関数を使ってプロパティ値を設定します。
$('input[type="checkbox"]').prop('checked', function(i, currentValue) {
  return i % 2 === 0; // 偶数番目のチェックボックスをチェックする
});
removeProp(propertyName) 指定されたプロパティを要素から削除します。注意: checkeddisabled のようなネイティブプロパティは削除すべきではありません。削除すると再設定できなくなる可能性があります。カスタムデータプロパティなどに使用します。通常は prop(propertyName, false) を使用します。
// 通常は使用を避ける
// $('#myCheckbox').removeProp('checked'); // 推奨されない

// 代わりに false を設定する
$('#myCheckbox').prop('checked', false);

クラスの操作

メソッド 説明 使用例
addClass(className) 要素に1つまたは複数のクラスを追加します。(スペース区切りで複数指定可)
$('#myElement').addClass('highlight');
$('p').addClass('text-bold important');
addClass(function(index, currentClass)) 関数を使って追加するクラス名を決定します。
$('li').addClass(function(index) {
  return 'item-' + index;
});
removeClass([className]) 要素から1つまたは複数のクラスを削除します。引数を省略するとすべてのクラスを削除します。(スペース区切りで複数指定可)
$('#myElement').removeClass('highlight');
$('p').removeClass('text-bold important');
$('div').removeClass(); // すべてのクラスを削除
removeClass(function(index, currentClass)) 関数を使って削除するクラス名を決定します。
$('li.old').removeClass(function(index, currentClass) {
  if (currentClass.includes('special')) {
    return 'special'; // 'special' クラスのみ削除
  }
});
toggleClass(className, [switch]) クラスが存在すれば削除し、存在しなければ追加します。第2引数に真偽値を指定すると、trueなら追加、falseなら削除の強制ができます。
$('#myElement').toggleClass('active'); // 'active' クラスを切り替え
$('button').toggleClass('is-primary', userIsAdmin); // userIsAdminがtrueなら 'is-primary' を追加、falseなら削除
toggleClass(function(index, currentClass, switch), [switch]) 関数を使って切り替えるクラス名を決定します。
$('div').toggleClass(function(index, css) {
  return index % 2 == 0 ? 'even' : 'odd';
});
hasClass(className) 選択した要素のいずれか1つでも指定したクラスを持っていれば true を返します。
if ($('#myElement').hasClass('active')) {
  console.log('要素はアクティブです');
}

🎨 CSS操作

要素のスタイルや寸法、位置を操作します。

CSSプロパティの操作

メソッド 説明 使用例
css(propertyName) 指定されたCSSプロパティの値を取得します。
var color = $('#myElement').css('color');
var fontSize = $('p').css('font-size');
css(propertyName, value) 指定されたCSSプロパティに値を設定します。プロパティ名はキャメルケース (fontSize) またはハイフン区切り ('font-size') で指定できます。
$('#myElement').css('color', 'red');
$('p').css('font-size', '16px');
$('div').css('background-color', '#f0f0f0');
css(propertyName, function(index, currentValue)) 関数を使ってCSSプロパティ値を設定します。
$('li').css('padding-left', function(index) {
  return (index * 10) + 'px';
});
css(properties) 複数のCSSプロパティをオブジェクト形式で一度に設定します。
$('#myElement').css({
  color: 'blue',
  fontWeight: 'bold', // キャメルケース
  'margin-top': '20px' // ハイフン区切りも可
});

表示・非表示

メソッド 説明 使用例
show([duration], [easing], [callback]) 要素を表示します。引数でアニメーション速度、イージング、完了時のコールバックを指定できます。
$('#hiddenElement').show(); // 即時表示
$('#fadingElement').show('slow'); // ゆっくり表示
$('#slidingElement').show(1000, function() { // 1秒かけて表示し、完了後に関数を実行
  console.log('表示完了');
});
hide([duration], [easing], [callback]) 要素を非表示にします。引数は show() と同様です。
$('#visibleElement').hide(); // 即時非表示
$('#fadingElement').hide('fast'); // 速く非表示
$('#slidingElement').hide(500, 'linear', function() { // 0.5秒かけて線形に非表示
  console.log('非表示完了');
});
toggle([duration], [easing], [callback]) 要素の表示・非表示を切り替えます。引数は show(), hide() と同様です。
$('#toggleElement').toggle(); // 表示/非表示を切り替え
$('#toggleElement').toggle('slow'); // ゆっくり切り替え
toggle(showOrHide) 引数に真偽値を指定して、表示 (true) または非表示 (false) を強制します。
var shouldShow = true;
$('#myElement').toggle(shouldShow); // shouldShowがtrueなら表示、falseなら非表示

要素の寸法 📏

これらのメソッドは、要素の幅や高さを取得または設定します。Boxモデル(padding, border, margin)を含むか含まないかでメソッドが異なります。

メソッド 説明 使用例
width() 要素のコンテンツ領域の幅を取得または設定します (padding, border, margin を含まない)。
// 取得
var w = $('#myDiv').width();
// 設定
$('#myDiv').width(200); // 200pxに設定
$('#myDiv').width('50%'); // 50%に設定
height() 要素のコンテンツ領域の高さを取得または設定します (padding, border, margin を含まない)。
// 取得
var h = $('#myDiv').height();
// 設定
$('#myDiv').height(150); // 150pxに設定
innerWidth() 要素の内部幅を取得します (padding を含む、border, margin を含まない)。設定はできません。
var innerW = $('#myDiv').innerWidth();
innerHeight() 要素の内部高さを取得します (padding を含む、border, margin を含まない)。設定はできません。
var innerH = $('#myDiv').innerHeight();
outerWidth([includeMargin]) 要素の外部幅を取得します (padding, border を含む)。引数に true を渡すと margin も含みます。設定はできません。
var outerW = $('#myDiv').outerWidth(); // padding + border を含む幅
var outerW_margin = $('#myDiv').outerWidth(true); // padding + border + margin を含む幅
outerHeight([includeMargin]) 要素の外部高さを取得します (padding, border を含む)。引数に true を渡すと margin も含みます。設定はできません。
var outerH = $('#myDiv').outerHeight(); // padding + border を含む高さ
var outerH_margin = $('#myDiv').outerHeight(true); // padding + border + margin を含む高さ

要素の位置 📍

メソッド 説明 使用例
offset() ドキュメントの左上隅を基準とした、要素の現在の座標 (top, left) を取得します。または、要素の座標を設定します(あまり使われません)。
// 取得
var pos = $('#myElement').offset();
console.log('Top: ' + pos.top + ', Left: ' + pos.left);

// 設定 (通常は CSS で position: absolute/relative を指定してから行う)
// $('#myElement').offset({ top: 100, left: 50 });
position() オフセットペアレント(positionが static 以外の最も近い祖先要素)を基準とした、要素の現在の座標 (top, left) を取得します。読み取り専用です。
var pos = $('#myElement').position();
console.log('Relative Top: ' + pos.top + ', Relative Left: ' + pos.left);
scrollTop() 要素(またはウィンドウ)の垂直スクロールバーの現在の位置を取得または設定します。
// 取得
var scrollPos = $(window).scrollTop(); // ウィンドウのスクロール位置
var divScrollPos = $('#scrollableDiv').scrollTop(); // div要素のスクロール位置

// 設定
$(window).scrollTop(0); // ページのトップにスクロール
$('#scrollableDiv').scrollTop(100); // divを100pxスクロール
scrollLeft() 要素(またはウィンドウ)の水平スクロールバーの現在の位置を取得または設定します。
// 取得
var scrollPos = $(window).scrollLeft();
var divScrollPos = $('#scrollableDiv').scrollLeft();

// 設定
$('#scrollableDiv').scrollLeft(50);

🖱️ イベント処理

ユーザー操作やブラウザの状態変化に対応します。

イベントハンドラの登録・解除

メソッド 説明 使用例
on(events, [selector], [data], handler) 1つまたは複数のイベントに対するハンドラを登録します。
events: イベント名 (例: ‘click’, ‘mouseover’, ‘click keydown’)
selector (オプション): イベントデリゲーション。指定すると、選択した要素の**子孫**のうち、このセレクタに一致する要素でイベントが発生した場合にのみハンドラが実行されます。
data (オプション): イベントハンドラに渡すデータ。
handler: イベント発生時に実行される関数。event オブジェクトを引数に取ります。
// 通常のイベント登録
$('#myButton').on('click', function(event) {
  console.log('ボタンがクリックされました!');
  console.log('イベントデータ:', event.data); // undefined (データ未指定)
});

// 複数イベントを登録
$('#myInput').on('focus blur', function(event) {
  console.log('入力フィールドのイベント:', event.type); // 'focus' or 'blur'
});

// イベントデリゲーション (ul要素に登録し、li要素のクリックを処理)
$('#myList').on('click', 'li', function() {
  $(this).toggleClass('selected');
});

// データ付きイベント登録
$('#myButton').on('click', { user: 'Admin' }, function(event) {
  console.log(event.data.user + 'がクリックしました'); // 'Adminがクリックしました'
});
off(events, [selector], [handler]) 1つまたは複数のイベントハンドラを削除します。
– 引数なし: すべてのイベントハンドラを削除。
events: 特定のイベントタイプのハンドラを削除。
selector: 特定のデリゲーションされたハンドラを削除。
handler: 特定の関数ハンドラを削除(名前付き関数である必要あり)。
// クリックイベントハンドラを削除
$('#myButton').off('click');

// デリゲーションされたクリックイベントハンドラを削除
$('#myList').off('click', 'li');

// 特定の関数ハンドラを削除
function myClickHandler() { console.log('クリック!'); }
$('#myButton').on('click', myClickHandler);
$('#myButton').off('click', myClickHandler); // 特定の関数のみ削除

// すべてのイベントハンドラを削除
$('#myElement').off();
one(events, [selector], [data], handler) イベントハンドラを登録しますが、各要素に対して一度だけ実行されると自動的に解除されます。引数は on() と同じです。
$('#initButton').one('click', function() {
  console.log('この処理は一度だけ実行されます。');
  // このハンドラはクリック後に自動で解除される
});

イベントの発火

メソッド 説明 使用例
trigger(eventType, [extraParameters]) 指定されたイベントタイプのすべてのハンドラを実行し、ブラウザのデフォルト動作も実行します(例: フォームのsubmit)。追加パラメータをハンドラに渡すことができます。
// クリックイベントを発火
$('#myButton').trigger('click');

// カスタムイベントを発火し、データを渡す
$('#myElement').on('customEvent', function(event, param1, param2) {
  console.log('カスタムイベント受信:', param1, param2);
});
$('#myElement').trigger('customEvent', ['データ1', { key: '値' }]);
triggerHandler(eventType, [extraParameters]) 指定されたイベントタイプのハンドラを実行しますが、ブラウザのデフォルト動作(イベントのバブリングも含む)は実行しません。最初の要素のハンドラのみ実行され、その戻り値を返します。
// クリックハンドラのみ実行 (デフォルトの動作なし)
var result = $('#myForm').triggerHandler('submit'); // フォームは送信されない
// result にはハンドラの戻り値が入る (なければ undefined)

$('#myInput').triggerHandler('focus'); // フォーカスは当たらないが、focusハンドラは実行される

イベントヘルパーメソッド

.on('click', handler) のような記述のショートカットです。

メソッド 対応イベント 使用例
click(handler)click
$('#btn').click(function() { /* ... */ });
dblclick(handler)dblclick
$('#item').dblclick(function() { /* ... */ });
hover(handlerIn, handlerOut)mouseenter, mouseleave
$('#menu').hover(function() { $(this).addClass('hover'); }, function() { $(this).removeClass('hover'); });
mousedown(handler)mousedown
$(document).mousedown(function(e) { console.log(e.button); });
mouseup(handler)mouseup
$('#draggable').mouseup(function() { /* ... */ });
mousemove(handler)mousemove
$(window).mousemove(function(e) { $('#coords').text(e.pageX + ', ' + e.pageY); });
mouseenter(handler)mouseenter
$('.tooltipTarget').mouseenter(function() { /* ツールチップ表示 */ });
mouseleave(handler)mouseleave
$('.tooltipTarget').mouseleave(function() { /* ツールチップ非表示 */ });
mouseover(handler)mouseover (バブリングあり)
$('#parent').mouseover(function() { console.log('Mouse over parent'); });
mouseout(handler)mouseout (バブリングあり)
$('#parent').mouseout(function() { console.log('Mouse out parent'); });
keydown(handler)keydown
$('#inputField').keydown(function(e) { if(e.key === 'Enter') { /* ... */ } });
keyup(handler)keyup
$('#inputField').keyup(function() { /* 入力内容検証 */ });
keypress(handler)keypress (文字入力時、非推奨になりつつある)
// keydown/keyupの使用を推奨
$('#inputField').keypress(function(e) { console.log(String.fromCharCode(e.which)); });
focus(handler)focus
$('input').focus(function() { $(this).addClass('focused'); });
blur(handler)blur
$('input').blur(function() { $(this).removeClass('focused'); /* バリデーションなど */ });
focusin(handler)focusin (バブリングあり)
$('#formContainer').focusin(function() { console.log('Form element focused'); });
focusout(handler)focusout (バブリングあり)
$('#formContainer').focusout(function() { console.log('Form element lost focus'); });
change(handler)change (input, select, textarea の値変更後)
$('#mySelect').change(function() { console.log('選択肢変更:', $(this).val()); });
select(handler)select (テキスト選択時)
$('textarea').select(function() { console.log('テキストが選択されました'); });
submit(handler)submit (フォーム送信時)
$('#myForm').submit(function(e) { e.preventDefault(); /* Ajax送信など */ });
scroll(handler)scroll (スクロール時)
$(window).scroll(function() { /* スクロール位置に応じた処理 */ });
resize(handler)resize (ウィンドウリサイズ時)
$(window).resize(function() { /* レイアウト調整 */ });
load(handler)load (要素や画像などの読み込み完了時) 注意: $(window).load() は jQuery 3.0 で廃止。代わりに $(window).on(‘load’, …) を使用。画像などは個別に load イベントを設定。
// ウィンドウ読み込み完了 (jQuery 3.0+)
$(window).on('load', function() { console.log('Window loaded'); });
// 画像読み込み完了
$('img.lazy').on('load', function() { $(this).fadeIn(); }).each(function() { if(this.complete) $(this).trigger('load'); });
unload(handler)unload (ページ離脱時) 注意: 信頼性が低く、非推奨。代わりに `beforeunload` を使用。
// 非推奨
// $(window).unload(function() { alert('Bye!'); });
beforeunload(handler)beforeunload (ページ離脱直前)
$(window).on('beforeunload', function() {
  return 'ページを離れてもよろしいですか?'; // ブラウザ標準の確認ダイアログが表示される
});
error(handler)error (画像の読み込み失敗など) 注意: jQuery 3.0 で廃止。代わりに .on(‘error’, …) を使用。
$('img').on('error', function() {
  $(this).attr('src', 'fallback.png'); // 代替画像表示
});

イベントオブジェクト

イベントハンドラ関数の最初の引数として渡されるオブジェクトで、イベントに関する情報を含みます。

プロパティ/メソッド 説明 使用例
event.type 発生したイベントの種類 (例: ‘click’, ‘mouseover’)。
console.log('Event type: ' + event.type);
event.target イベントが最初に発生したDOM要素。
console.log('Target element: ', event.target);
event.currentTarget イベントハンドラが現在処理している要素 (イベントバブリング中など、target と異なる場合がある)。this と同じ。
$('#list').on('click', 'li', function(event) {
  console.log('Target (li): ', event.target);
  console.log('Current Target (ul): ', event.currentTarget);
});
event.delegateTarget イベントデリゲーション (.on() の第二引数) でイベントハンドラがアタッチされている要素。
$('#list').on('click', 'li', function(event) {
  console.log('Delegate Target (ul): ', event.delegateTarget);
});
event.relatedTarget mouseover/mouseout イベントで、マウスカーソルが入ってきた/出ていった要素。focusin/focusout ではフォーカスを失った/得た要素。
$('#item').on('mouseout', function(event) {
  console.log('Mouse moved to: ', event.relatedTarget);
});
event.pageX, event.pageY マウスポインタのドキュメント左上からの座標。
$(document).on('mousemove', function(event) {
  console.log('Mouse position: ' + event.pageX + ', ' + event.pageY);
});
event.clientX, event.clientY マウスポインタの**表示領域 (ビューポート)** 左上からの座標。スクロール位置の影響を受けません。
$(document).on('click', function(event) {
  console.log('Clicked at viewport coords: ' + event.clientX + ', ' + event.clientY);
});
event.which 押されたキーコードまたはマウスボタンを示す数値 (左:1, 中:2, 右:3)。キーボードイベントでは event.keyevent.code の使用が推奨されます。
$('#input').on('keydown', function(event) {
  console.log('Key code (which): ' + event.which);
});
$(document).on('mousedown', function(event) {
  console.log('Mouse button (which): ' + event.which);
});
event.key 押されたキーの文字または識別子 (例: ‘a’, ‘Enter’, ‘ArrowUp’)。推奨される方法。
$('#input').on('keydown', function(event) {
  console.log('Key pressed: ' + event.key);
});
event.code 物理的なキーを示すコード (例: ‘KeyA’, ‘Enter’, ‘ArrowUp’)。キーボードレイアウトに依存しません。
$('#input').on('keydown', function(event) {
  console.log('Physical key code: ' + event.code);
});
event.data .on().trigger() で渡されたデータ。
$('#btn').on('click', { id: 123 }, function(event) {
  console.log('Data: ', event.data); // { id: 123 }
});
event.preventDefault() イベントに関連するブラウザのデフォルトアクションをキャンセルします (例: リンクの遷移、フォームの送信)。
$('a.ajaxLink').on('click', function(event) {
  event.preventDefault(); // ページ遷移を止める
  // Ajax処理など
});
event.stopPropagation() イベントが親要素へ伝播 (バブリング) するのを停止します。
$('#child').on('click', function(event) {
  event.stopPropagation(); // 親要素のクリックイベントは発火しない
  console.log('Child clicked');
});
$('#parent').on('click', function() {
  console.log('Parent clicked'); // 上でstopPropagationされているとここは実行されない
});
event.stopImmediatePropagation() イベントのバブリングを停止し、**同じ要素に登録されている他のハンドラ**の実行も停止します。
$('#btn').on('click', function(event) {
  console.log('Handler 1');
  event.stopImmediatePropagation();
});
$('#btn').on('click', function(event) {
  // 上でstopImmediatePropagationが呼ばれたため、これは実行されない
  console.log('Handler 2');
});
event.namespace イベントが発火したときに指定された名前空間 (例: ‘click.myPlugin’)。
$('#btn').on('click.myNamespace', function(event) {
  console.log('Namespace: ' + event.namespace); // 'myNamespace'
});
$('#btn').trigger('click.myNamespace');
event.timeStamp イベントが作成された時刻 (エポックからのミリ秒)。
$(document).on('click', function(event) {
  console.log('Event timestamp: ' + event.timeStamp);
});
event.result triggerHandler() で実行された最後のイベントハンドラの戻り値。
$('#btn').on('myEvent', function() { return 'Success'; });
var result = $('#btn').triggerHandler('myEvent');
console.log(result); // 'Success'

✨ アニメーション・エフェクト

要素に視覚的な効果を適用します。

基本的なエフェクト

これらのメソッドは、show(), hide(), toggle() と同様に、[duration], [easing], [callback] を引数に取ることができます。

メソッド 説明 使用例
fadeIn() 要素をフェードイン(徐々に表示)させます。
$('#myElement').fadeIn('slow');
fadeOut() 要素をフェードアウト(徐々に非表示)させます。
$('#myElement').fadeOut(1000); // 1秒かけてフェードアウト
fadeToggle() 要素のフェードイン・フェードアウトを切り替えます。
$('#myElement').fadeToggle('fast');
fadeTo(duration, opacity, [easing], [callback]) 要素を指定された不透明度までフェードさせます。要素は非表示にはなりません(opacityが0でも)。
$('#myElement').fadeTo('slow', 0.5); // ゆっくり半透明に
$('#myElement').fadeTo(500, 1.0); // 0.5秒かけて完全に不透明に
slideDown() 要素を上から下へスライドさせながら表示します。
$('#details').slideDown();
slideUp() 要素を下から上へスライドさせながら非表示にします。
$('#details').slideUp('slow');
slideToggle() 要素のスライドダウン・スライドアップを切り替えます。
$('#toggleButton').click(function() {
  $('#details').slideToggle(500); // 0.5秒かけて切り替え
});

カスタムアニメーション

メソッド 説明 使用例
animate(properties, [duration], [easing], [callback]) 数値で表されるCSSプロパティをアニメーションさせます。
properties: アニメーションさせるCSSプロパティと目標値のオブジェクト。
duration (オプション): アニメーション時間 (ミリ秒、’fast’, ‘slow’)。デフォルトは400ms。
easing (オプション): イージング関数 (‘linear’, ‘swing’ または jQuery UI プラグインで追加)。デフォルトは ‘swing’。
callback (オプション): アニメーション完了時に実行される関数。
// 幅と不透明度をアニメーション
$('#box').animate({
  width: '200px',
  opacity: 0.5
}, 1000, 'linear', function() {
  console.log('アニメーション完了');
});

// 相対的な値でアニメーション (現在の値から増減)
$('#box').animate({
  left: '+=50px', // 左に50px移動
  height: '-=10px' // 高さを10px減らす
}, 'fast');

// 'show', 'hide', 'toggle' を値として使用 (プロパティ固有のアニメーション)
$('#box').animate({
  height: 'toggle' // 高さをアニメーションで表示/非表示切り替え
}, 500);
animate(properties, options) オプションをオブジェクトでまとめて指定する形式。
options: duration, easing, callback, queue, step, progress, complete, start, done, fail, always などを含むオブジェクト。
$('#box').animate({
  left: '300px',
  top: '100px'
}, {
  duration: 1500,
  easing: 'swing',
  queue: false, // キューに入れないで即時実行
  step: function(now, fx) { // アニメーションの各ステップで実行
    // fx.prop でプロパティ名 ('left' or 'top')
    // now で現在の値
    console.log(fx.prop + ': ' + now);
  },
  complete: function() { // アニメーション完了時 (callback と同じ)
    console.log('アニメーション完了 (complete)');
  },
  done: function() { // アニメーション成功時 (complete と似ているが Deferred ベース)
    console.log('アニメーション成功 (done)');
  }
});

アニメーションの制御

メソッド 説明 使用例
stop([clearQueue], [jumpToEnd]) 要素で現在実行中のアニメーションを停止します。
clearQueue (boolean, デフォルト: false): true の場合、キューにある未実行のアニメーションも削除します。
jumpToEnd (boolean, デフォルト: false): true の場合、現在のアニメーションを即座に完了状態にします。
// 現在のアニメーションだけ停止 (キューは残る)
$('#box').stop();

// 現在のアニメーションを停止し、キューもクリア
$('#box').stop(true);

// 現在のアニメーションを即座に完了させ、キューもクリア
$('#box').stop(true, true);
finish([queueName]) 要素のキューにあるすべてのアニメーションを即座に完了状態にします。CSSの最終状態が適用されます。
// デフォルトキュー ('fx') のアニメーションをすべて完了
$('#box').finish();

// カスタムキューのアニメーションを完了
// $('#box').finish('myQueue');
delay(duration, [queueName]) アニメーションキュー内の後続のアイテム実行を指定した時間(ミリ秒)だけ遅延させます。主にアニメーションメソッド間で使います。
$('#box')
  .slideUp(300)
  .delay(800) // 800ms 待機
  .fadeIn(400);
queue([queueName]) 要素のアニメーションキュー(関数の配列)を取得または操作します。
– 引数なし: キューの配列を取得。
callback: キューに関数を追加。
// キューの内容を確認 (デバッグ用)
console.log($('#box').queue());

// キューに関数を追加
$('#box').queue(function(next) {
  console.log('キュー内のカスタム関数実行');
  $(this).css('background-color', 'yellow');
  next(); // 次のキュー項目を実行するために必要
});

$('#box').animate({ left: '+=100px' }); // このアニメーションは上の関数の後に実行される
dequeue([queueName]) アニメーションキューの先頭の関数を実行し、キューから削除します。通常は queue() のコールバック内 (next()) で自動的に呼ばれますが、手動で呼び出すこともできます。
$('#box').queue('myQueue', function(next) {
  console.log('カスタムキュー関数 1');
  setTimeout(next, 1000); // 1秒後に次のキューを実行
});
$('#box').queue('myQueue', function(next) {
  console.log('カスタムキュー関数 2');
  next();
});

// キューを開始
$('#box').dequeue('myQueue');
clearQueue([queueName]) 要素のアニメーションキューから、まだ実行されていないすべてのアイテムを削除します。
$('#box').animate({height: 300}, 2000);
$('#box').animate({width: 300}, 2000);

// アニメーション開始直後にキューをクリア
setTimeout(function() {
  $('#box').clearQueue(); // heightアニメーションは実行されるが、widthアニメーションはキャンセルされる
}, 100);

グローバルなアニメーション制御:

  • jQuery.fx.off: true に設定すると、すべてのアニメーションが無効になり、即座に完了状態になります。デバッグやテストに便利です。
    // すべてのアニメーションを無効化
    jQuery.fx.off = true;
    $('#box').fadeIn(1000); // 即座に表示される
    
    // アニメーションを再度有効化
    jQuery.fx.off = false;
  • jQuery.fx.interval: アニメーションのフレームレートを制御する間隔 (ミリ秒)。デフォルトは 13ms。値を大きくするとアニメーションはカクカクしますが、CPU負荷は減ります。
    // フレームレートを下げる (例: 約 30fps)
    jQuery.fx.interval = 33;

🌐 Ajax通信

サーバーと非同期にデータを送受信します。

コアメソッド: $.ajax()

最も柔軟で基本的なAjaxリクエストメソッドです。多くのオプションを指定できます。

メソッド 説明 使用例
$.ajax(url, [settings])
または
$.ajax([settings])
非同期HTTP (Ajax) リクエストを実行します。
url: リクエスト先のURL。
settings: Ajaxリクエストの設定を含むオブジェクト。以下は主要なオプション:
  • url: リクエストURL (settingsオブジェクト内でも指定可)。
  • method/type: HTTPメソッド (‘GET’, ‘POST’, ‘PUT’, ‘DELETE’ など)。デフォルトは ‘GET’。
  • dataType: サーバーから期待するデータの種類 (‘xml’, ‘json’, ‘script’, ‘html’, ‘text’)。指定しない場合、jQueryはMIMEタイプに基づいて推測します。
  • data: サーバーに送信するデータ。オブジェクト、文字列、配列を指定可能。GETリクエストではURLパラメータに、POSTリクエストではリクエストボディに含まれます。
  • contentType: サーバーにデータを送信する際のコンテントタイプ。デフォルトは ‘application/x-www-form-urlencoded; charset=UTF-8’。JSONを送信する場合は ‘application/json’ を指定し、dataJSON.stringify() で文字列化する必要があります。
  • processData: data をクエリ文字列に加工するかどうか (デフォルト: true)。ファイルを送信する場合などは false に設定します。
  • cache: ブラウザによるAjaxレスポンスのキャッシュを許可するかどうか (デフォルト: true、ただし dataType が ‘script’ または ‘jsonp’ の場合は false)。
  • timeout: リクエストのタイムアウト時間 (ミリ秒)。
  • async: リクエストを非同期で行うか (デフォルト: true)。同期リクエスト (false) はブラウザをブロックするため非推奨。
  • headers: リクエストヘッダーのキー/値ペアのオブジェクト。
  • beforeSend(jqXHR, settings): リクエスト送信前に実行される関数。false を返すとリクエストをキャンセル。
  • success(data, textStatus, jqXHR): リクエスト成功時に実行される関数。
  • error(jqXHR, textStatus, errorThrown): リクエスト失敗時に実行される関数。
  • complete(jqXHR, textStatus): リクエスト完了時 (成功・失敗問わず) に実行される関数。
// GETリクエスト (JSON取得)
$.ajax({
  url: '/api/users',
  method: 'GET', // または type: 'GET'
  dataType: 'json',
  timeout: 5000, // 5秒でタイムアウト
  success: function(data, textStatus, jqXHR) {
    console.log('取得成功:', data);
    // data を使って表示を更新
  },
  error: function(jqXHR, textStatus, errorThrown) {
    console.error('取得失敗:', textStatus, errorThrown);
  },
  complete: function(jqXHR, textStatus) {
    console.log('リクエスト完了:', textStatus);
  }
});

// POSTリクエスト (フォームデータ送信)
$.ajax({
  url: '/api/submit-form',
  method: 'POST',
  data: {
    name: $('#name').val(),
    email: $('#email').val()
  },
  dataType: 'json', // サーバーからの応答をJSONとして期待
  beforeSend: function() {
    $('#loadingIndicator').show(); // 送信前にローディング表示
  },
  success: function(response) {
    console.log('送信成功:', response);
    alert(response.message);
  },
  error: function() {
    alert('送信に失敗しました。');
  },
  complete: function() {
    $('#loadingIndicator').hide(); // 完了時にローディング非表示
  }
});

// POSTリクエスト (JSONデータ送信)
$.ajax({
  url: '/api/update-config',
  method: 'POST',
  contentType: 'application/json', // コンテントタイプをJSONに指定
  data: JSON.stringify({ // JavaScriptオブジェクトをJSON文字列に変換
    theme: 'dark',
    notifications: true
  }),
  success: function(res) { console.log('設定更新:', res); }
});

ショートカットメソッド

$.ajax() を特定の用途に合わせて簡略化したメソッドです。

メソッド 説明 使用例
$.get(url, [data], [success], [dataType]) HTTP GETリクエストを実行します。
data: URLパラメータとして送信されるデータ (オブジェクトまたは文字列)。
success(data, textStatus, jqXHR): 成功時のコールバック。
dataType: 期待するデータタイプ。
// 基本的なGET
$.get('/api/items', function(data) {
  console.log('Items loaded:', data);
});

// データ付きGET ( /api/search?q=jquery⟨=ja )
$.get('/api/search', { q: 'jquery', lang: 'ja' }, function(results) {
  console.log('Search results:', results);
}, 'json'); // dataTypeを 'json' に指定
$.post(url, [data], [success], [dataType]) HTTP POSTリクエストを実行します。
data: リクエストボディとして送信されるデータ。
– 引数は $.get() と同様。
// データをPOST
$.post('/api/users/create', { name: 'Test User', role: 'guest' }, function(response) {
  console.log('User created:', response);
  if(response.success) {
    // 成功処理
  }
}, 'json');
$.getJSON(url, [data], [success]) HTTP GETリクエストを実行し、JSONレスポンスを期待します。$.get()dataType: 'json' 版です。
$.getJSON('/api/config', { section: 'ui' }, function(config) {
  console.log('UI Config:', config);
  $('body').css('background-color', config.backgroundColor);
});
$.getScript(url, [success]) HTTP GETリクエストでJavaScriptファイルを取得し、実行します。$.get()dataType: 'script' 版です。
$.getScript('/js/my-plugin.js', function() {
  console.log('Plugin loaded and executed.');
  // プラグインの機能を利用開始
  $('#myElement').myPlugin();
});
$(selector).load(url, [data], [complete]) サーバーからHTMLを取得し、選択した要素の内部に挿入します。Ajaxリクエスト (GETまたはPOST) を実行します。
url: 取得するHTMLのURL。URLの後ろにスペースとセレクタを追加すると、取得したHTMLの一部のみを挿入できます (例: /page.html #content)。
data (オプション): オブジェクトまたは文字列。指定するとPOSTリクエストになります。指定しない場合はGETリクエスト。
complete(responseText, textStatus, jqXHR): リクエスト完了時のコールバック。
// #contentDiv に /partial.html の内容全体を読み込む
$('#contentDiv').load('/partial.html');

// #targetDiv に /page.html の #main 要素の内容を読み込む
$('#targetDiv').load('/page.html #main', function(response, status, xhr) {
  if (status == "error") {
    var msg = "読み込みエラー: ";
    $('#targetDiv').html(msg + xhr.status + " " + xhr.statusText);
  }
});

// POSTリクエストでデータを送り、結果を読み込む
$('#result').load('/api/calculate', { value1: 10, value2: 20 });

Ajaxイベント

Ajaxリクエストのライフサイクル中に発生するグローバルイベントです。ドキュメント全体でAjaxの状態を監視できます(例:ローディングインジケータの表示)。$.ajax()global: false オプションでイベントを発火させないことも可能です。

メソッド 説明 使用例
ajaxStart(handler)最初 のAjaxリクエストが開始される時に発火。
$(document).ajaxStart(function() { $('#globalLoader').show(); });
ajaxStop(handler)すべて のアクティブなAjaxリクエストが完了した時に発火。
$(document).ajaxStop(function() { $('#globalLoader').hide(); });
ajaxSend(handler(event, jqXHR, ajaxOptions))Ajaxリクエストが送信される 直前 に発火。beforeSend の後。
$(document).ajaxSend(function(evt, xhr, opts) { console.log('Sending request to:', opts.url); });
ajaxSuccess(handler(event, jqXHR, ajaxOptions, data))Ajaxリクエストが 成功 した時に発火。success コールバックの後。
$(document).ajaxSuccess(function(evt, xhr, opts, data) { console.log('Success:', opts.url, data); });
ajaxError(handler(event, jqXHR, ajaxOptions, thrownError))Ajaxリクエストが 失敗 した時に発火。error コールバックの後。
$(document).ajaxError(function(evt, xhr, opts, error) { console.error('Error:', opts.url, xhr.status, error); });
ajaxComplete(handler(event, jqXHR, ajaxOptions))Ajaxリクエストが 完了 した時 (成功・失敗問わず) に発火。complete コールバックの後。
$(document).ajaxComplete(function(evt, xhr, opts) { console.log('Completed:', opts.url, xhr.status); });

データのシリアライズ

フォームデータをAjax送信に適した形式に変換します。

メソッド 説明 使用例
serialize() フォーム要素セットをURLエンコードされたクエリ文字列形式 (key1=value1&key2=value2...) にシリアライズします。送信ボタンやファイル入力は含まれません。
var formData = $('#myForm').serialize();
console.log(formData); // 例: "name=Taro&email=taro%40example.com&hobbies=reading"

// $.post と組み合わせて使用
$.post('/submit', $('#myForm').serialize(), function(response) {
  // ...
});
serializeArray() フォーム要素セットを { name: "...", value: "..." } という形式のオブジェクトの配列にシリアライズします。
var formDataArray = $('#myForm').serializeArray();
console.log(formDataArray);
/* 例:
[
  { name: "name", value: "Taro" },
  { name: "email", value: "taro@example.com" },
  { name: "hobbies", value: "reading" } // チェックボックスなどは複数出現可能性あり
]
*/

// 必要に応じてオブジェクトに変換可能
var formDataObject = {};
$.each(formDataArray, function(i, field){
  formDataObject[field.name] = field.value;
});
console.log(formDataObject);
$.param(obj, [traditional]) オブジェクトまたは配列をURLエンコードされたクエリ文字列形式にシリアライズします。$.ajax()data オプションで内部的に使用されます。
traditional (boolean): true にすると、PHP や Ruby on Rails などが解釈しやすい伝統的なスタイル (例: a[]=1&a[]=2) で配列をシリアライズします。デフォルト (false) は a[0]=1&a[1]=2 のような形式です。
var params = { width:1680, height:1050, tags: ['web', 'dev'] };
var queryString = $.param(params);
console.log(queryString); // "width=1680&height=1050&tags%5B%5D=web&tags%5B%5D=dev" (デフォルト)

var traditionalString = $.param(params, true);
console.log(traditionalString); // "width=1680&height=1050&tags=web&tags=dev" (traditional=true)

🔧 ユーティリティメソッド

配列、オブジェクト、文字列などの操作に便利な汎用関数です。$ または jQuery 直下で呼び出します。

配列・オブジェクトの操作

メソッド 説明 使用例
$.each(collection, callback(index, value)) 配列やオブジェクトの各要素に対して関数を実行します。jQueryオブジェクトの .each() とは異なり、第一引数にコレクションを取ります。コールバック内で false を返すとループを中断できます。
// 配列のループ
var arr = ['a', 'b', 'c'];
$.each(arr, function(index, value) {
  console.log('Index: ' + index + ', Value: ' + value);
});

// オブジェクトのループ
var obj = { name: 'John', age: 30, city: 'New York' };
$.each(obj, function(key, value) {
  console.log('Key: ' + key + ', Value: ' + value);
  if (key === 'age') {
    console.log('Age found, stopping loop.');
    return false; // ループ中断
  }
});
$.map(collection, callback(value, index)) 配列やオブジェクトの各要素を変換し、新しい配列を作成して返します。コールバック関数の引数の順番が $.each と逆 (value, index) な点に注意。コールバックが null または undefined を返すと、その要素は結果の配列に含まれません。
// 配列の要素を2倍にする
var numbers = [1, 2, 3];
var doubled = $.map(numbers, function(value, index) {
  return value * 2;
});
console.log(doubled); // [2, 4, 6]

// オブジェクトの値を抽出
var obj = { a: 1, b: 2, c: 3 };
var values = $.map(obj, function(value, key) {
  return value;
});
console.log(values); // [1, 2, 3]

// 特定の条件でフィルタリング(nullを返す)
var mixed = [0, 1, null, 2, undefined, 3];
var filtered = $.map(mixed, function(value, index) {
  return (value === null || value === undefined) ? null : value * 10;
});
console.log(filtered); // [0, 10, 20, 30]
$.grep(array, function(element, index), [invert]) 配列の要素をフィルタリングし、条件に一致する要素のみを含む新しい配列を返します。Array.prototype.filter に似ています。
invert (boolean, デフォルト: false): true にすると、条件に *一致しなかった* 要素を返します。
var numbers = [1, 5, 2, 8, 3, 10];

// 5より大きい数を抽出
var greaterThanFive = $.grep(numbers, function(element, index) {
  return element > 5;
});
console.log(greaterThanFive); // [8, 10]

// 偶数を除外 (奇数を抽出)
var oddNumbers = $.grep(numbers, function(element, index) {
  return element % 2 === 0; // 条件は「偶数である」
}, true); // invert=true なので、偶数でないものを返す
console.log(oddNumbers); // [1, 5, 3]
$.extend([deep], target, object1, [objectN]) 1つ以上のオブジェクトの内容を、ターゲットオブジェクトにマージ(コピー)します。
deep (boolean): true を指定するとディープコピー(ネストされたオブジェクトも再帰的にマージ)を行います。
target: マージ先のオブジェクト。このオブジェクト自体が変更されます。
object1...N: マージ元のオブジェクト。後続のオブジェクトのプロパティが、先行するオブジェクトの同名プロパティを上書きします。
– ターゲットを省略 ($.extend([deep], object1, objectN)) した場合、object1 がターゲットになります。
– 空のオブジェクトをターゲット ($.extend([deep], {}, object1, objectN)) にすると、既存オブジェクトを変更せずに新しいマージ済みオブジェクトを作成できます。
var defaults = { setting1: true, setting2: 'default' };
var options = { setting2: 'custom', setting3: 123 };

// options を defaults にマージ (defaults が変更される)
$.extend(defaults, options);
console.log(defaults); // { setting1: true, setting2: 'custom', setting3: 123 }

// 新しいオブジェクトにマージ
var obj1 = { a: 1, b: { c: 2 } };
var obj2 = { b: { d: 3 }, e: 4 };
var mergedShallow = $.extend({}, obj1, obj2);
console.log(mergedShallow); // { a: 1, b: { d: 3 }, e: 4 } (bが上書きされる)
var mergedDeep = $.extend(true, {}, obj1, obj2);
console.log(mergedDeep); // { a: 1, b: { c: 2, d: 3 }, e: 4 } (bが再帰的にマージされる)

// jQuery自体にメソッドを追加 (プラグイン作成で利用)
$.extend({
  myUtility: function() { console.log('My Utility!'); }
});
$.myUtility(); // 'My Utility!'
$.inArray(value, array, [fromIndex]) 配列内で指定された値を検索し、そのインデックスを返します。見つからない場合は -1 を返します。Array.prototype.indexOf と似ていますが、引数の順序が異なります。
var arr = ['apple', 'banana', 'cherry'];
console.log( $.inArray('banana', arr) ); // 1
console.log( $.inArray('grape', arr) ); // -1
console.log( $.inArray('apple', arr, 1) ); // -1 (インデックス1以降で検索)
$.merge(first, second) 2つの配列の内容を、最初の配列にマージします。最初の配列自体が変更され、変更された配列が返されます。破壊的な操作です。
var arr1 = [1, 2, 3];
var arr2 = [4, 5, 6];
var mergedArray = $.merge(arr1, arr2);
console.log(mergedArray); // [1, 2, 3, 4, 5, 6]
console.log(arr1); // [1, 2, 3, 4, 5, 6] (arr1自体が変更されている)
$.makeArray(obj) 配列ライクなオブジェクト(例: NodeList, arguments)を本物のJavaScript配列に変換します。
var nodeList = document.getElementsByTagName('p'); // NodeList (配列ライク)
var realArray = $.makeArray(nodeList);
realArray.forEach(function(p) { // 配列メソッドが使える
  console.log(p.textContent);
});

function myFunction() {
  var argsArray = $.makeArray(arguments);
  console.log(argsArray);
}
myFunction(1, 'a', true); // [1, "a", true]
$.uniqueSort(array)
(jQuery 3.0以降)
DOM要素の配列から重複を削除し、ドキュメント順にソートします。$.unique() は廃止されました。
var divs = $('div').get(); // DOM要素の配列を取得
var ps = $('p').get();
var combined = divs.concat(ps).concat(divs); // 重複を含む配列
var uniqueSorted = $.uniqueSort(combined);
console.log(uniqueSorted.length); // 重複が削除されソートされた要素数

型判定

メソッド 説明 使用例
$.isArray(obj)オブジェクトが配列かどうかを判定します。
$.isArray([]); // true
$.isArray({}); // false
$.isFunction(obj)オブジェクトが関数かどうかを判定します。
$.isFunction(function() {}); // true
$.isFunction(/regex/); // false
$.isNumeric(value)値が数値(または数値に変換可能)かどうかを判定します。有限数のみ true。
$.isNumeric(123); // true
$.isNumeric('-1.23'); // true
$.isNumeric('abc'); // false
$.isNumeric(Infinity); // false
$.isNumeric(NaN); // false
$.isEmptyObject(obj)オブジェクトが空(自身のプロパティを持たない)かどうかを判定します。継承されたプロパティは無視します。
$.isEmptyObject({}); // true
$.isEmptyObject({ a: 1 }); // false
$.isEmptyObject(new Object()); // true
$.isPlainObject(obj)オブジェクトが {} または new Object() で作成されたプレーンなJavaScriptオブジェクトかどうかを判定します。DOM要素や他のコンストラクタで作られたインスタンスは false になります。
$.isPlainObject({}); // true
$.isPlainObject(new Object()); // true
$.isPlainObject({ a: 1 }); // true
$.isPlainObject(window); // false
$.isPlainObject(document.body); // false
$.isPlainObject(new Date()); // false
$.isPlainObject([]); // false
$.isWindow(obj)オブジェクトがウィンドウオブジェクトかどうかを判定します。
$.isWindow(window); // true
$.isWindow(this); // グローバルスコープなら true
$.isWindow({}); // false
$.isXMLDoc(node)DOMノードがXMLドキュメント内にあるか、あるいはXMLドキュメントそのものであるかを判定します。
// AjaxでXMLを取得した場合など
$.ajax({
  url: 'data.xml',
  dataType: 'xml',
  success: function(xmlDoc) {
    console.log($.isXMLDoc(xmlDoc)); // true
    console.log($.isXMLDoc(xmlDoc.documentElement)); // true
  }
});
$.type(obj)オブジェクトの内部 [[Class]] プロパティを文字列で返します (例: “object”, “array”, “function”, “string”, “number”, “boolean”, “date”, “regexp”, “null”, “undefined”)。typeof よりも詳細な型情報が得られます。
$.type({}); // "object"
$.type([]); // "array"
$.type(function(){}); // "function"
$.type("hello"); // "string"
$.type(123); // "number"
$.type(true); // "boolean"
$.type(new Date()); // "date"
$.type(/a/); // "regexp"
$.type(null); // "null"
$.type(undefined); // "undefined"

文字列操作

メソッド 説明 使用例
$.trim(str) 文字列の先頭と末尾にある空白文字(スペース、タブ、改行など)を削除します。String.prototype.trim() と同等ですが、古いブラウザでも動作します。
var text = "   lots of spaces   \n";
var trimmed = $.trim(text);
console.log('"' + trimmed + '"'); // "lots of spaces"

その他

メソッド 説明 使用例
$.proxy(function, context)
または
$.proxy(context, name)
関数の実行コンテキスト (this の値) を固定した新しい関数を返します。
– 第1形式: function を実行する際に this が常に context になるようにします。
– 第2形式: context オブジェクトの name プロパティ (文字列で指定) であるメソッドを実行する際に、this が常に context になるようにします。
var myApp = {
  name: 'My Application',
  handleClick: function(event) {
    console.log('Clicked in: ' + this.name); // this が myApp を指すようにしたい
  }
};

// 通常のイベントハンドラでは this はボタン要素を指す
// $('#myButton').on('click', myApp.handleClick);

// $.proxy を使って this を myApp に束縛する
$('#myButton').on('click', $.proxy(myApp.handleClick, myApp));

// 第2形式
$('#myOtherButton').on('click', $.proxy(myApp, 'handleClick'));
$.contains(container, contained) あるDOM要素 (container) が、別のDOM要素 (contained) を子孫として含んでいるかどうかを判定します。jQueryオブジェクトではなく、DOM要素を引数に取ります。
var containerDiv = $('#container')[0]; // DOM要素を取得
var innerP = $('#innerElement')[0];   // DOM要素を取得
var outerP = $('#outerElement')[0];   // DOM要素を取得

console.log( $.contains(containerDiv, innerP) ); // true (含まれている)
console.log( $.contains(containerDiv, outerP) ); // false (含まれていない)
console.log( $.contains(document.documentElement, containerDiv) ); // true (通常は含まれる)
console.log( $.contains(containerDiv, containerDiv) ); // false (自分自身は含まないと判定)
$.now() 現在時刻をエポック (1970年1月1日 00:00:00 UTC) からのミリ秒数で返します。(new Date()).getTime() と同等です。
var timestamp = $.now();
console.log(timestamp); // 例: 1678886400000
$.parseHTML(data, [context], [keepScripts]) HTML文字列を解析し、結果のDOMノードの配列を返します。
context (DOM Element): HTMLを解析する際のコンテキストとなるドキュメント。通常は document
keepScripts (boolean): true にすると、<script> タグも結果に含まれます(ただし実行はされません)。デフォルトは false。
var htmlString = '<p>Hello</p><div>World</div>';
var domNodes = $.parseHTML(htmlString);

$.each(domNodes, function(i, node) {
  $('body').append(node); // パースしたノードをドキュメントに追加
});

var htmlWithScript = '<p>Text</p><script>alert("Hi!");</script>';
var nodesWithScript = $.parseHTML(htmlWithScript, document, true); // keepScripts=true
console.log(nodesWithScript.length); // 2 (p要素とscript要素)
// スクリプトは含まれるが実行されない
$.parseJSON(json) JSON文字列を解析し、結果のJavaScriptオブジェクトまたは値を返します。注意: jQuery 3.0 で廃止されました。代わりにネイティブの JSON.parse() を使用してください。
// jQuery 3.0 以降では JSON.parse() を使う
var jsonString = '{"name":"John", "age":30}';
// var obj = $.parseJSON(jsonString); // 廃止
var obj = JSON.parse(jsonString);
console.log(obj.name); // John
$.parseXML(data) XML文字列を解析し、結果のXMLドキュメントを返します。パースに失敗するとエラーをスローします。
var xmlString = '<items><item id="1">Apple</item></items>';
try {
  var xmlDoc = $.parseXML(xmlString);
  var itemName = $(xmlDoc).find('item').text();
  console.log(itemName); // Apple
} catch (e) {
  console.error("XML Parse Error:", e);
}
$.noop 何もしない空の関数です。コールバック関数が必要だが何もしない場合にプレースホルダーとして便利です。
function doSomething(callback) {
  // コールバックが指定されていなければ、$.noop を使う
  var cb = $.isFunction(callback) ? callback : $.noop;
  console.log('処理を実行...');
  cb(); // エラーにならずに実行できる
}

doSomething(); // 何も起こらない
doSomething(function() { console.log('完了!'); }); // '完了!' が表示される
$.when(deferreds...) 1つ以上の Deferred オブジェクト(または Promise オブジェクト、通常のJavaScriptオブジェクト)を受け取り、それらすべてが解決 (resolved) されたときに解決される新しい Promise オブジェクトを返します。Ajaxリクエストなどの複数の非同期処理が完了するのを待つのに便利です。いずれか1つでも拒否 (rejected) されると、返される Promise も拒否されます。
// 2つのAjaxリクエストが完了するのを待つ
var request1 = $.ajax('/api/data1');
var request2 = $.ajax('/api/data2');

$.when(request1, request2).done(function(response1, response2) {
  // response1 と response2 はそれぞれのAjaxの成功時のデータ (配列形式)
  var data1 = response1[0];
  var data2 = response2[0];
  console.log('Data 1:', data1);
  console.log('Data 2:', data2);
  console.log('両方のリクエストが成功しました!');
}).fail(function() {
  console.error('少なくとも1つのリクエストが失敗しました。');
}).always(function() {
  console.log('すべてのリクエストが完了しました(成功または失敗)。');
});

// 通常の値やPromiseも混ぜられる
var deferred = $.Deferred();
setTimeout(function() { deferred.resolve('完了'); }, 1000);

$.when($.get('/api/user'), deferred.promise(), '静的な値')
 .done(function(userResponse, deferredResult, staticValue) {
   console.log('User:', userResponse[0]);
   console.log('Deferred:', deferredResult);
   console.log('Static:', staticValue);
 });

コメント

タイトルとURLをコピーしました