初心者編|無料コーディング教材|HTML・CSS・jQueryを実践で学ぶ

jQueryの書き方|基本構文・セレクター・メソッド・イベントを初心者向けに解説

コードからWebカードの表示を変更するjQueryの書き方を表したアイキャッチ画像

jQueryのコードを見ると、$、丸括弧、クォーテーション、ドットが並び、「どこから読めばよいの?」と戸惑うことがありますよね。

jQueryの書き方は、セレクターで対象を選び、ドットの後ろへメソッドを書き、必要なら引数を渡すのが基本です。クリックなどの操作をきっかけにするときは、イベント処理を組み合わせます。

この記事では、jQueryを記述する場所から、セレクター・メソッド・引数・イベント・thisの読み方まで順番に解説します。最後にプロフィールカードの状態を切り替えるコードを作り、1行ずつ役割を確認しましょう。

jQueryの基本的な書き方

まずは、クラスを追加する1行を見てください。

$('#card').addClass('is-online');

この1行は「IDがcardの要素を選び、is-onlineクラスを追加する」という意味です。次の図のように3つへ分けると読みやすくなります。

jQueryコードをセレクター・メソッド・引数の3つに分けて役割を示す図
jQueryの1行は、対象を選ぶセレクター、処理を示すメソッド、必要な値を渡す引数に分けて読めます。
  • $('#card'):どのHTML要素を操作するか選ぶセレクター
  • .addClass:選んだ要素へ何をするか示すメソッド
  • ('is-online'):メソッドへ渡すクラス名などの引数
  • ;:文の終わりを表すセミコロン

ドル記号と丸括弧の意味

$()はjQuery関数を短く書く記号です。jQuery()と書いても同じ意味になります。

$('#card');
jQuery('#card');

丸括弧の中に文字列を書くときは、'または"で囲みます。記事内ではシングルクォーテーションで統一しますが、プロジェクトのルールに合わせてどちらかへ揃えれば問題ありません。

ドットは処理をつなぐ記号

セレクターの後ろにあるドットは、「選んだ対象へ次の処理を行う」と考えると分かりやすいでしょう。

$('.message').text('更新しました');
$('.card').addClass('is-active');
$('.button').prop('disabled', true);

1行目は文字の変更、2行目はクラスの追加、3行目はボタンの無効化です。メソッドによって、必要な引数の数や意味が変わります。

jQueryを記述するファイルと読み込み順

jQueryのコードはJavaScriptなので、拡張子が.jsのファイルへ書けます。練習ではindex.htmlstyle.cssscript.jsを同じフォルダーへ用意しましょう。

index.html</body>直前で、jQuery本体を先、自作のscript.jsを後に読み込みます。

<script src="https://code.jquery.com/jquery-4.0.0.min.js"></script>
<script src="script.js"></script>

順番が逆だと、自作コードを実行した時点では$()が使えません。Consoleに$ is not definedまたはjQuery is not definedと表示されたら、URLと読み込み順を確認してください。

HTMLの読み込み完了後に処理する

scriptタグをhead内へ置く場合や、WordPressで読み込み位置が分かりにくい場合は、次の準備完了関数で処理を囲みます。

jQuery(function ($) {
  // HTMLの読み込み完了後に実行するコード
});

jQuery(function ($) { ... });は、DOMと呼ばれるHTMLの構造を操作できる状態になってから中のコードを実行します。関数内では$をjQueryとして使えるため、WordPressでの競合対策にもなります。

scriptタグを</body>直前へ置けば、通常はHTMLが先に読み込まれます。それでも既存サイトでは読み込み位置が変わることがあるため、準備完了関数の意味を知っておくと安心です。

jQueryセレクターの書き方

セレクターは、ページ内のどの要素を操作するか決める部分です。CSSと同じ考え方で書けます。

選び方jQuery選ばれる要素
タグ名$('p')すべての<p>
クラス名$('.card')class="card"を持つ要素
ID名$('#menu')id="menu"を持つ要素
子孫要素$('.card p').card内のすべてのp
属性$('[aria-expanded="true"]')指定した属性値を持つ要素

クラスやIDの記号を忘れると、別のタグを探すことになります。HTMLがclass="card"なら$('.card')id="card"なら$('#card')です。

jQueryメソッドと引数の書き方

メソッドは、選んだ要素へ行う操作です。値を取得する書き方と、値を変更する書き方が同じメソッドに用意されていることもあります。

const currentText = $('.message').text();
$('.message').text('新しい文字');

const currentHref = $('.link').attr('href');
$('.link').attr('href', '/about/');
  • .text():引数なしなら現在の文字を取得する
  • .text('新しい文字'):引数を渡すと文字を変更する
  • .attr('href'):属性名だけなら値を取得する
  • .attr('href', '/about/'):属性名と値を渡すと変更する

