この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:6
ページ更新者:T
更新日時:2026-06-11 07:12:00

タイトル: .attr()
SEOタイトル: jQuery .attr() 完全ガイド(属性取得 / 設定 / 削除 / .prop() との違い / 複数属性の一括設定)

この記事の要点
  • .attr() は jQuery で要素の HTML 属性を取得・設定するメソッド
  • $(sel).attr("src") で取得、$(sel).attr("src", "...") で設定。オブジェクト渡しで複数属性を一括設定可能
  • 属性削除は .removeAttr("...")
  • checked / disabled / selected など動的に変化するプロパティ.attr() ではなく .prop() を使う(jQuery 1.6+)
  • 値を関数で動的計算する .attr("...", function(i, v){}) パターンもサポート

.attr() とは

.attr() は jQuery で要素の HTML 属性(attribute)を取得・設定するメソッドです。src / href / id / data-* / alt など、HTML タグに直接書かれている属性を扱います。

属性の取得

// <img id="logo" src="logo.png" alt="Logo">
const src = $("#logo").attr("src");
console.log(src);  // logo.png

const alt = $("#logo").attr("alt");
console.log(alt);  // Logo

該当する要素が複数ある場合は最初の要素の属性値を返します。属性が存在しない場合は undefined

属性の設定

単一属性

