项目中有个一键切换皮肤的功能,感觉还不错,记录下,就是各颜色样式设置起来太复杂了,不知道有没有更简便的方法:

1、切换皮肤结构层

<li title="<s:text name='cems.skin'/>">
<a data-toggle="collapse" href="#colorPick"><img src="${basePath}/images/homePageicon/colorPick.png" /></a>
</li>

使用"Bootstrap 折叠(Collapse)插件":下面网站可以详细学习

Bootstrap 折叠(Collapse)插件:http://www.runoob.com/bootstrap/bootstrap-collapse-plugin.html

2、切换皮肤表示层

3、切换皮肤行为层

$("#colorPick  a").click(function(){
var oldcolor= $.cookie("color"); //获取cookie里存的color
var color=$(this).attr("data-skin"); //获取当前点击的元素的color,为属性data-skin的值
var len=$("#content-main .LRADMS_iframe").length; //获取iframe元素的个数
for(var i=; i<len;i++){
var obj= $("#content-main .LRADMS_iframe")[i].contentDocument.body; //循环获取各iframe里的body
$(obj).removeClass(oldcolor); //该body是修改各iframe里的body的样式
$(obj).addClass(color);
}
$.cookie("color", color); //设置cookie里的值为新值
$("body").removeClass(oldcolor); //该body是自身html里body的样式
$("body").addClass(color);
});

最后就是各颜色对应一套样式体系:

.skin-red .btn-default
{
color:#DD4B39;
}
.skin-yellow .btn-default
{
color:#F39C12;
}
.skin-blue .btn-primary:hover
{
background-color:#007AFF;
border:1px solid #007AFF;
color:#fff;
}

 补充完善:

上面是一层iframe的情况,但是实际项目中还会碰到很多层iframe嵌套的情况,就像下面这样:

$("#colorPick  a").click(function(){
var oldcolor= $.cookie("color");
var color=$(this).attr("data-skin");
var len=$("#content-main .LRADMS_iframe").length;
for(var i=; i<len;i++){
var obj= $("#content-main .LRADMS_iframe")[i].contentDocument.body;
$(obj).removeClass(oldcolor);
$(obj).addClass(color);
} var len2=$(".layui-layer-iframe iframe").length;
for(var j=;j<len2;j++){
var obj= $(".layui-layer-iframe iframe")[j].contentDocument.body;
$(obj).removeClass(oldcolor);
$(obj).addClass(color); var len3=$(".layui-layer-iframe iframe").contents().find("iframe").length;
for(var a=;a<len3;a++){
var obja= $(".layui-layer-iframe iframe").contents().find("iframe")[a].contentDocument.body;
$(obja).removeClass(oldcolor);
$(obja).addClass(color);
}
} $.cookie("color", color);
$("body").removeClass(oldcolor);
$("body").addClass(color); });

标红处为iframe嵌套时寻找下级iframe的方法

此外,如果是在iframe的页面使用 $.cookie() 方法是会报错$.cookie() is not a function的错误,原因是cookie在window下才有;

因此在iframe的页面需要使用 top.$.cookie() 才会获取到cookie值

//iframe页面使用top.$.cookie()
window.onload = function(){
var color = top.$.cookie("color");
$("body").addClass(color);
}

