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 相关文章推荐
js点击事件链接的问题解决
Apr 25 Javascript
js简单网速测试方法完整实例
Dec 15 Javascript
JavaScript检查子字符串是否在字符串中的方法
Feb 03 Javascript
Bootstrap树形菜单插件TreeView.js使用方法详解
Nov 01 Javascript
Jquery Easyui进度条组件Progress使用详解(8)
Mar 26 Javascript
node.js学习之断言assert的使用示例
Sep 28 Javascript
jQuery实现点击下拉框中的值累加到文本框中的方法示例
Oct 28 jQuery
微信小程序通过保存图片分享到朋友圈功能
May 24 Javascript
配置一个vue3.0项目的完整步骤
Apr 26 Javascript
Node.js API详解之 timer模块用法实例分析
May 07 Javascript
js实现mp3录音通过websocket实时传送+简易波形图效果
Jun 12 Javascript
Vertx基于EventBus发送接受自定义对象
Nov 16 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
DedeCms模板安装/制作概述
2007/03/11 PHP
php 网页游戏开发入门教程一(webgame+design)
2009/10/26 PHP
让CodeIgniter的ellipsize()支持中文截断的方法
2014/06/12 PHP
PHP轻量级数据库操作类Medoo增加、删除、修改、查询例子
2014/07/04 PHP
PHP面向对象程序设计之对象克隆clone和魔术方法__clone()用法分析
2019/06/12 PHP
再谈javascript面向对象编程
2012/03/18 Javascript
jQuery插件ajaxFileUpload实现异步上传文件效果
2015/04/14 Javascript
js实现的动画导航菜单效果代码
2015/09/10 Javascript
BootStrap下拉菜单和滚动监听插件实现代码
2016/09/26 Javascript
jQuery解析返回的xml和json方法详解
2017/01/05 Javascript
seajs实现强制刷新本地缓存的方法分析
2017/10/16 Javascript
javascript+css3开发打气球小游戏完整代码
2017/11/28 Javascript
详解多页应用 Webpack4 配置优化与踩坑记录
2018/10/16 Javascript
js实现适配移动端的拖动效果
2020/01/13 Javascript
javascript设计模式 ? 原型模式原理与应用实例分析
2020/04/10 Javascript
小程序开发之模态框组件封装
2020/04/23 Javascript
微信小程序实现日历签到
2020/09/21 Javascript
python访问类中docstring注释的实现方法
2015/05/04 Python
Python的SQLalchemy模块连接与操作MySQL的基础示例
2016/07/11 Python
python实现稀疏矩阵示例代码
2017/06/09 Python
用Python将Excel数据导入到SQL Server的例子
2019/08/24 Python
pytorch中的inference使用实例
2020/02/20 Python
Python制作一个仿QQ办公版的图形登录界面
2020/09/22 Python
html5 标签
2009/07/16 HTML / CSS
JavaScript+Canvas实现自定义画板的示例代码
2019/05/13 HTML / CSS
NULL是什么,它是怎么定义的
2015/05/09 面试题
Python是如何进行类型转换的
2013/06/09 面试题
写好自荐信要注意的问题
2013/11/10 职场文书
大学生个人简历中的自我评价
2013/12/27 职场文书
室内设计专业毕业生求职信
2014/05/02 职场文书
暑期社会实践先进个人主要事迹
2014/05/22 职场文书
政协调研汇报材料
2014/08/15 职场文书
2014年度考核工作总结
2014/12/24 职场文书
幼儿园体操比赛口号
2015/12/25 职场文书
小学班级标语口号大全
2015/12/26 职场文书
十大公认最好看的动漫:《咒术回战》在榜,《钢之炼金术师》第一
2022/03/18 日漫