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 相关文章推荐
node.js使用nodemailer发送邮件实例
Mar 10 Javascript
JS判断当前页面是否在微信浏览器打开的方法
Dec 08 Javascript
基于JavaScript实现TAB标签效果
Jan 12 Javascript
JavaScript优化专题之Loading and Execution加载和运行
Jan 20 Javascript
字符串反转_JavaScript
Apr 28 Javascript
Bootstrap开关(switch)控件学习笔记分享
May 30 Javascript
原生js封装自定义滚动条
Mar 24 Javascript
20170918 前端开发周报之JS前端开发必看
Sep 18 Javascript
微信小程序实现时间预约功能
Nov 27 Javascript
jQuery实现动态添加和删除input框实例代码
Mar 26 jQuery
微信小程序传值以及获取值方法的详解
Apr 29 Javascript
React Native中ScrollView组件轮播图与ListView渲染列表组件用法实例分析
Jan 06 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
30 个很棒的PHP开源CMS内容管理系统小结
2011/10/14 PHP
深入php之规范编程命名小结
2013/05/15 PHP
ThinkPHP2.x防范XSS跨站攻击的方法
2015/09/25 PHP
WordPress开发中用于标题显示的相关函数使用解析
2016/01/07 PHP
PHP二维数组去重实例分析
2016/11/18 PHP
简单实现php上传文件功能
2017/09/21 PHP
JavaScript 错误处理与调试经验总结
2010/08/10 Javascript
jQuery使用after()方法在元素后面添加多项内容的方法
2015/03/26 Javascript
AngularJS中如何使用$http对MongoLab数据表进行增删改查
2016/01/23 Javascript
Javascript的比较汇总
2016/07/25 Javascript
js判断价格,必须为数字且不能为负数的实现方法
2016/10/07 Javascript
Javascript 函数的四种调用模式
2016/11/05 Javascript
AngularJS自定义服务与fliter的混合使用
2016/11/24 Javascript
将input框中输入内容显示在相应的div中【三种方法可选】
2017/05/08 Javascript
微信小程序获取手机网络状态的方法【附源码下载】
2017/12/08 Javascript
详解微信图片防盗链“此图片来自微信公众平台 未经允许不得引用”的解决方案
2019/04/04 Javascript
微信小程序开发之map地图组件定位并手动修改位置偏差
2019/08/17 Javascript
NUXT SSR初级入门笔记(小结)
2019/12/16 Javascript
[02:56]DOTA2矮人直升机 英雄基础教程
2013/11/26 DOTA
python中引用与复制用法实例分析
2015/06/04 Python
深入理解Python3中的http.client模块
2017/03/29 Python
Python实现读取json文件到excel表
2017/11/18 Python
python队列Queue的详解
2019/05/10 Python
Python小白学习爬虫常用请求报头
2020/06/03 Python
详解基于Scrapy的IP代理池搭建
2020/09/29 Python
FOREO官方网站:LUNA露娜洁面仪
2016/11/28 全球购物
TUMI澳大利亚网站:美国旅行箱包品牌
2017/03/27 全球购物
学生周末长期请假条
2014/02/15 职场文书
进步之星获奖感言
2014/02/22 职场文书
预备党员2014全国两会学习心得体会
2014/03/10 职场文书
2014年秋季开学典礼致辞
2014/08/02 职场文书
爱与责任师德演讲稿
2014/08/26 职场文书
行政执法队伍作风整顿剖析材料
2014/10/11 职场文书
群众路线个人整改方案
2014/10/25 职场文书
春节晚会开场白
2015/05/29 职场文书
2016年万圣节活动总结
2016/04/05 职场文书