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延时重复执行函数 lLoopRun.js
Jun 29 Javascript
一个可以兼容IE FF的加为首页与加入收藏实现代码
Nov 02 Javascript
js 判断checkbox是否选中的实现代码
Nov 23 Javascript
JS脚本defer的作用示例介绍
Jan 02 Javascript
window.onload使用指南
Sep 13 Javascript
javascript html实现网页版日历代码
Mar 08 Javascript
JavaScript数组复制详解
Feb 02 Javascript
js获取隐藏元素的宽高
Feb 24 Javascript
用ES6的class模仿Vue写一个双向绑定的示例代码
Apr 20 Javascript
Vue中JS动画与Velocity.js的结合使用
Feb 13 Javascript
微信小程序实现的一键拨号功能示例
Apr 24 Javascript
vue 实现搜索的结果页面支持全选与取消全选功能
May 10 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
详解php比较操作符的安全问题
2015/12/03 PHP
PHP函数引用返回的实例详解
2016/09/11 PHP
PHP实现求两个字符串最长公共子串的方法示例
2017/11/17 PHP
javascript 学习笔记(一)DOM基本操作
2011/04/08 Javascript
js判断滚动条是否已到页面最底部或顶部实例
2014/11/20 Javascript
jQuery实现单击和鼠标感应事件
2015/02/01 Javascript
javascript Array 数组常用方法
2015/04/05 Javascript
jQuery 如何给Carousel插件添加新的功能
2016/04/18 Javascript
微信小程序 选择器(时间,日期,地区)实例详解
2016/11/16 Javascript
jquery实现的table排序功能示例
2017/03/10 Javascript
Jquery把获取到的input值转换成json
2017/05/15 jQuery
JS实现预加载视频音频/视频获取截图(返回canvas截图)
2017/10/09 Javascript
vue将时间戳转换成自定义时间格式的方法
2018/03/02 Javascript
Layui数据表格之获取表格中所有的数据方法
2018/08/20 Javascript
一些手写JavaScript常用的函数汇总
2019/04/16 Javascript
Vue实现购物车的全选、单选、显示商品价格代码实例
2019/05/06 Javascript
Django中URL视图函数的一些高级概念介绍
2015/07/20 Python
Python复数属性和方法运算操作示例
2017/07/21 Python
对sklearn的使用之数据集的拆分与训练详解(python3.6)
2018/12/14 Python
解决python2 绘图title,xlabel,ylabel出现中文乱码的问题
2019/01/29 Python
Python脚本实现监听服务器的思路代码详解
2020/05/28 Python
深入浅析Python代码规范性检测
2020/07/31 Python
Python描述数据结构学习之哈夫曼树篇
2020/09/07 Python
详解python 支持向量机(SVM)算法
2020/09/18 Python
Python用户自定义异常的实现
2020/12/25 Python
使用python实现学生信息管理系统
2021/02/25 Python
教师岗位聘任书范文
2014/03/29 职场文书
大专学生求职自荐信
2014/07/06 职场文书
青年教师师德演讲稿
2014/08/26 职场文书
工程质量保证书
2015/05/09 职场文书
班主任开场白
2015/06/01 职场文书
投诉信范文
2015/07/02 职场文书
辩论赛新闻稿
2015/07/17 职场文书
企业法律事务工作总结
2015/08/11 职场文书
古诗之爱国古诗5首
2019/09/20 职场文书
创业计划书之网络外卖
2019/10/31 职场文书