Plusieurs feuilles de style – désactivez uniquement le groupe spécifique

J'ai une feuille de style principale avec deux groupes de feuilles de style alternatifs. Les deux groupes de feuilles de style alternatifs sont tous désactivés lorsqu'un est activé. La feuille de style principale est persistante et n'est jamais désactivée. Les feuilles de style alternatives ne contiennent que des éléments différents extraits de la feuille de style principale et ne sont mis en œuvre que lorsqu'ils sont activés. J'ai ajouté la classe avec les deux groupes pour voir si je pouvais activer l'activation d'un dans un groupe et désactiver les autres dans ce groupe, mais pas dans l'autre groupe. J'ai essayé beaucoup d'autres commutateurs styler et des méthodes jquery et je ne suis nulle part, c'est le meilleur résultat. Je suis vraiment nouveau pour tout cela et j'apprécierais toute aide.

<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <link href="/files/theme/mainstyle.css" rel="stylesheet "type="text/css"/> <link href="/files/theme/body1.css" rel="stylesheet" type="text/css" class="group1" title="body1" /> <link href="/files/theme/body2.css" rel="stylesheet" type="text/css" class="group1" title="body2" /> <link href="/files/theme/body3.css" rel="stylesheet" type="text/css" class="group1" title="body3" /> <link href="/files/theme/para1.css" rel="stylesheet" type="text/css" class="group2" title="para1" /> <link href="/files/theme/para2.css" rel="stylesheet" type="text/css" class="group2" title="para2" /> <link href="/files/theme/para3.css" rel="stylesheet" type="text/css" class="group2" title="para3" /> <script type="text/javascript" src="/files/theme/styleswitcher.js"></script> </head> 

Le fichier styleswitcher.js de http://www.alistapart.com/articles/alternate/

 function setActiveStyleSheet(title) { var i, a, main; for(i=0; (a = document.getElementsByTagName("link")[i]); i++) { if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")) { a.disabled = true; if(a.getAttribute("title") == title) a.disabled = false; } } } function getActiveStyleSheet() { var i, a; for(i=0; (a = document.getElementsByTagName("link")[i]); i++) { if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title") && !a.disabled) return a.getAttribute("title"); } return null; } function getPreferredStyleSheet() { var i, a; for(i=0; (a = document.getElementsByTagName("link")[i]); i++) { if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("rel").indexOf("alt") == -1 && a.getAttribute("title") ) return a.getAttribute("title"); } return null; } function createCookie(name,value,days) { if (days) { var date = new Date(); date.setTime(date.getTime()+(days*24*60*60*1000)); var expires = "; expires="+date.toGMTString(); } else expires = ""; document.cookie = name+"="+value+expires+"; path=/"; } function readCookie(name) { var nameEQ = name + "="; var ca = document.cookie.split(';'); for(var i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1,c.length); if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); } return null; } window.onload = function(e) { var cookie = readCookie("style"); var title = cookie ? cookie : getPreferredStyleSheet(); setActiveStyleSheet(title); } window.onunload = function(e) { var title = getActiveStyleSheet(); createCookie("style", title, 365); } var cookie = readCookie("style"); var title = cookie ? cookie : getPreferredStyleSheet(); setActiveStyleSheet(title); 

Sélecteur de feuilles de style brut

 <ul> <li> <a href="#" onclick="setActiveStyleSheet('body1'); return false;">body1</a></li> <li> <a href="#" onclick="setActiveStyleSheet('body2'); return false;">body1</a></li> <li> <a href="#" onclick="setActiveStyleSheet('body3'); return false;">body3</a></li> <li> <a href="#" onclick="setActiveStyleSheet('para1'); return false;">para1</a></li> <li> <a href="#" onclick="setActiveStyleSheet('para2'); return false;">para2</a></li> <li> <a href="#" onclick="setActiveStyleSheet('para3'); return false;">para3</a></li> </ul> 

S'il est possible d'y parvenir d'une autre manière que l'on considère la manière correcte, j'aimerais être pointé dans cette direction pour le comprendre. Sinon, j'aimerais toujours savoir si cela est possible avec ce que j'ai, apprendre leçon, je suppose. Merci.

METTRE À JOUR
Il semble que vous souhaitiez avoir 1 feuille de style active de chaque groupe à la fois. Et puisque vous utilisez des cookies, vous voudrez pouvoir enregistrer chaque feuille de style par groupe afin qu'un utilisateur ait tous ses paramètres corrects. Je n'ai pas compris la fonction de votre fonction getPreferredStyleSheet() , car elle renvoie simplement le premier <link> qui est une feuille de style. Si vous commencez avec certains liens déjà activés, il semble que vous n'avez pas besoin de cette fonction. J'ai pensé que lorsque vous créez votre cookie, vous pouvez simplement appeler getActiveStyleSheets() place, car il est prudent de supposer que lorsque la personne quitte la page, elle la configure comme elle l'aime.

Quoi qu'il en soit, j'ai modifié vos fonctions pour permettre la sélection de plusieurs feuilles de style à partir d'un cookie et pour enregistrer plusieurs feuilles de style pour être sauvegardées dans un cookie. Vous devrez mettre à jour vos appels parce que j'ai ajouté un s aux noms de fonctions.

