id と className は、要素の id 属性と class 属性に直接アクセスするプロパティです。classList が登場する前は className が主流でした。
id プロパティ
要素の id を取得・設定します。
<div id="container">コンテナ</div>
const element = document.getElementById('container'); // 取得 console.log(element.id); // "container" // 設定 element.id = 'new-container';
className プロパティ
要素の class 属性を文字列として取得・設定します。
<div class="box active large">ボックス</div>
const box = document.querySelector('.box'); // 取得(スペース区切りの文字列) console.log(box.className); // "box active large" // 設定(全体を置き換え) box.className = 'new-class'; // 追加するなら文字列連結 box.className += ' another-class';
className の注意点
className は文字列全体を操作するので、うっかり上書きしてしまう危険があります。
const element = document.querySelector('.item'); console.log(element.className); // "item primary" // 間違い:既存のクラスが消える element.className = 'active'; console.log(element.className); // "active"(item と primary が消えた) // 正解:追加するなら += element.className = 'item primary'; element.className += ' active'; console.log(element.className); // "item primary active"
classList との比較
className
文字列として全体を操作。古いブラウザでも使える
classList
add/remove/toggle で個別に操作。安全で便利
className を使うケース
一気に複数のクラスを設定したい場合は、className のほうがシンプルなこともあります。
// className なら1行 element.className = 'card active highlight'; // classList だと複数回 element.className = ''; element.classList.add('card', 'active', 'highlight');
実際に動かしてみよう
HTML
CSS
JavaScript
<div id="target" class="box">ターゲット</div> <button id="setBtn">className で設定</button> <button id="addBtn">className で追加</button> <p>現在のクラス: <span id="display">box</span></p>
.box { padding: 20px; background: #eee; margin-bottom: 10px; } .active { background: #4caf50; color: white; } .large { font-size: 24px; }
const target = document.getElementById('target'); const display = document.getElementById('display'); document.getElementById('setBtn').addEventListener('click', () => { target.className = 'box active'; display.textContent = target.className; }); document.getElementById('addBtn').addEventListener('click', () => { target.className += ' large'; display.textContent = target.className; });
基本的には classList を使うのがおすすめですが、className も知っておくと、既存コードを読むときや、全体を一気に設定したいときに役立ちます。