引数の順番はメソッドごとに決まっています。記憶だけに頼らず、使うメソッドの公式APIで引数と戻り値を確認しましょう。

メソッドチェーンで同じ対象へ処理を続ける

同じ要素へ複数の操作を行うときは、メソッドをドットでつなげられます。これをメソッドチェーンと呼びます。

$('#status-button')
  .attr('aria-pressed', 'true')
  .text('オフラインにする');

このコードは、同じボタンの属性と文字を変更します。1行に詰め込まず、メソッドごとに改行すると処理の順番を追いやすくなります。

イベント処理の書き方

クリック、入力、送信など、ユーザーやブラウザで発生する出来事をイベントと呼びます。jQueryでは.on()を使って処理を登録できます。

$('#status-button').on('click', function () {
  $('.status-label').text('オンライン');
});
  • $('#status-button'):操作を受け取るボタン
  • .on():イベント処理を登録するメソッド
  • 'click':受け取るイベントの種類
  • function () { ... }:クリック後に実行する関数

関数の波括弧{ }内へ、実際に行いたい処理を書きます。丸括弧と波括弧の閉じ忘れ、最後の);の抜けはよくあるエラーです。

thisは操作された要素を表す

通常のfunctionを使ったイベント処理では、thisが実際にクリックされた要素を指します。jQueryメソッドを使うときは$(this)と書きます。

$('.status-button').on('click', function () {
  $(this).text('押されました');
});

複数のボタンがあっても、押されたボタンだけを変更できます。アロー関数() => {}ではthisの指す対象が異なるため、この用途では通常のfunctionを使いましょう。

jQueryの書き方を実例で確認する

ここまでの構文を使い、プロフィールカードをオフラインとオンラインで切り替えます。変更前はカードが灰色で、状態表示は「オフライン」です。

オフライン状態のプロフィールカードとオンラインにするボタン
変更前は、カードが灰色のオフライン状態です。

HTMLでカードとボタンを作る

index.html<body>内へ次のHTMLを書きます。ボタンのaria-pressedは、切り替えボタンが現在押された状態かどうかを支援技術へ伝えます。

<main class="demo" aria-labelledby="demo-title">
  <p class="eyebrow">JQUERY SYNTAX</p>
  <h1 id="demo-title">コードの役割を画面で確認</h1>
  <p class="lead">
    ボタン操作をきっかけに、カードのクラス・文字・状態を変更します。
  </p>

  <section id="profile-card" class="profile-card" aria-labelledby="profile-name">
    <div class="avatar" aria-hidden="true">W</div>
    <div class="profile-card__body">
      <span class="status-dot" aria-hidden="true"></span>
      <p class="status-label" role="status" aria-live="polite">
        オフライン
      </p>
      <h2 id="profile-name">Web制作を学習中</h2>
      <p>jQueryのセレクターとメソッドを練習しています。</p>
    </div>
  </section>

  <button id="status-button" type="button" aria-pressed="false">
    オンラインにする
  </button>
</main>

<script src="https://code.jquery.com/jquery-4.0.0.min.js"></script>
<script src="script.js"></script>

CSSで2つの状態を用意する

style.cssへ次のCSSを書きます。通常の.profile-cardがオフライン、.profile-card.is-onlineがオンラインの見た目です。

:root {
  color: #18324b;
  background: #edf4fa;
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
}

* {
  box-sizing: border-box;
}

body {
  min-height: 100vh;
  margin: 0;
  padding: 32px 20px;
  display: grid;
  place-items: center;
}

.demo {
  width: min(760px, 100%);
  padding: 38px;
  border: 1px solid #d9e3ed;
  border-radius: 24px;
  background: #fff;
  box-shadow: 0 18px 48px rgb(24 50 75 / 12%);
}

.eyebrow {
  margin: 0 0 8px;
  color: #1676d2;
  font-size: 13px;
  font-weight: 800;
  letter-spacing: 0.13em;
}

h1 {
  margin: 0;
  font-size: clamp(27px, 4vw, 39px);
  line-height: 1.35;
}

.lead {
  margin: 10px 0 26px;
  color: #5c7084;
}

.profile-card {
  padding: 24px;
  display: flex;
  align-items: center;
  gap: 20px;
  border: 2px solid #d9e3ed;
  border-radius: 18px;
  background: #f8fafc;
}

.avatar {
  display: grid;
  width: 78px;
  height: 78px;
  flex: none;
  place-items: center;
  border-radius: 22px;
  background: #dbe5ef;
  color: #536b83;
  font-size: 30px;
  font-weight: 800;
}

.profile-card__body {
  min-width: 0;
}

.status-dot,
.status-label {
  display: inline-block;
  vertical-align: middle;
}

.status-dot {
  width: 10px;
  height: 10px;
  margin-right: 5px;
  border-radius: 50%;
  background: #8797a8;
}

