【问题标题】:Style switcher help风格切换器帮助
【发布时间】:2010-01-19 10:33:44
【问题描述】:

我需要一些帮助 我制作了一个样式切换器,但我无法弄清楚如何替换样式表,目前我的代码清空了 <head>,我需要它来替换以前的样式表,这是我的代码,

菜单和javascript

<ul id="options">
<li><a class="option" href="<?php echo base_url();?>welcome/setBackground/red">Red</a></li>
<li><a class="option" href="<?php echo base_url();?>welcome/setBackground/green">Green</a></li>

<script type="text/javascript">
$('a.option').click(function(ev) {
    ev.preventDefault();
    var url = $(this).attr("href");
    alert(url)
    $.ajax({
        url : url,
        type : "POST",
        data : "js=true",
    success : function(html) {
        $('head').html(html);
    }
    });
});
</script>

PHP

function setBackground() {
    $data['style'] = $this->uri->segment(3);
    $_COOKIE[] = setcookie("style", $data['style'], time()+(60*60*24*30), "/");
    //die(print_r($_COOKIE));
    if($this->input->post('js') == "true") {
        //echo $data['style'];
        $this->load->view('base/cssSelector', $data);
    } else {
        redirect(base_url().'welcome');
    }
}

javascript 和 PHP 构建的 HTML

<link rel="stylesheet" href="/media/css/<?php echo $style; ?>.css" media="screen, projection" />

【问题讨论】:

    标签: javascript css ajax jquery


    【解决方案1】:

    这是一个 HTML 页面,展示了如何动态添加/删除样式的示例。

    <html>
    <head>
        <title>add/remove style</title>
        <script>
            function removeStyle(id){
                var cs = document.getElementById(id);
                cs && cs.parentNode.removeChild(cs);
            }
            function addStyle(css, id){
                removeStyle(id);
                var styleNode = document.createElement("style");
                styleNode.setAttribute('type', 'text/css');
                styleNode.setAttribute('id', id);
                document.getElementsByTagName("head")[0].appendChild(styleNode);
                if(typeof styleNode.styleSheet !=='undefined'){
                    styleNode.styleSheet.cssText = css; //IE
                }else{
                    styleNode.appendChild(document.createTextNode(css));
                }
            }
        </script>
    </head>
    <body>
        <p>text to color</p>
        <input onclick="addStyle('p{color:#900}p{background:#DEF}', 'myStyle')" type="button" value="add style" >
        <input onclick="removeStyle('myStyle')" type="button" value="remove style">
    </body>
    </html>
    

    【讨论】:

    • 在这种情况下,Javascript 解决方案是不可行的。
    • 为什么?你不是从 php 调用中获取 css 流吗?
    【解决方案2】:

    我以前也这样做过,只是不同。我有一个 link 标记指向一个处理程序(例如,一个名为 getCss.php 的文件)。在处理程序内部,我有一个 cookie 逻辑,它将读取相应的文件并以文本/css 的内容类型在响应中流式传输。然后在他们选择文件的地方,您只需担心设置 cookie。它运行良好且易于维护。

    【讨论】:

      猜你喜欢
      • 2011-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-22
      • 2017-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多