一键切换皮肤的解决思想及iframe嵌套时寻找下级iframe的方法的更多相关文章

  1. 解决canvas转base64/jpeg时透明区域变成黑色背景的方法

    最近在工作遇到一个问题,在将png图片转jpeg时,透明区域被填充成黑色,通过网上的介绍找到了解决的方法,现在总结下分享给同样遇到这个问题的朋友们,感兴趣的可以通过本文详细学习下. 在用canvas将 ...

  2. 关于iframe嵌套、动态获取iframe内的url、父页面重定向-2

    经过学习,发现了一种更好的办法 试验如下 1.html的内容如下: (2.html和3.html没有jquery,只有body的222和333) 结果为: 其实最容易搞糊涂的是,什么时候算self,其 ...

  3. 关于iframe嵌套、动态获取iframe内的url、父页面重定向

    1 $(function () { 2 //选择器是选择了easyui中的点击链接,出现新的iframe 3 $("a[target='mainFrame']").click(fu ...

  4. 解决pycharm运行py文件时只有unittest选项的方法

    有时候在编完脚本开始运行时,发现某个py脚本右键运行的选项不是run,二是run in unittest,试过很多方法都不能很好的去除,主要是因为脚本中含有test字符串,一种解决方法是将脚本中所有的 ...

  5. jquery 防止当前页面被Iframe嵌套,防止登录页面Iframe被嵌套

    <script type="text/javascript"> if (top.location != location) { top.location.href = ...

  6. 仿iReader切换皮肤进度条

    仿iReader切换皮肤进度条 标签(空格分隔): 自定义View [TOC] 本以为使用paint.setXfermode(new PorterDuffXfermode(Mode.XOR));可以轻 ...

  7. Firefox插件一键切换兼容IE

    转载:http://mozilla.com.cn/thread-42137-1-1.html 让火狐兼容IE的双核扩展,一键切换至IE内核,网银支付无忧愁.支持Adblock plus和FireGes ...

  8. Android应用切换皮肤功能实现(二)

    原文地址http://www.apkbus.com/forum.php?mod=viewthread&tid=149034&highlight=%E7%9A%AE%E8%82%A4 上 ...

  9. Android应用切换皮肤功能实现

    原文地址:http://www.eoeandroid.com/thread-318159-1-1.html 现在大多数android应用都支持切换皮肤的功能.比如千千静听,墨迹天气等等.本文介绍两种切 ...

随机推荐

  1. CentOS配置远程日志服务器

    (1).发送日志的服务器(被收集) [root@xuexi ~]# vim /etc/rsyslog.conf //在#*.* @@remote-host:514行下添加一行 *.* @@192.16 ...

  2. 凡信(超仿微信Android版)开源了,内有源码下载 -

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha 凡信(超仿微信Android版)开源了,内有源码下载 - IM Geek开发者社区-移动 ...

  3. BZOJ2120数颜色(带修改莫队)

    莫队算法是一种数据结构的根号复杂度替代品,主要应用在询问[l,r]到询问[l+1,r]和[l,r+1]这两个插入和删除操作复杂度都较低的情况下.具体思想是:如果把一个询问[l,r]看做平面上的点(l, ...

  4. mysql_connect的$new_link参数

    假设在127.0.0.1上有test1和test2两个库, 其中库test1库中有test1表,test2中有test2表 $servername = "127.0.0.1"; $ ...

  5. bzoj 3282

    回顾一下LCT,容易写错的地方: 1.每次断掉Splay中的边,必须update一下父亲节点,再根据具体情况是否splay父亲节点. 2.养成没有用的值(比如当pre[u]不为0时的pnt[u])不去 ...

  6. 【NOIP2014】联合权值 树上dp

    题目描述 Description 无向连通图G 有n 个点,n - 1 条边.点从1 到n 依次编号,编号为 i 的点的权值为W i   ,每条边的长度均为1 .图上两点( u ,  v ) 的距离定 ...

  7. 0056 Spring MVC如何接收浏览器传递来的请求参数--request--形参--实体类封装

    浏览器总会向服务器传递一些参数,那么Spring MVC如何接收这些参数? 先写个简单的html,向服务器传递一些书籍信息,如下: <!DOCTYPE html> <html> ...

  8. Automate Screen or Button Taps via Tasker : Simulating keypress events

    When using Tasker, sometimes we want to do some automation on screen e.g. screen or button taps. At ...

  9. 记录一次apache错误:“child pid 29023 exit signal Segmentation fault (11)”

    目前做了一台公网的测试机,主要是  php 5.3.3 版本,是 browser  --> nginx  --> apache --> php 今天因为想要安装一个商城,要求需要 P ...

  10. mr

    大数据技术 —— MapReduce 简介 本文为senlie原创,转载请保留此地址:http://www.cnblogs.com/senlie/ 1.概要很多计算在概念上很直观,但由于输入数据很大, ...