在主题上添加风格切换功能 (2)

上回我介绍了如何在主题中简单实现风格切换功能, 但我的主题风格切换和 wpdesigner7 的究竟有什么不同呢? 主要在获取风格的方法 getPreferredStyleSheet 上.
而这个方法什么时候被调用? 在需要获取风格设定的时候, 主题会先去 Cookie 查找上一次使用的风格, 如果找不到 (一般是第一次运行的时候), 就会调用这个方法.

1
2
3
4
5
window.onload = function(e) { // 页面加载完成时
	var cookie = readCookie("style"); // 读取 Cookie
	var title = cookie ? cookie : getPreferredStyleSheet(); // 获取上一次的风格
	setActiveStyleSheet(title); // 重新设定风格
}

以下是 wpdesigner7 的方法:

1
2
3
4
5
6
7
8
9
10
11
12
function getPreferredStyleSheet() {
	var i, a;
	for(i=0; (a = document.getElementsByTagName("link")[i]); i++) { 遍历所有 link 标签
		if(a.getAttribute("rel").indexOf("style") != -1 // 找到包含 style 的描述
			&& a.getAttribute("rel").indexOf("alt") == -1 // 找不到包含 alt 的描述
			&& a.getAttribute("title") // 找到 title 属性
		) {
			return a.getAttribute("title");
		}
	}
	return null;
}

以下是我的处理方法:

1
2
3
4
5
6
7
8
9
10
11
function getPreferredStyleSheet() {
	var i, a;
	for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
		if(a.getAttribute("rel").indexOf("style") != -1
			&& a.getAttribute("title")
		) {
			return a.getAttribute("title");
		}
	}
	return null;
}

或许你已经注意到了, 少了句代码而已. a.getAttribute("rel").indexOf("alt") == -1 的意思是 "在标签中无法找到带 alt 的描述属性".
wpdesigner7 靠这个来判断获取哪个风格 (非默认风格都添加了属性 rel="alternate stylesheet"), 找到不带该属性的那个风格就立刻返回.
而我的没有用这个属性, 只能将默认的风格放在最前, 找到立刻返回. 也就是说, 每次放最前面的就是它的默认风格.

声明: 本文采用 BY-NC-SA 协议进行授权. 转载请注明转自: 在主题上添加风格切换功能 (2)
  1. fangyd | #1
    2009-02-11 00:00

    我个人觉得没必要换主题风格。

  2. 免费空间 | #2
    2009-02-11 11:23

    经常换一下可以减少视觉疲劳.

  3. feicun | #3
    2009-02-11 14:54

    你这个系列拖的时间可够长的

  4. qq2009 | #4
    2009-02-11 16:32

    收藏了回去调试,(*^__^*) 嘻嘻……

  5. qq2009 | #5
    2009-02-11 16:32

    :arrow: 发觉你的表情很棒啊,是什么插件?

  6. Showfom | #6
    2009-02-11 20:45

    我一直很喜欢自己修改的wpdesign7,下次好好改一下自己用哈哈

  7. Reedin | #7
    2009-02-11 21:34

    :oops: 还有表情 哈哈太小看不清楚表情啥意思

  8. 小棒打鼓 | #8
    2009-02-11 23:36

    我最想知道的是,你那段程序代码怎么加上去的??怎么显示出1.2.3...的?恳请赐教

  9. 小棒打鼓 | #9
    2009-02-11 23:37

    回复没成功???

  10. Otzivi o filmah | #10
    2010-01-16 21:01

    spasibo, bolchoe

  1. No trackbacks yet.

Twitter Email feed
RSS feed