.status-label {
  margin: 0;
  color: #65788b;
  font-size: 14px;
  font-weight: 700;
}

.profile-card h2 {
  margin: 6px 0 4px;
  font-size: 23px;
}

.profile-card__body > p:last-child {
  margin: 0;
  color: #61758a;
}

.profile-card.is-online {
  border-color: #45a47d;
  background: #f0faf5;
}

.profile-card.is-online .avatar {
  background: #16855e;
  color: #fff;
}

.profile-card.is-online .status-dot {
  background: #16a269;
  box-shadow: 0 0 0 4px rgb(22 162 105 / 14%);
}

.profile-card.is-online .status-label {
  color: #13714f;
}

button {
  width: 100%;
  min-height: 50px;
  margin-top: 20px;
  padding: 12px 18px;
  border: 0;
  border-radius: 12px;
  background: #1676d2;
  color: #fff;
  font: inherit;
  font-weight: 800;
  cursor: pointer;
}

button:focus-visible {
  outline: 3px solid #ffbf47;
  outline-offset: 3px;
}

button[aria-pressed="true"] {
  background: #536b83;
}

@media (max-width: 600px) {
  body {
    padding: 18px 14px;
  }

  .demo {
    padding: 24px 18px;
    border-radius: 18px;
  }

  .profile-card {
    padding: 18px;
    align-items: flex-start;
  }

  .avatar {
    width: 56px;
    height: 56px;
    border-radius: 16px;
    font-size: 23px;
  }
}

jQueryで色を直接指定せず、状態を表すクラスだけを切り替えます。見た目をCSSへまとめると、デザイン変更時にJavaScriptを修正せずに済みます。

jQueryでクラス・文字・属性を切り替える

script.jsへ次のコードを書きます。掲載画面の動作に必要なjQueryはこの部分です。

jQuery(function ($) {
  const $card = $('#profile-card');

  $('#status-button').on('click', function () {
    const isOnline = $card.hasClass('is-online');
    const nextOnline = !isOnline;

    $card.toggleClass('is-online', nextOnline);
    $card.find('.status-label').text(
      nextOnline ? 'オンライン' : 'オフライン'
    );

    $(this)
      .attr('aria-pressed', String(nextOnline))
      .text(nextOnline ? 'オフラインにする' : 'オンラインにする');
  });
});

const $card = $('#profile-card');は、何度も使うカードを変数へ保存しています。jQueryオブジェクトだと分かるよう、変数名を$cardにしています。

.hasClass('is-online')で現在のクラスを調べ、!で真偽を反転させて次の状態を作ります。.toggleClass('is-online', nextOnline)は、2番目の引数がtrueならクラスを付け、falseなら外します。

条件 ? A : Bは三項演算子です。オンラインならA、そうでなければBを選び、状態表示とボタンの文字へ設定します。

ボタンを押した変更後の画面がこちらです。カードへis-onlineクラスが付き、状態表示、背景色、アバター、ボタンの文字と属性が連動して変わります。

オンライン状態へ変わった緑色のプロフィールカード
ボタンを押すと、カードのクラス・状態表示・ボタンの文字が変わります。

jQueryの書き方でよくある間違い

クラスとIDの記号を間違える

class="card"$('.card')id="card"$('#card')です。セレクターとHTMLの名前が一致しているか、大文字・小文字やハイフンまで確認してください。

括弧やクォーテーションを閉じていない

.on('click', function () { ... });には丸括弧と波括弧があります。エディターの自動整形を使い、開始と終了のインデントが対応しているか確認しましょう。

全角記号を使っている

日本語入力のまま全角の括弧、クォーテーション、スペースを入れると構文エラーになります。コードの記号は半角で入力してください。

HTMLが作られる前に実行している

対象のHTMLより前にコードを実行すると、セレクターに一致する要素がありません。scriptタグを</body>直前へ置くか、jQuery(function ($) { ... });で囲みます。

thisをアロー関数で使っている

クリックされた要素をthisで扱うなら、イベント処理を通常のfunction () {}で書きます。アロー関数を使う場合は、イベントオブジェクトのcurrentTargetを利用するなど、別の書き方が必要です。

jQueryの書き方のまとめ

  • $('セレクター').メソッド(引数);が基本形
  • セレクターは「何を選ぶか」、メソッドは「何をするか」を表す
  • 引数には変更する文字やクラス名など、処理に必要な値を渡す
  • .on('click', function () { ... });でクリック処理を登録する
  • 通常のイベント関数では$(this)で操作された要素を選べる
  • HTMLの後に実行し、Consoleで構文エラーを確認する

長いコードも、セレクター・メソッド・引数・イベントに分ければ読みやすくなります。まずは実例の文字やクラス名をひとつずつ変更し、どの記述が画面のどこへ影響するか確かめてみてください。