
$は使えるようにする
最近は古いブラウザでもIE11を推奨環境にしてIE9は対象に含めないことが多いためjQueryを使用しないケースが増えてきている。
しかしjQueryを使用しないとid, class, タグなどの要素を$('#foo')のように簡潔に記述できなくなってしまうため、あらかじめjQueryの$のような使い方ができるよう関数を作成しておいたほうが便利だ。
$関数の作成方法
関数の引数の1文字目を取得して、1文字目が「#」の場合はdocument.getElementByIdを使用して、それ以外のclassやタグはdocument.querySelectorを使用するようにする。
処理速度を考慮するならgetElementsByClassNameを使用するなど細かく条件を分けたほうが良いが、通常のWebサイトであれば体感できるような差は発生しない。
const $ = function(e) {
const c = e[0];
const len = e.split(' ').length;
if (c === '#' && len === 1) {
return document.getElementById(e.slice(1));
} else {
return document.querySelector(e);
}
}
上記の記述があれば下記のように$('#foo')や$('.bar')を使用することができる。
$('#foo').textContent = 'Hello';
// <h1 id="foo">Hello</h1>
$('.bar').textContent = 'world!';
// <h2 class="bar">world!</h2>
ただし、jQueryでは$('.bar')のように指定した場合、すべてのclassが対象になるが、querySelectorは最初の要素しか対象にならない。
そのためquerySelectorAllを使用した$$変数を別途作成する必要がある。
const $$ = function(e) {
return document.querySelectorAll(e);
};
$$('.bar').forEach(function(x) {
x.textContent = 'world!'
});
// <h2 class="bar">world!</h2>
// <h2 class="bar">world!</h2>



