2017-08-25 8 views
0

Je veux avoir un meilleur contrôle de variable CSS via JavaScript, qui nécessite de fonctionner sur un objet CSSRule.Comment obtenir CSSStyleSheet à partir d'un HTMLLinkElement

Voici le code JavaScript de 2 façons de l'obtenir:

// get from the CSSStyleSheet of a <style> element 
document.getElementsByTag('style')[0].sheet.rules; 
// direct way 
document.styleSheets[0].rules; 

J'ai écrit le CSS dans un fichier, donc je dois le faire à travers un élément.

Cependant, j'ai trouvé que vous ne pouvez obtenir un objet CSSStyleSheet avec une CSS CSS nulle à partir d'éléments.

link_ele.sheet.rules; // null 

Je suis st (f) rogné.

Console output

// BTW j'ai essayé this method, mais il est tout simplement pas Workin' (retourne un tableau vide), thx pour Tellin' tho @SamuilPetrov

+1

Itérer à travers la collection 'document.styleSheets' jusqu'à ce que vous trouviez un avec le' propriété href' appropriée? – Phylogenesis

+0

@Phylogenesis nope, ne fonctionne pas, retourne toujours un CSSStyleSheet avec une règle CSS nulle. X- | –

+0

Alors inversez-le et extrayez les règles en levant les yeux dans toute la feuille de style (je doute que les performances soient beaucoup plus lentes, donc ça va): https://stackoverflow.com/a/22638396/4108884 ou https: // stackoverflow .com/a/2953122/4108884 –

Répondre

0

J'ai trouvé la solution pour cette situation: Vous pouvez simplement remplacer la feuille de style par un élément créé.

let style = { }; 
let setCSSVariable = (name, value) => style.rules.setProperty('--' + name, value); 
document.addEventListener('DOMContentLoaded', function() { 
    style.element = document.createElement('style'); 
    document.head.appendChild(style.element); 

    style.sheet = style.element.sheet; 
    style.sheet.insertRule(/* CSS selector */); 

    style.rules = style.sheet.cssRules[0].style; 
});