根据用户选择用JS切换生效的CSS文件实现网站网页换肤

本文介绍了一种通过切换CSS文件实现网页换肤的技术方案。重点讲解了利用LINK对象的disabled属性来控制不同样式表的启用与禁用,以及如何通过用户选择来应用不同的样式。此外还提供了一段示例代码,用于保存用户选择的样式到cookie中,以便下次访问时能够保持用户的偏好设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说明:关于实现这个用途的文章,一般只是直接给了代码,没有对关键知识点的必要解释。本文侧重讲解原理和关键点,为方便网友使用,在后面附加了具体的代码,可实现将选择的风格名称存到cookie里去。

正文:

  想要进行网页的换肤,如果用普通的获取各个显示对象然后更改对象的各项STYLE属性或者只是CLASS属性,缺点是十分明显的:

  1、涉及对大量的网页内对象读写,并可能操作多项STYLE属性,JS代码量多。

  2、STYLE代码分散,缺乏组织,更改维护麻烦。

  那么更好的方法是什么呢? 就是直接对LINK对象进行切换设置。大家知道,通过LINK可以引用外部的CSS文件,使之对当前页面内容生效。一般语法是这样的:

  <link type="text/css" rel="stylesheet" href="http://theforever.myid/theforever.css" />

  假设网页提供了N种风格供切换,就可以用N条这样的语句,把CSS文件引进来。需要注意的是,除当前生效CSS以外的LINK标签应该这样写:

  <link type="text/css" rel="alternate stylesheet" href="http://theforever.myid/theforever.css" />

  alternate的意思是“供替换的”,这样浏览器就不会根据这套暂时不想生效的CSS对页面显示进行实际的设置。

  那么如何来切换当前生效的CSS文件,产生换肤效果呢? 就是利用LINK对象的disabled属性。当disabled属性为真时,该LINK对象失效,当disabled属性为假时,则该LINK对象生效。

  这样一来就知道,有针对地设置相应的LINK对象的disabled属性,就可以实现切换了。

  如何将用户的选择和LINK对象一一对应起来呢? 这个方法就多了:

  1.可以给LINK加不同的ID属性,然后document.getElementsById('用户选择的LINK's ID')就得到了指定的LINK。

  2.可以给LINK加不同的TITLE属性,然后遍历所有document.getElementsByTagName('link'),取每个LINK对象的TITLE进行对比。

  3.可以给LINK加不同的自定义属性,然后同上。

  至于如何取得用户所选择的显示风格(或说皮肤)的名称,这个方式就更多了,也很简单,就不列出某个固定的方式了。

  原本不想引用罗列具体的代码,但为了方便一些懒惰成性的朋友,还是附加了一套现成的代码,可实现将用户选择的界面风格名称存到cookie里去,下次打开网页就会看到上次更改的界面风格:

unction 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);

作者:赵亮(theforever,碧海情天,on youkuaiyun.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值