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

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. Python 递归删除非空目录(包括子目录以及文件)

    Python的OS模块自带rmdir和removedirs函数用于删除目录,但是两者都不能删除非空目录,以下代码定义了一个函数 remove_dir 用于删除非空目录. #作者官网 http://ww ...

  2. [MySQL-笔记]创建高性能索引

    索引,MySQL中也叫“键”,是存储引擎中用于快速找到记录的一种数据结构,具体的工作方式就像书本中的索引一样,但是具体的实现方式会有差别. 一.索引分类 B-Tree索引: 优点: MyISAM中,索 ...

  3. 图形文件元数据管理工具exiv2

    图形文件元数据管理工具exiv2   图形文件通常都包含多种元数据,如Exif.IPTC.XMP.这些信息往往是渗透人员收集的目标.为了便于管理这些信息,Kali Linux内置了专用工具exiv2. ...

  4. [ 原创 ] Java基础1--Java中super和this的用法和区别

    许多同学在学习Java时分不清楚this和super的用法和区别,今天偶然发现一片加精的博文,看完内容准备自己也写下来积累一下 1.如果想在子类的构造方法中调用父类的构造方法,必须在子类的构造方法中使 ...

  5. BZOJ 1061: [Noi2008]志愿者招募 [单纯形法]【学习笔记看另一篇吧】

    1061: [Noi2008]志愿者招募 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 3975  Solved: 2421[Submit][Stat ...

  6. C# 7.0特性与vs2017

    下面是关于在C#7.0语言中计划功能的说明.其中大部分功能在Visual Studio “15” Preview 4中能运行.现在是最好的试用时期,请记录下你们的想法. C#7.0语言增加了许多的新功 ...

  7. 双频无线网安装设置(5g ) for linux

    为了在局域网实现远程wifi调试,例如调试需要图像数据传输,则需要搭建局域网5g无线网络. 1.硬件要求 a. TP-Link(型号:TL-WDR6500,AC1300双频无线路由器,支持5g,2.4 ...

  8. 通过yum来安装vsftpd

    Linux系统:centos6.6.  安装步骤  1.通过yum来安装vsftpd [root@localhost ~]# yum -y install vsftpd 2.设置为开机启动 [root ...

  9. 《C预处理》Linux内核中可变参数宏的用法

    http://blog.csdn.net/tankai19880619/article/details/12015305

  10. make and make bzImage

    2.6内核 make = make bzImage + make modules 无非是改下Makefile而已 2.4 内核 01.make menuconfig 02.make dep 03.ma ...