2013-02-14 2 views
0

J'ai un document avec des éléments comme celui-ci:Comment obtenir des classes CSS disponibles pour un objet?

<ul class="fx-startpoint"> 
    <li>some text</li> 
    <li>other text</li> 
</ul> 

Au début, je besoin de regarder avec jQuery pour tous les éléments ayant une classe commençant par fx-. Je pense que c'est possible avec $("class=^fx-") mais je dois regarder s'il y a d'autres classes pour cet élément disponible dans un fichier CSS commençant par fx- mais elles ne sont pas actuellement définies pour l'élément ou les sous-éléments (comme les li). Comment est-ce que je pourrais faire ceci avec jQuery/jQueryUI?

+1

Vous avez réellement besoin de ['$ ('class^= fx-')'] (http://api.jquery.com/attribute-starts-with-selector/). jQuery ne peut pas rechercher si les classes sont définies dans votre CSS, malheureusement, mais vous pouvez facilement tester si une classe donnée existe dans le DOM en cochant 'if ($ ('. some-class'). longueur> 0)' – Blazemonger

+2

Pour ce faire, vous avez besoin d'un analyseur CSS écrit en JavaScript, et tout configurer ne prendra pas cinq minutes. Êtes-vous sûr que votre but ultime ne peut pas être atteint d'une autre manière? – Jon

+0

Merci pour votre réponse rapide, ... mais je pense que c'est possible ... j'ai trouvé quelque chose comme ça mais ce n'est pas enfin ce dont j'ai besoin ... http://jsfiddle.net/markcoleman/TKHpV/5/ – HR123

Répondre

0

Une fourchette du jsFiddle que l'OP affiché: http://jsfiddle.net/mori57/kgqXY/

function GetAppliedCssRules($element) { 
    var appliedRules = []; 
    for (var x = 0; x < document.styleSheets.length; x++) { 
     var rules = document.styleSheets[x].cssRules; 
     for (var i = 0; i < rules.length; i++) { 
      var txt = rules[i].selectorText; 
      if (txt.indexOf('.fx-') > -1) { 
       appliedRules.push(txt); 
      } 
     } 
    } 
    return appliedRules; 
} 

Plus précisément, vous êtes juste changer la recherche de chercher .fx-, qui peut être fait avec un simple .indexOf. Regex est également possible (comme plusieurs autres affiches mentionnées).

+0

Cela rompt avec les changements les plus * triviaux * aux sélecteurs, tels que l'exemple que j'ai donné dans ma réponse, '.foo, .fx-bar {...}'. Sans parler de 'div.fx-foo' et autres. –

+0

Non, 'div.fx-foo' fonctionne. Voir le jsFiddle complet ... Je mets une telle règle dans le CSS (recherchez 'a.fx-doop'). Si je faisais une boucle en regardant le balisage avec ce format, vous avez tout à fait raison ... cela échouerait, mais la prémisse ici semble être l'analyse des règles CSS. –

+0

Comme vous pouvez le voir dans cette version, il fonctionne même avec des sélecteurs mixtes comme 'h, .fx-Doop, .blah-blah': http://jsfiddle.net/mori57/kgqXY/7/ –

-2
var classList =$('#divId').attr('class').split(/\s+/); 

classList retourne un tableau de classes: Ensuite, vous pouvez itérer et trouver celui que vous voulez par.

var classList =$('#divId').attr('class').split(/\s+/); 
$.each(classList, function(index, item){ 
if (item === 'someClass') { 
    //do something 
} 
}); 
+1

Il ne veut pas connaître les classes d'un élément particulier, il veut trouver toutes les classes possibles dans sa feuille de style commençant par 'fx-'. – Barmar

1

Le sélecteur class=^fx- trouverait que des éléments comme celui-ci:

<div class="fx-foo bar">...</div> 

... et pas ceux comme ceci:

<div class="bar fx-foo">...</div> 

... parce que le fx- ne semble pas au commençant de l'attribut. Si vous avez le deuxième formulaire, malheureusement votre seule option est de regarder tous les éléments et de filtrer ceux qui n'ont pas de classe fx-xxx dessus. Il n'y a actuellement aucun sélecteur pour "contient un mot commençant par". Comme pour trouver toutes les règles définissant un sélecteur de classe à partir de fx-, vous pouvez le faire. document.styleSheets vous donne une liste de toutes les feuilles de style appliquées au document en cours. Chaque objet de la feuille de style a une liste des règles qui lui sont définies (ce sera cssRules ou seulement rules selon l'âge et la marque du navigateur). Chaque règle (CSSStyleRule object) contient des informations sur la règle, y compris selectorText, ce qui vous donne le sélecteur complet de la règle. Vous pouvez donc analyser ce sélecteur pour voir s'il définit une règle de classe commençant par fx-. Assurez-vous de laisser des virgules en regardant le sélecteur (par exemple, .foo, .fx-bar { ... }), et méfiez-vous que les chaînes du sélecteur d'analyse, bien que pas dur, est non-trivial.

+0

salut merci, je pense que c'est quelque chose comme ce violon ... http://jsfiddle.net/markcoleman/TKHpV/5/ mais je ne sais pas comment le changer qu'il ne trouvera que fx- .. . modes. pourriez-vous m'aider s'il vous plaît pour le changer? merci – HR123

Questions connexes