JQuery 网站换肤功能实现代码


Posted in Javascript onNovember 02, 2009

从那以后,我找到了很多可以让访客通过鼠标点击某个地方切换样式表的方法。但最近我要写一篇如何 使用jQuery编写简单代码实现它的教程。
我将向你们逐步解说整个的过程,不仅仅因为要展示jQuery代码的简介,同时也要揭示jQuery库中的若干高级特性。
首先,代码

$(document).ready(function() { 
$('.styleswitch').click(function() 
{ 
switchStylestyle(this.getAttribute("rel")); 
return false; 
}); 
var c = readCookie('style'); 
if (c) switchStylestyle(c); 
}); 
function switchStylestyle(styleName) 
{ 
$('link[@rel*=style][title]').each(function(i) 
{ 
this.disabled = true; 
if (this.getAttribute('title') == styleName) this.disabled = false; 
}); 
createCookie('style', styleName, 365); 
}

其他这里没有提到的部分是你将在后面看到的创建和读取cookie的函数。
熟悉的开篇

$(document).ready(function(){ $('.styleswitch').click(function()……告诉jQuery“以最快的速度查找所有包含对象名‘styleswitch'的元素,并在他们被鼠标点击时执行一个函数”。
看起来不错。当鼠标点击预先指定的元素时,switchStylestyle函数将被调用。从现在开始是重点。
这句话什么意思?
第一次看到这句代码的时候我的脑子有些卡壳:
$('link[@rel*=style]').each(function(i) {
在互联网上搜索了一下后我空手而归。最后不得不找到了jQuery的作者John Resig,向他咨询。
他直接给了我一个jQuery网站的页面地址,里面讲解了若干jQuery提供的高级特性(xpath),可以用来查找并操作页面中的若干元素。
如果你看过这些东西你就能明白上面那句神秘的代码的含义是告诉jQuery“查找所有带rel属性并且属性值字符串中包含‘style'的link链接元素”。
让我们看看如何编写包含一个主样式表,两个备用样式表的页面:
<link rel="stylesheet" type="text/css" href="styles1.css" title="styles1" media="screen" /><link rel="alternate stylesheet" type="text/css" href="styles2.css" title="styles2" media="screen" /><link rel="alternate stylesheet" type="text/css" href="styles3.css" title="styles3" media="screen" />我们可以看到所有样式表都含有一个包含‘style'字串的rel属性。
所以结果一目了然,jQuery轻松定位了页面中的样式表链接。
下一步?
each()函数将遍历所有这些样式表链接,并执行下一行中的代码:
this.disabled = true;if (this.getAttribute('title') == styleName) this.disabled = false;“首先禁用所有的样式表链接,然后开启任何title属性值与switchStylestyle函数传递过来的字串相同的样式表”
一把抓啊,不过很有效。
现在我们需要保证的是那些样式表存在并且有效。
完整代码和演示
既然 Kelvin Luck已经编写了这些代码,我就不在这里重复了。
DEMO
我相信Kelvin的灵感是从 这个网站那里得到的,我们正好可以看看使用其他工具实现这个功能是否要比jQuery更加复杂冗长。
完整的styleswitch.js

/** 
* Styleswitch stylesheet switcher built on jQuery 
* Under an Attribution, Share Alike License 
* By Kelvin Luck ( http://www.kelvinluck.com/ ) 
**/ 
(function($) 
{ 
$(document).ready(function() { 
$('.styleswitch').click(function() 
{ 
switchStylestyle(this.getAttribute("rel")); 
return false; 
}); 
var c = readCookie('style'); 
if (c) switchStylestyle(c); 
}); 
function switchStylestyle(styleName) 
{ 
$('link[@rel*=style][title]').each(function(i) 
{ 
this.disabled = true; 
if (this.getAttribute('title') == styleName) this.disabled = false; 
}); 
createCookie('style', styleName, 365); 
} 
})(jQuery); 
// cookie functions http://www.quirksmode.org/js/cookies.html 
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 var 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; 
} 
function eraseCookie(name) 
{ 
createCookie(name,"",-1); 
} 
// /cookie functions
Javascript 相关文章推荐
javascript编程起步(第五课)
Jan 10 Javascript
jquery实现的带缩略图的焦点图片切换(自动播放/响应鼠标动作)
Jan 23 Javascript
jQuery的Ajax的自动完成功能控件简要说明
Feb 22 Javascript
JavaScript排序算法之希尔排序的2个实例
Apr 04 Javascript
基于js实现投票的实例代码
Aug 04 Javascript
JS实现的新浪微博大厅文字内容滚动效果代码
Nov 05 Javascript
angular6的响应式表单的实现
Oct 10 Javascript
js实现黑白div块画空心的图形
Dec 13 Javascript
javascript的this关键字详解
May 20 Javascript
javascript实现异形滚动轮播
Nov 28 Javascript
JavaScript数组去重实现方法小结
Jan 17 Javascript
html实现随机点名器的示例代码
Apr 02 Javascript
Javascript结合css实现网页换肤功能
Nov 02 #Javascript
cnblogs csdn 代码运行框实现代码
Nov 02 #Javascript
键盘 keycode的值 javascript时触发事件时很有用的要素
Nov 02 #Javascript
js 函数的执行环境和作用域链的深入解析
Nov 01 #Javascript
提高网站性能之 如何对待JavaScript
Oct 31 #Javascript
JavaScript Sort 表格排序
Oct 31 #Javascript
DOM 脚本编程中的兄弟节点
Oct 31 #Javascript
You might like
二十行语句实现从Excel到mysql的转化
2006/10/09 PHP
php checkbox复选框值的获取与checkbox默认值输出方法
2010/05/15 PHP
php缓存技术详细总结
2013/08/07 PHP
PHP生成随机数的方法实例分析
2015/01/22 PHP
XAMPP升级PHP版本实现步骤解析
2020/09/04 PHP
CL vs ForZe BO5 第五场 2.13
2021/03/10 DOTA
javascript的函数
2007/01/31 Javascript
javascript hashtable实现代码
2009/10/13 Javascript
jquery原创弹出层折叠效果点击折叠弹出一个层
2014/03/12 Javascript
javascript 3d 逐侦产品展示(核心精简)
2014/03/26 Javascript
Javascript让DEDECMS告别手写Tag
2014/09/01 Javascript
Node.js中流(stream)的使用方法示例
2017/07/16 Javascript
JavaScrip关于创建常量的知识点
2017/12/07 Javascript
Angular 作用域scope的具体使用
2017/12/11 Javascript
inquirer.js一个用户与命令行交互的工具详解
2019/05/18 Javascript
vue+iview分页组件的封装
2020/11/17 Vue.js
[01:29:31]VP VS VG Supermajor小组赛胜者组第二轮 BO3第一场 6.2
2018/06/03 DOTA
Python类的多重继承问题深入分析
2014/11/09 Python
Python之父谈Python的未来形式
2016/07/01 Python
python进程管理工具supervisor的安装与使用教程
2017/09/05 Python
Python使用jsonpath-rw模块处理Json对象操作示例
2018/07/31 Python
Pytorch抽取网络层的Feature Map(Vgg)实例
2019/08/20 Python
python3爬虫中多线程的优势总结
2020/11/24 Python
html5教程画矩形代码分享
2013/12/04 HTML / CSS
Meli Melo官网:名媛们钟爱的英国奢侈手包品牌
2017/04/17 全球购物
德国2018年度最佳在线药房:Bodfeld Apotheke
2019/11/04 全球购物
Haggar官网:美国男装品牌
2020/02/16 全球购物
营销与策划个人求职信
2013/09/22 职场文书
财经学院自荐信范文
2014/02/02 职场文书
《望庐山瀑布》教学反思
2014/04/22 职场文书
综治维稳工作承诺书
2014/08/30 职场文书
辩论赛开场白大全(主持人+辩手)
2015/05/29 职场文书
中国合伙人观后感
2015/06/02 职场文书
跑出一片天观后感
2015/06/08 职场文书
js实现模拟购物商城案例
2021/05/18 Javascript
Python常用配置文件ini、json、yaml读写总结
2021/07/09 Python