回り道ですが可能です!
このデモを確認してください: http://jsfiddle.net/BE47z/1/
ロジックは次のようになります。
:before
CSS でまたは定義を持つすべてのクラスを列挙します。これは、オブジェクト:after
をトラバースすることによって行われます (必要に応じて、コードを catch などのみに変更できます) 。document.styleSheets
:before
:after
- クラスリストを取得したら、次の部分を削除します: CSS でのその名前。例:は次の
.a:before
ようになります。.a
- これらのクラスに一致するすべての要素を取得できるようになりました
コード
HTML
<div class="element classWithoutBefore">No :before</div>
<div class="element classWithBefore">Has :before</div>
<div class="element class2WithBefore">Has :before</div>
<div class="element class2WithoutBefore">No :before</div>
CSS
.classWithoutBefore {
}
.class2WithoutBefore {
}
.classWithBefore:before {
}
.class2WithBefore:before {
}
.a:before, .b:before {
}
JS
var sheets = document.styleSheets;
var pseudoClasses = [], i = 0, j = 0;
for (i=0; i<sheets.length; i++) {
try {
var rules = sheets[i].cssRules;
for (j=0; j<rules.length; j++) {
if(rules[j].selectorText.indexOf(':before') != -1 || rules[j].selectorText.indexOf(':after') != -1) {
pseudoClasses.push(rules[j].selectorText);
}
}
}
catch(ex) { // will throw security exception for style sheets loaded from external domains
}
}
var classes = [];
if(pseudoClasses.length > 0) {
pseudoClasses = pseudoClasses.join(',').split(','); // quick & dirty way to seperate individual class names
for (i=0; i<pseudoClasses.length; i++) { // remove all class names without a : in it
var colonPos = pseudoClasses[i].indexOf(':');
if(colonPos != -1) {
classes.push(pseudoClasses[i].substring(0, colonPos));
}
}
}
// Elements with the classes in the 'classes' array have a :before or :after defined