画像の alt 属性はアクセシビリティとSEOの両面で重要です。jQueryで alt 属性を動的に取得・設定することで、画像を切り替えた際にalt情報も同時に更新したり、空のaltを一括でチェックしたりできます。この記事では基本的な取得・設定から、空altチェック・一括処理・アクセシビリティ観点まで解説します。
この記事でわかること
- attr(“alt”) でalt属性を取得・設定する
- altが未設定・空の画像を検出する
- src切り替えと同時にaltも更新する
- ページ内の全画像のalt属性を一括で確認する
- 装飾画像のalt=””(空alt)の正しい使い方
alt属性を取得する
$(function () {
// IDで指定した画像のaltを取得
var altText = $('#main-image').attr('alt');
console.log(altText); // 例: 'サンプル画像'
// altが存在しない場合はundefinedが返る
if (altText === undefined) {
console.log('alt属性が設定されていません');
}
// 空のalt(装飾画像)と未設定を区別する
if (altText === '') {
console.log('装飾画像(alt空)');
} else if (!altText) {
console.log('alt属性が存在しない(アクセシビリティ上の問題)');
}
});
空のalt(“”)と未設定altの違い
alt="": 意図的に空。スクリーンリーダーはこの画像をスキップする(装飾画像に使う)alt属性なし: アクセシビリティ違反。スクリーンリーダーがsrc URLを読み上げてしまう
意味のある画像には適切なaltテキストを、装飾のみの画像には alt="" を設定しましょう。
alt属性を設定する
$(function () {
// altを設定
$('#main-image').attr('alt', '新しいalt テキスト');
// srcを切り替える際にaltも同時に更新する
$('#change-btn').on('click', function () {
$('#main-image')
.attr('src', '/images/new-photo.jpg')
.attr('alt', '新しい写真の説明');
});
// altを削除する(推奨しない: アクセシビリティ問題)
// $('#main-image').removeAttr('alt');
});
srcを切り替えるときはaltも必ず更新する
画像のsrcを変えた場合、altが古い情報のままだとスクリーンリーダーが誤った情報を読み上げます。特にギャラリーやスライドショーでは
画像のsrcを変えた場合、altが古い情報のままだとスクリーンリーダーが誤った情報を読み上げます。特にギャラリーやスライドショーでは
src と alt を必ずセットで更新してください。imgタグのsrcを書き換えて画像を変更する完全ガイドも参照してください。ページ内の全画像のalt属性を一括チェック・処理する
サイト内の画像のaltを一括チェックするツールや、WordPressの投稿内画像に動的にaltを設定するパターンです。
$(function () {
// alt未設定または空の画像を検出
var noAlt = [];
$('img').each(function () {
var alt = $(this).attr('alt');
if (alt === undefined || alt === null) {
noAlt.push($(this).attr('src'));
}
});
if (noAlt.length > 0) {
console.warn('alt未設定の画像:', noAlt);
}
// data-alt属性の値をalt属性にコピー(遅延ロード画像のフォールバック)
$('img[data-alt]').each(function () {
if (!$(this).attr('alt')) {
$(this).attr('alt', $(this).data('alt'));
}
});
});
Ajax・動的コンテンツ後のalt設定
Ajaxで画像を含むコンテンツを挿入した後にaltを設定する場合は、挿入後のコールバックで処理します。
$(function () {
$.get('/api/images', function (data) {
// dataには <img src='...'> などのHTMLが入っているとする
var $content = $(data);
// 挿入前にaltを設定
$content.find('img').each(function () {
if (!$(this).attr('alt')) {
$(this).attr('alt', '動的に読み込まれた画像');
}
});
$('#container').append($content);
});
});
altのアクセシビリティベストプラクティス
| 画像の種類 | altの設定 | 例 |
|---|---|---|
| 意味のある画像(写真・イラスト) | 内容を説明するテキスト | alt="東京タワーの夜景" |
| リンクの中にある画像 | リンク先の説明 | alt="トップページへ" |
| 装飾のみの画像 | alt=""(空) |
区切り線・背景テクスチャなど |
| テキストを含む画像 | 画像内のテキストをそのまま書く | alt="2024年秋のセール開催中" |
| アイコン(SVGなど) | role=”img”とaria-labelで代替 | role="img" aria-label="検索" |
まとめ
jQueryでimgタグのalt属性を操作する際のポイントをまとめます。
- 取得:
$("img").attr("alt")(未設定はundefined、空は"") - 設定:
$("img").attr("alt", "テキスト") - src切り替え時: altも必ずセットで更新する
- 装飾画像:
alt=""を明示的に設定(属性なしはNG)
関連記事: attr()とprop()の違い・完全ガイド / imgタグのsrcを書き換えて画像を変更する完全ガイド
よくある質問(FAQ)
Qalt属性が存在するかどうかを確認する方法は?
A
$(el).attr("alt") !== undefined で確認できます。$("img").is("[alt]") でalt属性が存在する要素かどうかの真偽値も取得できます。QWordPressの投稿内画像にまとめてaltを設定したいです。
AWordPressのalt属性はメディアライブラリで管理するのが正しい方法です。jQueryで動的に補完する場合は
$(".entry-content img").each() で投稿コンテンツ内の画像だけを対象にし、altが空の場合に自動設定できます。ただし恒久的な対応はWordPressのalt設定を直接修正することを推奨します。Q遅延読み込み(lazy load)した画像のaltが設定されません。
Alazy loadはsrc属性を後から変更しますが、alt属性はHTMLに最初から含めておくべきです。
data-src で遅延読み込みする場合でも alt はHTMLに記載しておいてください。JavaScriptで後から設定する場合は、画像が読み込まれるコールバック後に attr("alt", ...) を呼んでください。Q画像クリックで画像を拡大表示するとき、モーダルのaltも更新したいです。
Aサムネイルをクリックした際に、サムネイルの
alt をモーダル内の画像にも設定します:var alt = $(this).attr("alt"); $("#modal-img").attr("alt", alt);モーダルには role="dialog" と aria-labelledby も設定するとよりアクセシブルです。QSEO観点からalt属性はどれほど重要ですか?
AGoogleは画像のaltテキストを使って画像の内容を理解します。適切なaltを設定することで画像検索での表示可能性が上がります。ただし、キーワードを詰め込むスパム的な使い方はかえって評価を下げる可能性があります。画像の内容を正確かつ簡潔に説明するテキストを設定してください。