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 相关文章推荐
json简单介绍
Jun 10 Javascript
Jquery:ajax实现翻页无刷新功能代码
Aug 05 Javascript
jquery 列表双向选择器之改进版
Aug 09 Javascript
jquery进行数组遍历如何跳出当前的each循环
Jun 05 Javascript
JS实现选择TextArea内文本的方法
Aug 03 Javascript
以JavaScript来实现WordPress中的二级导航菜单的方法
Dec 14 Javascript
一道关于JavaScript变量作用域的面试题
Mar 08 Javascript
vue-cli之router基本使用方法详解
Oct 17 Javascript
react中实现搜索结果中关键词高亮显示
Jul 31 Javascript
详解vue项目中实现图片裁剪功能
Jun 07 Javascript
JavaScript享元模式原理与用法实例详解
Mar 09 Javascript
AI小程序之语音听写来了,十分钟掌握百度大脑语音听写全攻略
Mar 13 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和ACCESS写聊天室(九)
2006/10/09 PHP
php 网上商城促销设计实例代码
2012/02/17 PHP
PHP取整数函数常用的四种方法小结
2012/07/05 PHP
Laravel 5框架学习之环境与配置
2015/04/08 PHP
PHP编程快速实现数组去重的方法详解
2017/07/22 PHP
PHP实现的最大正向匹配算法示例
2017/12/19 PHP
php strftime函数获取日期时间(switch用法)
2018/05/16 PHP
用XMLDOM和ADODB.Stream实现base64编码解码实现代码
2010/11/28 Javascript
jQuery编辑器KindEditor4.1.4代码高亮显示设置教程
2013/03/01 Javascript
DWZ table的原生分页浅谈
2013/03/01 Javascript
js获取窗口相对于屏幕左边和上边的位置坐标
2014/05/15 Javascript
jquery实现的下拉和收缩效果示例
2014/08/21 Javascript
全屏滚动插件fullPage.js使用实例解析
2016/10/21 Javascript
基于vue组件实现猜数字游戏
2020/05/28 Javascript
nodejs操作mongodb的增删改查功能实例
2017/11/09 NodeJs
深入理解ES6中let和闭包
2018/02/22 Javascript
VUE Elemen-ui之穿梭框使用方法详解
2021/01/19 Javascript
使用 Python 获取 Linux 系统信息的代码
2014/07/13 Python
Python搭建APNS苹果推送通知推送服务的相关模块使用指南
2016/06/02 Python
使用Python写一个贪吃蛇游戏实例代码
2017/08/21 Python
Python抽象和自定义类定义与用法示例
2018/08/23 Python
对pandas将dataframe中某列按照条件赋值的实例讲解
2018/11/29 Python
python django下载大的csv文件实现方法分析
2019/07/19 Python
Django-xadmin+rule对象级权限的实现方式
2020/03/30 Python
Python字符串格式化常用手段及注意事项
2020/06/17 Python
python 实现有道翻译功能
2021/02/26 Python
初三家长会邀请函
2014/01/18 职场文书
国窖1573广告词
2014/03/21 职场文书
企业宣传策划方案
2014/05/29 职场文书
未受刑事制裁公证证明
2014/09/20 职场文书
2015年语文教学工作总结
2015/05/25 职场文书
初中数学教学随笔
2015/08/15 职场文书
2016年社区“我们的节日·中秋节”活动总结
2016/04/05 职场文书
如何写好活动总结
2019/06/21 职场文书
一篇合格的广告文案,其主要目的是什么?
2019/07/12 职场文书
PostgreSQL13基于流复制搭建后备服务器的方法
2022/01/18 PostgreSQL