一键切换皮肤的解决思想及iframe嵌套时寻找下级iframe的方法

时间:2022-09-17 12:38:17

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

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、切换皮肤表示层

一键切换皮肤的解决思想及iframe嵌套时寻找下级iframe的方法

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);
});

一键切换皮肤的解决思想及iframe嵌套时寻找下级iframe的方法

一键切换皮肤的解决思想及iframe嵌套时寻找下级iframe的方法

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

.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嵌套的情况,就像下面这样:

一键切换皮肤的解决思想及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&sol;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嵌套&comma;防止登录页面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应用切换皮肤功能实现&lpar;二&rpar;

    原文地址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. gradle中使用嵌入式&lpar;embedded&rpar; tomcat&comma; debug 启动

    在gradle项目中使用embedded tomcat. 最开始部署项目需要手动将web项目打成war包,然后手动上传到tomcat的webapp下,然后启动tomcat来部署项目.这种手动工作通常还 ...

  2. HDU 5936 Difference

    题意: 有一个函数f(y, k) = y的每个十进制位上的数字的k次幂之和 给x, k 求 有多少个y满足 x = f(y, k) - y 思路: (据说这叫中途相遇法?) 由于 x >= 0 ...

  3. &lbrack;转&rsqb;centos中wget的使用方法

    本文转自 http://www.cnblogs.com/chusiping/archive/2011/11/10/2243805.html 和 http://www.jb51.net/os/RedHa ...

  4. apache2&period;2 虚拟主机配置

    一.改动httpd.conf 打开appserv的安装文件夹,找到httpd.conf文件,分别去掉以下两行文字前面的#号. #LoadModule vhost_alias_module module ...

  5. 返璞归真 asp&period;net mvc &lpar;4&rpar; - View&sol;ViewEngine

    原文:返璞归真 asp.net mvc (4) - View/ViewEngine [索引页] [源码下载] 返璞归真 asp.net mvc (4) - View/ViewEngine 作者:web ...

  6. 连接器与容器的桥梁——CoyoteAdapter

    如果把整个tomcat内核最高抽象程度模块化,可以看成是由连接器Connector和容器Container组成,连接器负责HTTP请求接收及响应,生成请求对象及响应对象并交由容器处理,而容器则根据请求 ...

  7. Disk

    一.简介 二.其他 1)Disk I/O

  8. es6 语法 (模块化)

    //export export let A=123; //导出 //导出函数 export function test(){ console.log('test'); } //导出类 export c ...

  9. zookeeper的安装和启动教程

    zookeeper的安装和启动 zookeeper安装包所在目录: 上传文件到虚拟机.现在本地新建一个目录setup,将zookeeper压缩包复制进去. ALT+P打开一个标签,操作如下put命令. ...

  10. Nginx 下Thinkphp5伪静态

    server { listen 80; server_name all.bjed.com; root "F:\www\asdata"; location / { index ind ...