[JavaScript] 不正なセレクタをエスケープする際の対処法2019/06/03JavaScript98CSS66目次セレクタとして不正な文字まず数値から始まるセレクタは使用できない。かつ、下記の文字列は先頭に限らず使用することは出来ない。~ ! @ $ % ^ & * ( ) _ + - = , . / ' ; : " ? > < [ ] { } | ` # これらの文字は制御コードに置き換える事で 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がオープンソースで提供されているので使うと良い。