ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
jQueryでセレクトボックス(<select>)に<option>を追加するには、$('#sel').append('<option value="1">A</option>') のように対象の<select>へappend()でオプション文字列を渡すのが基本です。動的な値や配列・データからの一括追加では、HTML文字列の組み立てよりも $('<option>', {value, text}) でオブジェクトを生成する方法が安全で読みやすくなります。
| この記事の要点 |
|---|
|
基本: append() でオプションを末尾に追加する
最も手軽な方法は、対象の<select>を取得し、append()にオプションのHTML文字列を渡すことです。append()は指定した要素の内部末尾に追加するため、新しい<option>はリストの一番下に並びます。
まず、操作対象となる<select>を用意します。idを付けておくと、jQueryのIDセレクタで一意に指定できます。
|
<select id="sel"> |
この<select>に対して、jQueryで新しいオプションを追加します。
|
// 末尾に1件追加する |
このコードを実行すると、「ぶどう」(値は3)がリストの末尾に追加されます。append()に渡す文字列は完結した<option>タグとして記述します。value属性を省略した場合、多くのブラウザではタグ内のテキストがそのまま値として扱われます。
なお、jQueryでDOMを操作するコードは、対象の要素が読み込まれた後で実行する必要があります。<head>内などページの早い段階でスクリプトを書く場合は、次のように準備完了後に実行されるようにします。
|
$(function() { |
$(function() { ... }) は $(document).ready(function() { ... }) の短縮記法で、HTMLの解析が終わってから中の処理を実行します。<select>より後ろにスクリプトを置く場合は、必ずしもこの囲みは必要ありません。
$('<option>', {...}) でオプションを生成する
値やテキストが変数の場合、HTML文字列を連結して組み立てると、引用符の扱いを誤ったり、後述するXSSのリスクが生じたりします。jQueryでは、要素名と属性オブジェクトを渡して要素を生成する記法が用意されており、こちらのほうが安全で読みやすくなります。
|
var value = '3'; |
textプロパティに渡した文字列は、jQueryが内部でtext()相当として扱うため、<や>を含んでいてもタグとして解釈されず、文字としてそのまま表示されます。これにより、外部から受け取った値を安全に表示できます。
属性オブジェクトにはselected: trueやdisabled: trueなども指定できます。
|
var $opt = $('<option>', { |
new Option()(素のJavaScript)を使う方法もあり、これについては後半で対比します。
配列・データから $.each() で一括追加する
選択肢が複数あり、配列やサーバーから取得したデータをもとに追加する場合は、$.each()などでループしながらオプションを生成します。ループのたびにappend()を呼ぶこともできますが、件数が多いときは一度文字列やドキュメントフラグメントにまとめてから1回で追加するほうが、再描画の回数を抑えられます。
まず、単純な配列から追加する例です。
|
var items = [ |
件数が多い場合は、いったん配列に<option>要素をためてから一括で渡すと、DOM操作の回数が1回で済みます。
|
var $options = []; |
サーバーからJSONを取得して選択肢を作る場合も、取得したデータに対して同じようにループします。下記は$.getJSON()でデータを取得し、<select>を組み立てる例です。
|
$.getJSON('/api/fruits', function(data) { |
先頭や特定位置に追加する(prepend / after / before)
append()は末尾への追加でしたが、追加位置を変えたい場合は別のメソッドを使います。代表的なものを次の表にまとめます。
| メソッド | 追加される位置 | 呼び出し対象 |
|---|---|---|
append() |
リストの末尾(内部の最後) | <select> |
prepend() |
リストの先頭(内部の最初) | <select> |
after() |
指定した<option>の直後 |
基準となる<option> |
before() |
指定した<option>の直前 |
基準となる<option> |
先頭に「選択してください」のようなプレースホルダーを置きたい場合はprepend()が便利です。
|
// 先頭に追加 |
「2番目の<option>の後ろ」のように、特定の選択肢を基準にして挿入したい場合はafter()やbefore()を使います。基準となる<option>を選び、それに対してメソッドを呼びます。
|
// value="2"のオプションの直後に挿入 |
選択状態の設定とクリア(val / empty)
オプションを追加したあとに、どれを選択状態にするかはval()で指定します。引数に選択したい<option>のvalueを渡すと、その項目が選択されます。
|
// value="3"の項目を選択状態にする |
選択肢をすべて入れ替えたいときは、追加の前にempty()で既存の<option>をすべて削除します。これにより、古い選択肢が残ったまま重複することを防げます。
|
// いったん空にしてから入れ直す |
特定の<option>だけを削除したい場合は、その要素を選択してremove()を呼びます。
|
// value="2"のオプションだけ削除 |
素のJavaScript(Option / add)との対比
同じ操作は、jQueryを使わずに標準のDOM APIでも実現できます。new Option()でオプションを生成し、<select>のadd()やappendChild()で追加します。jQueryを読み込めない環境や、ライブラリ依存を減らしたい場合の選択肢になります。
|
var sel = document.getElementById('sel'); |
jQueryの記法と標準APIの対応関係を次の表に整理します。
| やりたいこと | jQuery | 素のJavaScript |
|---|---|---|
| 末尾に追加 | $('#sel').append($opt) |
sel.add(opt) |
| 生成 | $('<option>', {value, text}) |
new Option(text, value) |
| 選択値の設定 | $('#sel').val('3') |
sel.value = '3' |
| 全削除 | $('#sel').empty() |
sel.length = 0 |
| よくある落とし穴 |
|---|
|
選択状態を保ったまま選択肢を作り直す例を示します。
|
var $sel = $('#sel'); |
よくある質問
Q. append() に渡す文字列と $('<option>', {...}) はどちらを使うべきですか。
固定の選択肢で値も自分で管理しているなら、どちらでも問題ありません。値やテキストが変数、特にユーザー入力やサーバーから取得したデータの場合は、$('<option>', {text: ...})を使うと文字列が自動的にエスケープされ、XSSを避けられます。
Q. 追加したのにセレクトボックスに表示されません。
主な原因は、対象の<select>がまだ読み込まれる前にスクリプトが実行されている、IDセレクタの綴りが合っていない、jQuery本体が読み込まれていない、のいずれかです。$(function(){ ... })で囲み、$('#sel').lengthが0でないか(要素が取得できているか)を確認してください。
Q. 追加した選択肢を最初から選択状態にしたいです。
追加後に$('#sel').val(選択したい値)を呼ぶか、生成時に$('<option>', {value: v, text: t, selected: true})のようにselected: trueを指定します。複数選択(multiple)の場合はval(['1','2'])のように配列で渡せます。
Q. 重複した選択肢を追加しないようにするには。
追加前に同じvalueが既にあるかを調べます。$('#sel option[value="3"]').lengthが0のときだけ追加すれば、重複を防げます。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?