2014-05-09 3 views
0

Ceci est une version simplifiée de la façon de modifier dynamiquement une règle de sélection:changement sélecteur de règle de stylesheet dynamiquement

http://jsfiddle.net/vsync/SaQy6/

Pour un style en ligne de donneur:

<style type='text/css' id='myStyle'> 
    ul > li{} 
</style> 

essayer changer le sélecteur

Ni selectorText ou cssText de travailler pour définir le sélecteur dynbamiquement.

Ensuite, je lis sur MDN que selectorText est en lecture seule, et je ne sais pas comment changer le sélecteur sans avoir à supprimer tout l'élément de style et en créer un nouveau. Il est possible de supprimer complètement la règle et d'insérer une nouvelle règle, mais elle est très non standard. Des idées?

Répondre

1

Démo - http://jsfiddle.net/vsync/SaQy6/6/

façon cross-browser:

var styleTag = document.querySelector('#myStyle'); 
// the style sheet in the style tag 
var sheet = styleTag.sheet ? styleTag.sheet : styleTag.styleSheet, 
    rules = sheet.cssRules ? sheet.cssRules : sheet.rules; 

if(sheet.cssRules){ 
    sheet.deleteRule(0); // deletes a rule at index 0 
    sheet.insertRule("ul > li:nth-child(2n){background:red}", 0); 
} 
else{ 
    sheet.removeRule(0); // deletes a rule at index 0 
    sheet.addRule("ul > li:nth-child(2n)", 'background:red', 0); 
} 
+0

Cela fonctionne bien s'il n'y a qu'une seule règle de style, mais comment est-ce commun? En général, il est difficile de savoir quel index est la règle, s'il y en a plusieurs qui devraient être dynamiques. Les règles ne sont pas nommées par défaut et il ne semble pas y avoir de possibilité de les nommer. Le seul schéma de nommage que je vois est de faire une feuille de style séparée pour chaque règle dynamique, avec un id, et cette technique fonctionne bien. – Victoria

+0

@Victoria - vous pouvez donc simplement les supprimer et les réinsérer. si vous avez 10 règles, il suffit de boucler et de supprimer 10 fois ... c'est la seule solution à laquelle je peux penser maintenant – vsync

+0

oui, si toutes les 10 règles sont connues, et dans un bloc de style connu, cela fonctionnera. Cependant, le code modulaire peut ne pas connaître les 10 règles. Ainsi, donner à chaque règle un nom dans une balise

Questions connexes