JQuery 網(wǎng)站換膚功能實(shí)現(xiàn)代碼
我將向你們逐步解說(shuō)整個(gè)的過(guò)程,不僅僅因?yàn)橐故緅Query代碼的簡(jiǎn)介,同時(shí)也要揭示jQuery庫(kù)中的若干高級(jí)特性。
首先,代碼
$(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);
}
其他這里沒(méi)有提到的部分是你將在后面看到的創(chuàng)建和讀取cookie的函數(shù)。
熟悉的開(kāi)篇
$(document).ready(function(){ $('.styleswitch').click(function()……告訴jQuery“以最快的速度查找所有包含對(duì)象名‘styleswitch'的元素,并在他們被鼠標(biāo)點(diǎn)擊時(shí)執(zhí)行一個(gè)函數(shù)”。
看起來(lái)不錯(cuò)。當(dāng)鼠標(biāo)點(diǎn)擊預(yù)先指定的元素時(shí),switchStylestyle函數(shù)將被調(diào)用。從現(xiàn)在開(kāi)始是重點(diǎn)。
這句話(huà)什么意思?
第一次看到這句代碼的時(shí)候我的腦子有些卡殼:
$('link[@rel*=style]').each(function(i) {
在互聯(lián)網(wǎng)上搜索了一下后我空手而歸。最后不得不找到了jQuery的作者John Resig,向他咨詢(xún)。
他直接給了我一個(gè)jQuery網(wǎng)站的頁(yè)面地址,里面講解了若干jQuery提供的高級(jí)特性(xpath),可以用來(lái)查找并操作頁(yè)面中的若干元素。
如果你看過(guò)這些東西你就能明白上面那句神秘的代碼的含義是告訴jQuery“查找所有帶rel屬性并且屬性值字符串中包含‘style'的link鏈接元素”。
讓我們看看如何編寫(xiě)包含一個(gè)主樣式表,兩個(gè)備用樣式表的頁(yè)面:
<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" />我們可以看到所有樣式表都含有一個(gè)包含‘style'字串的rel屬性。
所以結(jié)果一目了然,jQuery輕松定位了頁(yè)面中的樣式表鏈接。
下一步?
each()函數(shù)將遍歷所有這些樣式表鏈接,并執(zhí)行下一行中的代碼:
this.disabled = true;if (this.getAttribute('title') == styleName) this.disabled = false;“首先禁用所有的樣式表鏈接,然后開(kāi)啟任何title屬性值與switchStylestyle函數(shù)傳遞過(guò)來(lái)的字串相同的樣式表”
一把抓啊,不過(guò)很有效。
現(xiàn)在我們需要保證的是那些樣式表存在并且有效。
完整代碼和演示
既然 Kelvin Luck已經(jīng)編寫(xiě)了這些代碼,我就不在這里重復(fù)了。
DEMO
我相信Kelvin的靈感是從 這個(gè)網(wǎng)站那里得到的,我們正好可以看看使用其他工具實(shí)現(xiàn)這個(gè)功能是否要比jQuery更加復(fù)雜冗長(zhǎng)。
完整的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
- jQuery基于cookie實(shí)現(xiàn)換膚功能實(shí)例
- jQuery實(shí)現(xiàn)的網(wǎng)頁(yè)換膚效果示例
- jQuery實(shí)現(xiàn)簡(jiǎn)單的網(wǎng)頁(yè)換膚效果示例
- Bootstrap框架結(jié)合jQuery仿百度換膚功能實(shí)例解析
- 使用jQuery實(shí)現(xiàn)Web頁(yè)面換膚功能的要點(diǎn)解析
- 基于jQuery實(shí)現(xiàn)仿百度首頁(yè)換膚背景圖片切換代碼
- jQuery實(shí)現(xiàn)給頁(yè)面換膚的方法
- 基于jquery ui的alert,confirm方案(支持換膚)
- jquery cookie實(shí)現(xiàn)的簡(jiǎn)單換膚功能適合小網(wǎng)站
- jQuery之網(wǎng)頁(yè)換膚實(shí)現(xiàn)代碼
- jQuery結(jié)合jQuery.cookie.js插件實(shí)現(xiàn)換膚功能示例
相關(guān)文章
jQuery form插件之a(chǎn)jaxForm()和ajaxSubmit()的可選參數(shù)項(xiàng)對(duì)象
這篇文章主要介紹了jQuery form插件之a(chǎn)jaxForm()和ajaxSubmit()的可選參數(shù)項(xiàng)對(duì)象的相關(guān)資料,需要的朋友可以參考下2016-01-01jquerymobile checkbox及時(shí)刷新才能獲取其準(zhǔn)確值
一般登錄的時(shí)候 都有個(gè)記住用戶(hù)名 記住密碼 的兩個(gè)checkbox 多選框用jquerymobile 做頁(yè)面 ,當(dāng)勾選checkbox 時(shí)總是不能獲取它正確的值2012-04-04Jquery利用mouseenter和mouseleave實(shí)現(xiàn)鼠標(biāo)經(jīng)過(guò)彈出層且可以點(diǎn)擊
這篇文章主要介紹了Jquery利用mouseenter和mouseleave實(shí)現(xiàn)鼠標(biāo)經(jīng)過(guò)彈出層且可以點(diǎn)擊。需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-02-02完美解決jQuery fancybox ie 無(wú)法顯示關(guān)閉按鈕的問(wèn)題
下面小編就為大家?guī)?lái)一篇完美解決jQuery fancybox ie 無(wú)法顯示關(guān)閉按鈕的問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-11-11jQuery擴(kuò)展_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了jQuery擴(kuò)展,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07可輸入文字查找ajax下拉框控件 ComBox的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇可輸入文字查找ajax下拉框控件 ComBox的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-10-10