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 相关文章推荐
让网页根据不同IE版本显示不同的内容
Feb 08 Javascript
将jQuery应用于login页面的问题及解决
Oct 17 Javascript
常用一些Javascript判断函数
Aug 14 Javascript
js实现动态改变字体大小代码
Jan 02 Javascript
JS实现简单的图书馆享元模式实例
Jun 30 Javascript
vue.js通过自定义指令实现数据拉取更新的实现方法
Oct 18 Javascript
详解axios在vue中的简单配置与使用
May 10 Javascript
vue 动态修改a标签的样式的方法
Jan 18 Javascript
js提取中文拼音首字母的封装工具类
Mar 12 Javascript
vue.js 双层嵌套for遍历的方法详解, 类似php foreach()
Sep 07 Javascript
js实现倒计时器自定义时间和暂停
Feb 25 Javascript
教你如何用Node实现API的转发(某音乐)
Sep 20 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
第十三节--对象串行化
2006/11/16 PHP
用PHP生成html分页列表的代码
2007/03/18 PHP
实用函数7
2007/11/08 PHP
windows中为php安装mongodb与memcache
2015/01/06 PHP
大家在抢红包,程序员在研究红包算法
2015/08/31 PHP
php及codeigniter使用session-cookie的方法(详解)
2017/04/06 PHP
40款非常有用的 jQuery 插件推荐(系列一)
2011/12/21 Javascript
JS解决ie6下png透明的方法实例
2013/08/02 Javascript
基于jquery自定义的漂亮单选按钮RadioButton
2013/11/19 Javascript
用JavaScript实现使用鼠标画线的示例代码
2014/08/19 Javascript
Nodejs实现的一个简单udp广播服务器、客户端
2014/09/25 NodeJs
jQuery插件formValidator自定义函数扩展功能实例详解
2015/11/25 Javascript
jQuery Mobile框架中的表单组件基础使用教程
2016/05/17 Javascript
JAVA Web实时消息后台服务器推送技术---GoEasy
2016/11/04 Javascript
Vue.js开发环境搭建
2016/11/10 Javascript
如何写好你的JavaScript【推荐】
2017/03/02 Javascript
Vue自定义属性实例分析
2019/02/23 Javascript
vue基于viewer实现的图片查看器功能
2019/04/12 Javascript
vue组件化中slot的基本使用方法
2019/05/01 Javascript
[00:18]天涯墨客三技能展示
2018/08/25 DOTA
用Python创建声明性迷你语言的教程
2015/04/13 Python
Python和Anaconda和Pycharm安装教程图文详解
2020/02/04 Python
解决pyPdf和pyPdf2在合并pdf时出现异常的问题
2020/04/03 Python
Python实现aes加密解密多种方法解析
2020/05/15 Python
Python pymsql模块的使用
2020/09/07 Python
如何在Win10系统使用Python3连接Hive
2020/10/15 Python
基于PyTorch中view的用法说明
2021/03/03 Python
给同事的道歉信
2014/01/11 职场文书
趣味运动会活动方案
2014/02/12 职场文书
高中军训感言500字
2014/02/24 职场文书
竞聘上岗演讲稿
2014/05/16 职场文书
观看信仰心得体会
2014/09/04 职场文书
2016护理专业求职自荐书
2016/01/28 职场文书
私人贷款担保书该怎么写呢?
2019/07/02 职场文书
导游词之沈阳植物园
2019/11/30 职场文书
html5调用摄像头截图功能
2022/01/18 Javascript