65 votes

Supprimer ou remplacer une feuille de style <link> ) avec JavaScript / jQuery

Comment puis-je faire ceci?

j'ai essayé

 $('link[title="mystyle"]').remove();
 

et bien que l'élément soit supprimé, les styles sont toujours appliqués à la page actuelle (à la fois dans Opera et dans Firefox).

Est-ce qu'il y a un autre moyen?

74voto

redsquare Points 47518

Pour répondre aux besoins, par exemple, vous devez définir la feuille de style à désactiver, car elle conserve les styles css en mémoire; ainsi, la suppression de l'élément ne fonctionnera pas. Cela risquerait également de provoquer un crash dans certains cas, si mes souvenirs sont exacts.

Cela fonctionne également pour le navigateur croisé.

par exemple

 document.styleSheets[0].disabled = true;
 

// donc dans votre cas en utilisant jquery try

 $('link[title=mystyle]')[0].disabled=true;
 

20voto

Alex Points 5018

J'ai réussi à le faire avec:

 $('link[title="mystyle"]').attr('disabled', 'disabled');
 

il semble que ce soit le seul moyen de supprimer les styles de la mémoire. alors j'ai ajouté:

 $('link[title="mystyle"]').remove();
 

supprimer l'élément aussi.

11voto

Rory O'Kane Points 4866

Pour désactiver votre feuille de style:

$('link[title="mystyle"]').prop('disabled', true);

Si vous ne voulez que de la feuille de style à appliquer à nouveau, vous pouvez alors .remove() il. Mais ne faites pas si vous voulez être en mesure de le réactiver plus tard.

Pour ré-activer la feuille de style, ce faire (tant que vous n'avez pas remove de la feuille de style de l'élément):

$('link[title="mystyle"]').prop('disabled', false);

Dans le code ci-dessus, il est important d'utiliser .prop, pas .attr. Si vous utilisez .attr, le code du travail dans certains navigateurs, mais pas Firefox. C'est parce que, selon le MDN, disabled est une propriété de l' HTMLLinkElement DOM objet, mais pas un attribut de l' link de l'élément HTML. À l'aide de disabled comme un attribut HTML est non standard.

8voto

Petr Hurtak Points 84

pas de solution jQuery

si vous connaissez la position d'index de votre fichier css dans le document

 document.styleSheets[0].disabled = true;
 

si vous voulez désactiver le style par nom, vous pouvez utiliser cette fonction

 /**
 * @param [string]  [styleName] [filename with suffix e.g. "style.css"]
 * @param [boolean] [disabled]  [true disables style]
 */
var disableStyle = function(styleName, disabled) {
    var styles = document.styleSheets;
    var href = "";
    for (var i = 0; i < styles.length; i++) {
        href = styles[i].href.split("/");
        href = href[href.length - 1];

        if (href === styleName) {
            styles[i].disabled = disabled;
            break;
        }
    }
};
 

remarque: assurez-vous que le nom du fichier de style est unique, vous n'avez donc pas "dir1 / style.css" et "dir2 / style.css". Dans ce cas, il ne désactiverait que le premier style.

4voto

Hasan Al-Natour Points 51

Pour supprimer une feuille de style:

 $('link[src="<path>"]').remove();
 

Pour remplacer une feuille de style:

 $('link[src="<path>"]').attr('src','<NEW_FILE_PATH>');
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X