Помощь по переключению стилей - PullRequest
0 голосов
/ 19 января 2010

Мне нужна помощь. Я сделал переключатель стиля, но я не могу понять, как заменить таблицу стилей, в настоящий момент мой код очищает <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');
    }
}

HTML, который строит javascript и PHP

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

Ответы [ 2 ]

1 голос
/ 19 января 2010

Вот 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>
0 голосов
/ 19 января 2010

Я делал это раньше, кроме как иначе.У меня был тег link, указывающий на один обработчик (например, файл с именем getCss.php).Внутри обработчика у меня есть логика cookie, которая будет читать соответствующий файл и поток в ответ с типом содержимого text / css.Затем в том месте, где они выбирают файл, все, что вам нужно беспокоиться, это установить cookie.Он работает очень хорошо и прост в обслуживании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...