[JavaScript] 不正セレクタエスケープする対処

2 min read

セレクタとして不正な文字

まず数値から始まるセレクタは使用できない。
かつ、下記の文字列は先頭に限らず使用することは出来ない。

~ ! @ $ % ^ & * ( ) _ + - = , . / ' ; : " ? > < [ ] { } | ` #

これらの文字は制御コードに置き換える事で valid なセレクタとして使用することも可能だが、簡単にバックスラッシュでエスケープすることもできる。

<span id="~">text</span>
#\~ {
  color: red;
}
document.querySelector("~");

JavaScript 上での取扱

対象のセレクタの invalid な文字をエスケープすれば良い。
正規表現で置き換えていくのもアリだが、正規表現の妥当性をチェックするのが大変である。

CSS.escape()

CSS.escape()を利用する。

CSS.escape(".foo#bar")        // "\.foo\#bar"
CSS.escape("()[]{}")          // "\(\)\[\]\{\}"
CSS.escape('--a')             // "--a"
CSS.escape(0)                 // "\30 ", the Unicode code point of '0' is 30
CSS.escape('\0')              // "\ufffd", the Unicode REPLACEMENT CHARACTER

参考: CSS.escape() - Web APIs | MDN

引数にCSSOMStringを渡すと、エスケープ後のセレクタ文字列を返却してくれる。


ただしCSSメソッドは、IE などのレガシーブラウザで使用できないので注意。
レガシーブラウザ対応が必要であれば、polyfillがオープンソースで提供されているので使うと良い。

このページをシェアする

関連タグ

関連記事

[CSS] カスケードレイヤー(@layer)とITCSSの概念を組み合わせた設計を考える

カスケードレイヤーとは / ITCSS のレイヤー / ITCSS のレイヤーをカスケードレイヤーに落とし込む / 参考

[CSS設計] ITCSSとは

TL;DR / CSS の問題 / ITCSS / 参考

[CSS設計] ITCSSをプロダクトに利用した所感

CSS の問題点 / CSS 設計 / ITCSS とは / ITCSS のメリット / おわり / 参考

Boolean型の変数に適した命名規則

背景 / プレフィックス / どのような条件なのか分かりやすくする / 否定形を避ける / 同じ意味の単語を避ける / プロジェクトの命名規則やコーディング規約に従う / Linter で矯正する

CSS in JSとは何か

想定読者 / そもそも JS フレームワーク(React、Vue.js)を採用する理由とは何か / 「命令的 UI」 と 「宣言的 UI」 / 「命令的 UI」 VS 「宣言的 UI」 / CSS in JS とは / CSS in JS ライブラリ / Emotion の使い方 / 利用するメリット / 利用するデメ

[CSS] 究極のIE対策

条件付きコメント / メディアクエリを利用して IE10〜IE11 に対応する