jQuery-js如何实现页面无刷新css皮肤切换并兼容多个浏览器

发布于 2016-12-25 08:03:56 字数 6033 浏览 1282 评论 2

想利用jquery实现页面无刷新的样式切换:
按着自己的思路实现了一个:
现:发现在chrome和firefox都正常,
在ie中失败:
这里贴一下我的实现:

/** ********** chemeswitcher start************** */
var _default_skins =
[
{
group : "jqueryui",
hrefTemplate : "{contextPath}/jquery-ui/themes/{id}/jquery-ui.css",
ids :
[
"black-tie", "blitzer", "cupertino", "dark-hive",
"dot-luv", "eggplant", "excite-bike", "flick",
"hot-sneaks", "humanity", "le-frog", "mint-choc",
"overcast", "pepper-grinder", "redmond", "smoothness",
"south-street", "start", "sunny", "swanky-purse",
"trontastic", "vader","boda"
]
},
{
group : "wijmo",
hrefTemplate : "{contextPath}/wijmo/themes/{id}/jquery-wijmo.css",
ids :
[
"arctic", "aristo", "cobalt", "metro", "metro-dark",
"midnight", "rocket", "sterling"
]
}
];
/*
* 定义chemeswitcher
*/
(function($, undefined)
{
$.extend(
{
inittheme: function(themeCookieName,contextPath,skins){
var _skins = skins != null ? skins : _default_skins;

var tempalteMap = {};

$.each(_skins, function(i, skingroup)
{
$.each(skingroup.ids, function(index, skin)
{
tempalteMap[skin] =
{
id : skin, contextPath : _contextPath,
hrefTemplate : skingroup.hrefTemplate
};
});
});

var cookieparamStr = $.cookie(themeCookieName);
var paramObj = null;
if (cookieparamStr != null)
{
paramObj = $.parseJSON(cookieparamStr);
}

if (paramObj && paramObj.id)
{
$.switchtheme(paramObj.id, _contextPath,
tempalteMap[paramObj.id].hrefTemplate,
themeCookieName);
}
},
switchtheme : function(id, contextPath, template, themeCookieName)
{
var paramObj =
{
id : id, contextPath : contextPath, template : template
};
var $themes = $(document).find("link[title=theme]");
if ($themes.filter("#" + id).size() > 0)
{
$themes.not("#" + id).attr("disabled", "disabled");
$themes.filter("#" + id).removeAttr("disabled");
}
else
{
$themes.attr("disabled", "disabled");
$themes.last().after(
$("<link/>").attr(
{
rel : "stylesheet",
type : "text/css",
title : "theme",
id : id,
href : template.replace("{contextPath}",
contextPath).replace("{id}", id)
}));
}
$.cookie(themeCookieName, "" + $.toJsonString(paramObj),
{
path: '/',
expires : 365
});
}
});

$.widget("tx.chemeswitcher",
{
options :
{
themeCookieName : "tx_cheme",
contextPath : ".",
skins : _default_skins
},
_create : function()
{
var element = this.element;
var _this = this
var options = this.options;
var _contextPath = options.contextPath;
var _themeCookieName = options.themeCookieName;
var _skins = options.skins != null ? options.skins : _default_skins;

element.empty();
var $select = $("<select/>").appendTo($(element));
var tempalteMap = {};

$.each(_skins, function(i, skingroup)
{
var $selectGroup = $("<optgroup/>").attr("label",
skingroup.group).appendTo($select).attr("id",
skingroup.group).attr("hrefTemplate",
skingroup.hrefTemplate);
$.each(skingroup.ids, function(index, skin)
{
$("<option/>").attr("id", skin).val(skin).text(skin)
.appendTo($selectGroup).chan;
tempalteMap[skin] =
{
id : skin, contextPath : _contextPath,
hrefTemplate : skingroup.hrefTemplate
};
});
});
$select.change(function()
{
var _$self = $(this);
var _id = _$self.val();
$.switchtheme(_id, _contextPath, tempalteMap[_id].hrefTemplate,
_themeCookieName);
});
}, _init : function()
{
$(this.element).find("select").wijdropdown({

});
}, destroy : function()
{
$(this.element).find("select").wijdropdown("destroy");
}
});
})(jQuery);

/** ********** chemeswitcher end ************** */

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

偏爱自由 2017-10-16 22:21:46

自己解决了:
解决办法如下:

$themes.attr("disabled", "disabled");
if($.browser.msie){
var css_href = template.replace("{contextPath}",
contextPath).replace("{id}", id);
var styleTag = document.createElement("link");
styleTag.setAttribute('type', 'text/css');
styleTag.setAttribute('rel', 'stylesheet');
styleTag.setAttribute('href', css_href);
$("head")[0].insertBefore(styleTag);

css_href = null;
styleTag = null;
}else{
$themes.last().after($("<link/>").attr({
rel : "stylesheet",
type : "text/css",
title : "theme",
id : id,
href : template.replace("{contextPath}",
contextPath).replace("{id}", id)
}));
}

灵芸 2017-09-25 12:09:38

没仔细看你的代码,我觉得换肤功能可以这么实现:
皮肤A样式表 a.css 皮肤B样式表 b.css
点击切换按钮是,用js去修改样式文件
比如原来是
<link type="text/css" rel="stylesheet" href = "a.css">

点击后
<link type="text/css" rel="stylesheet" href = "b.css">
不就换掉了吗?

置于你的样式兼容不兼容,需要你在两个样式表里面写样式来处理css在各个浏览器里面的各种情况

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文