最近开始写一中的新选歌系统,这次要大改,顺便练手。
想加入换肤功能(不然女生肯定觉得老是蓝色不好……),而且我想到的换肤,最简单的方式就是换 CSS,把界面颜色、图形相关的内容放入皮肤的 CSS 中就很容易了~不过问题是换肤呢?
正好新系统中因为客户端代码可能非常强大,准备引入 jQuery 框架来简化开发,便学了一些。于是我就想,能不能通过 jQuery 来解决呢?
首先,我给出了下面这个简单的页面:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-CN"> <head profile="http://gmpg.org/xfn/11"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>福州一中 学校音乐征集</title> <link rel="stylesheet" href="" id="theme" type="text/css" media="all" /> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="theme.js"></script> <style type="text/css"> html, body { height: 100%; width: 100%; } </style> </head> <body> Hello world! </body> </html>
然后我开始用了一段 jQuery 手册里的某段示例代码:
$('<link rel="stylesheet" href="' + (t++ & 1) + '.css" id="theme" type="text/css" media="all" />') .appendTo('head');
成功了,不过查看处理后的代码,发现大量冗余代码出现在 head 尾部……又查了查,发现了 jQuery 里面的另外一个好用的函数,于是上面代码就改为:
$('<link rel="stylesheet" href="' + (t++ & 1) + '.css" id="theme" type="text/css" media="all" />') .replaceAll("#theme");
没有冗余代码出现,而且 IE6 都可以正常使用!jQuery 的兼容性果然超群……
然后我们想,这样每次都要重建标签,会不会很慢呢?如果能直接改属性或许不错~再查查,我们发现下面方法:
$("#theme").attr({ href: (t++ & 1) + '.css' });
又简洁看过去又高效~再试试 IE6,仍然没有问题哦~
最后给出实验用各完整代码:
var t = 0; $(function() { $(document.body).click(function() { $("#theme").attr({ href: (t++ & 1) + '.css' }); }); });
第一个 CSS 文件:
body { background: blue; color: yellow; }
第二个 CSS 文件:
body { background: #000; color: #fff; }
Comments !