JavaScript

 ​function setActiveStyleSheets(ids){ ids = ids.split(','); var i, j, l, link; for(i=0; (link = document.getElementById(ids[i])); i++){ for(j=0; (l = document.getElementsByTagName('link')[j]); j++){ if(l.hasAttribute('switch') && l.className.indexOf(link.className) !== -1) l.removeAttribute('href'); } link.href = link.getAttribute('switch'); } } function getActiveStyleSheets(){ var i, link, active = []; for(i=0; (link = document.getElementsByTagName('link')[i]); i++){ if(link.hasAttribute('switch') && link.href){ active.push(link.id); } } return active.join(','); } function createCookie(name,value,days) { if (days) { var date = new Date(); date.setTime(date.getTime()+(days*24*60*60*1000)); var expires = "; expires="+date.toGMTString(); } else expires = ""; document.cookie = name+"="+value+expires+"; path=/"; } function readCookie(name) { var nameEQ = name + "="; var i, c, ca = document.cookie.split(';'); for(i=0; (c = ca[i]); i++) { while (c.charAt(0)==' ') c = c.substring(1,c.length); if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); } return null; } window.onload = function(e) { var cookie = readCookie("style"); var title = cookie || getActiveStyleSheets(); setActiveStyleSheets(title); } window.onunload = function(e) { var title = getActiveStyleSheets(); createCookie("style", title, 365); } 

HTML

 <link href="/files/theme/body1.css" switch="/files/theme/body1.css" rel="stylesheet" type="text/css" class="group1" id="body1" /> <link switch="/files/theme/body2.css" rel="stylesheet" type="text/css" class="group1" id="body2" /> <link switch="/files/theme/body3.css" rel="stylesheet" type="text/css" class="group1" id="body3" /> <link href="/files/theme/para1.css" switch="/files/theme/para1.css" rel="stylesheet" type="text/css" class="group2" id="para1" /> <link switch="/files/theme/para2.css" rel="stylesheet" type="text/css" class="group2" id="para2" /> <link switch="/files/theme/para3.css" rel="stylesheet" type="text/css" class="group2" id="para3" /> ... <ul> <li> <a href="#" onclick="setActiveStyleSheets('body1'); return false;">body1</a> </li> <li> <a href="#" onclick="setActiveStyleSheets('body2'); return false;">body2</a> </li> <li> <a href="#" onclick="setActiveStyleSheets('body3'); return false;">body3</a> </li> <li> <a href="#" onclick="setActiveStyleSheets('para1'); return false;">para1</a> </li> <li> <a href="#" onclick="setActiveStyleSheets('para2'); return false;">para2</a> </li> <li> <a href="#" onclick="setActiveStyleSheets('para3'); return false;">para3</a> </li> </ul> 

Voici une solution rapide pour vous. Je n'ai pas passé de temps à optimiser ou à penser à une autre solution car il est en retard, donc il y a probablement une meilleure façon de le faire, mais il est en retard et je pensais au moins vous donner quelque chose.

HTML – Modifiez vos attributs href pour switch et vos attributs de title sur id

 <link switch="/files/theme/body1.css" rel="stylesheet" type="text/css" class="group1" id="body1" /> <link switch="/files/theme/body2.css" rel="stylesheet" type="text/css" class="group1" id="body2" /> <link switch="/files/theme/body3.css" rel="stylesheet" type="text/css" class="group1" id="body3" /> <link switch="/files/theme/para1.css" rel="stylesheet" type="text/css" class="group2" id="para1" /> <link switch="/files/theme/para2.css" rel="stylesheet" type="text/css" class="group2" id="para2" /> <link switch="/files/theme/para3.css" rel="stylesheet" type="text/css" class="group2" id="para3" /> 

JavaScript – Modifiez la fonction setActiveStyleSheet à ceci:

 function setActiveStyleSheet(id){ var i, l; var link = document.getElementById(id); for(i=0; (l = document.getElementsByTagName('link')[i]); i++){ if(l.hasAttribute('switch') /*&& l.className.indexOf(link.className) !== -1*/) l.removeAttribute('href'); } link.href = link.getAttribute('switch'); } 

Si le <link> n'est pas indiqué sur la feuille de style, vous ne pouvez pas avoir le style. Lorsque vous cliquez sur un élément <li> , il passe l'ID à cette fonction et cette fonction vérifie si le <link> a l'attribut switch et s'il le fait, il s'assure que l'attribut href est défini à rien. Maintenant, je ne pouvais pas tout à fait dire si vous vouliez autoriser un <link> de chaque classe à être activé. Si vous le faites, supprimez simplement le /* */ de la deuxième partie de l'instruction if. Sinon, vous pouvez simplement supprimer cette partie. Quoi qu'il en soit, après tous les liens, les attributs href sont supprimés, le <link> avec l'identifiant correspondant a son attribut href défini sur son attribut de switch . Donc, il est actif alors que tous les autres ne le sont pas.

Comme je l'ai dit, je suis sûr qu'il y a une meilleure façon de le faire, mais c'était facile, il est tard et je vais au lit. J'espère que cela t'aides.