ストーリー:CSSセレクタからクラス名を抽出する方法は?
私は現在、CSSセレクタロケータ内のブートストラップレイアウト指向と角技術的なクラスを使用することについて警告するESLintルールを構築しています。現在、私は文字列のアプローチで単純な部分文字列を使用しています:
for (var i = 0; i < prohibitedClasses.length; i++) {
if (node.arguments[0].value.indexOf(prohibitedClasses[i]) >= 0) {
context.report({
node: node,
message: 'Unexpected Bootstrap class "' + prohibitedClasses[i] + '" inside a CSS selector'
})
}
しかし、信頼性が証明されていません。たとえば、.col-sm-offset-11
CSSセレクタでエラーが2回発生すると、col-sm-offset-1
とcol-sm-offset-11
の両方が使用されます。複数の疑似クラスを使用して、より複雑なセレクタを簡単に破ることができます。
質問:
CSSセレクタからクラス名を抽出する最も信頼性の高いな方法は何ですか?ここで
は(改善すべき)私たちがカバーすべきサンプルテストリストです:私たちは~=
を残し^=
、$=
と*=
部分クラスのフィルタ値をスキップする必要が
.col-sm-push-4 // -> ['col-sm-push-4']
.myclass.col-lg-pull-8 // -> ['myclass', 'col-lg-pull-8']
[class*='col-md-offset-4'] // -> []
[class$=col-md-offset-11] // -> []
[class~="col-md-10"] .myclass // -> ['col-md-10', 'myclass']
.col-md-10,.col-md-11 // -> ['col-md-10', 'col-md-11']
注意(感謝コメントのために)。
私は@adeneoに同意します。興味深い質問ですが、* "このライブラリを使用する" *の答えはあまりありません。 「どのように」の問題に直接対処するものではありません。 –
@squint良い点。私は完全に "方法"に対処する答えに開いています。面白い問題と私がそれに近づいたやり方を分かち合いたい。ありがとう! – alecxe
クラス名が* =と$ =属性セレクタから抽出されるのは、これらの部分文字列を含むクラス名と要素が一致しないが、それらと等しくないと思わない限り、クラス名を抽出することは信頼できません。 – BoltClock