$(&quot;#logo&quot;).attr(&quot;src&quot;, &quot;new-logo.png&quot;);
$(&quot;a&quot;).attr(&quot;target&quot;, &quot;_blank&quot;);

複数属性をオブジェクトで一括設定

$(&quot;img&quot;).attr({
    src: &quot;photo.jpg&quot;,
    alt: &quot;プロフィール写真&quot;,
    width: 200,
    height: 200
});

関数で動的に決定

// インデックスと現在値を引数に取り、新しい値を返す
$(&quot;a&quot;).attr(&quot;href&quot;, function (index, currentHref) {
    return currentHref + &quot;?ref=campaign&quot;;
});

属性の削除

$(&quot;input&quot;).removeAttr(&quot;disabled&quot;);
$(&quot;a&quot;).removeAttr(&quot;target&quot;);

.attr() と .prop() の使い分け

jQuery 1.6 以降では属性(attribute)プロパティ(property)を明確に区別します。

種類説明
attributeHTML タグに記述された初期値src, href, id, alt, class, data-*
propertyDOM 上で動的に変化する状態checked, disabled, selected, value

典型的な例:チェックボックス

// <input type="checkbox" id="cb" checked>

// NG: .attr() は初期値(HTML 上の値)を返す
$("#cb").attr("checked");   // "checked" (文字列)

// OK: .prop() は現在の状態を返す
$("#cb").prop("checked");   // true / false

// チェックを ON にする
$("#cb").prop("checked", true);

// チェックを OFF にする
$("#cb").prop("checked", false);

判別の目安

使うメソッド対象
.attr()HTML 属性そのもの。src / href / data-* / alt
.prop()真偽値で表現される動的状態。checked / disabled / selected / readOnly

data-* 属性

data-* 属性は .attr() でも取得できますが、jQuery 専用の .data() はキャッシュと型変換(数値や JSON)を行うため、ケースに応じて使い分けます。

// <div id="x" data-user-id="42" data-config='{"a":1}'></div>

$("#x").attr("data-user-id");  // "42" (文字列)
$("#x").data("userId");        // 42   (数値に自動変換、ケバブ → キャメル)
$("#x").data("config");        // {a: 1} (JSON 自動パース)

よく使う属性操作のパターン

画像の遅延読み込み

$(&quot;img.lazy&quot;).each(function () {
    const realSrc = $(this).attr(&quot;data-src&quot;);
    $(this).attr(&quot;src&quot;, realSrc);
});

外部リンクに target="_blank"

$(&quot;a[href^=http]&quot;).attr({
    target: &quot;_blank&quot;,
    rel: &quot;noopener noreferrer&quot;
});

フォームの一括無効化

// 注: disabled は .prop() を推奨
$(&quot;form :input&quot;).prop(&quot;disabled&quot;, true);

純粋な DOM API との対応

jQueryDOM API
$(el).attr(&quot;src&quot;)el.getAttribute(&quot;src&quot;)
$(el).attr(&quot;src&quot;, v)el.setAttribute(&quot;src&quot;, v)
$(el).removeAttr(&quot;src&quot;)el.removeAttribute(&quot;src&quot;)
$(el).prop(&quot;checked&quot;)el.checked

属性の存在チェック

属性が存在しない場合 .attr()undefined を返します。これを利用して存在判定できます。

if (typeof $(&quot;#x&quot;).attr(&quot;data-foo&quot;) !== &quot;undefined&quot;) {
    // 属性が存在する
}

// または .is(&quot;[属性名]&quot;) の方がスッキリ
if ($(&quot;#x&quot;).is(&quot;[data-foo]&quot;)) {
    // 属性が存在する
}

aria-* / role 属性

アクセシビリティ関連の属性も普通の HTML 属性なので .attr() で操作します。動的な UI では特に頻出。

// ドロップダウンを展開
$(&quot;#menu-btn&quot;).attr({
    &quot;aria-expanded&quot;: &quot;true&quot;,
    &quot;aria-controls&quot;: &quot;menu-list&quot;
});

// タブの選択状態切替
$(&quot;.tab&quot;).attr(&quot;aria-selected&quot;, &quot;false&quot;);
$(&quot;.tab.active&quot;).attr(&quot;aria-selected&quot;, &quot;true&quot;);

複数要素への一括操作

.attr(name, value)該当する全要素に適用されます。

// すべての img に loading=&quot;lazy&quot; を付与
$(&quot;img&quot;).attr(&quot;loading&quot;, &quot;lazy&quot;);

// 全ての外部リンクに rel=&quot;noopener&quot;
$('a[href^=&quot;http&quot;]').attr(&quot;rel&quot;, &quot;noopener noreferrer&quot;);

関数形式での個別計算

各要素ごとに異なる値を設定したい場合、関数を渡せます。第1引数はインデックス、第2引数は現在値です。

// 各画像の alt にインデックス番号を入れる
$(&quot;img.gallery&quot;).attr(&quot;alt&quot;, function (index, currentAlt) {
    return (currentAlt || &quot;image&quot;) + &quot; #&quot; + (index + 1);
});

// 既存 href にクエリパラメータを追加
$(&quot;a.tracked&quot;).attr(&quot;href&quot;, function (index, href) {
    if (!href) return href;
    const sep = href.includes(&quot;?&quot;) ? &quot;&amp;&quot; : &quot;?&quot;;
    return href + sep + &quot;utm_source=newsletter&quot;;
});

カスタム data-* 属性での状態管理

UI の状態を data-* 属性で持たせ、CSS のスタイル切替に使うパターンもよく使われます。

// HTML: <button id="theme" data-mode="light">切替</button>
// CSS:  button[data-mode="dark"] { background:#222; color:#fff; }

$("#theme").on("click", function () {
    const current = $(this).attr("data-mode");
    const next = current === "light" ? "dark" : "light";
    $(this).attr("data-mode", next);
});

FAQ

Q: jQuery 1.6 未満では?
A: 旧バージョンには .prop() がなく .attr(&quot;checked&quot;, true) で動作していました。1.6 以降は明確に分離されたため、現代の jQuery では .prop() を使うのが正解です。

Q: jQuery を使わずに同じことをしたい
A: ネイティブ DOM API の getAttribute / setAttribute / removeAttribute で同等のことができます。

Q: 属性名を変数で渡したい
A: $(sel).attr(name, value) の name に変数を渡すだけです。例: const k = &quot;data-id&quot;; $(sel).attr(k, 42);

Q: .attr() で SVG 属性も操作できる?
A: 可能です。cx / cy / fill など SVG 固有の属性も同じ書き方で取得・設定できます。

関連

  • .prop() — 動的プロパティの取得/設定
  • .removeAttr() — 属性削除
  • .data() — data-* 属性の高機能アクセサ
  • .addClass() / .removeClass() — class 属性専用
  • .val() — フォーム要素の value 専用
  • .css() — style 属性の中身を扱う