likbezz, из рассмотренного понял только как можно изменять диз с сохранением куки, но в примере только описано как менять css листы целиком, а в моем варианте это не подходит. А как сохранять класс в куки я не понял...
likbezz, из рассмотренного понял только как можно изменять диз с сохранением куки, но в примере только описано как менять css листы целиком, а в моем варианте это не подходит. А как сохранять класс в куки я не понял...
Так-с, вот что я понял Этот скрипт добавляем в боди
Code
<script type="text/javascript"> function setDynClass(a){ if(!arguments.length){var a=(a=document.cookie.match(/\bdyncss=([^;]*)/))&&a[1];if(!a)return''} document.getElementById('dm1').className='style'+a; var d=new Date();d.setFullYear(d.getFullYear()+1); document.cookie=['dyncss=',a,';expires=',d.toGMTString(),';path=/;'].join('');return a} setDynClass(); </script>
Для начале на всех страницах приписываем тегу bodyid="dm1" Потом в хедер добавляем стили: ... body.style1 #nav body.style2 #nav body.style3 #header body.style4 a:link, body.style4 a:active и тд. ... Судя из моего скрипта, у меня три элемента меняются независимо друг от друга, это цвет навигационной панели(#nav), бэкграунд хедера(#header) и цвет ссылок(a:link ...) В этот скрипт
Для начале на всех страницах приписываем тегу body id="dm1"
Не обязательно именно такой - это просто у меня такой ...
Quote (RazieL)
Судя из моего скрипта, у меня три элемента меняются независимо друг от друга, это цвет навигационной панели(#nav), бэкграунд хедера(#header) и цвет ссылок(a:link ...)
Какая разница?? - то же, только в профиль ...
Quote (RazieL)
Все настройки откуда изменяются сами элементы находятся в этом блоке...
Нет, вот в этом скрипте, что обрабатывает управляющие элементы:
Вот как я делаю (для примера) В шаблон Страницы сайта (/index) Между тегами head и /head вставляю например style body.style14 #nav {стиль навигационной панели} /style тегу body прописываю id="dm1" и сразу после тега вставляю скрип
Code
<script type="text/javascript"> function setDynClass(a){ if(!arguments.length){var a=(a=document.cookie.match(/\bdyncss=([^;]*)/))&&a[1];if(!a)return''} document.getElementById('dm1').className='style'+a; var d=new Date();d.setFullYear(d.getFullYear()+1); document.cookie=['dyncss=',a,';expires=',d.toGMTString(),';path=/;'].join('');return a} setDynClass(); </script>
Все остальное у меня находится в шаблоне Верхняя часть сайта (GLOBAL_AHEADER) например жму на, т.е. он должне принять стиль <div id="switcher-content"> ... <a rel="nofollow" href="#" class="navy" style="background-color: rgba(34,34,34, 0.8);">14</a> ... </div> В скрипт я добавил стоки document.getElementById('dm1').className='style'+n; setDynClass(n);
Code
<script type="text/javascript"> $('#switcher-content a').click(function() { var n=$(this).html(); if (n >= 0 && n <= 9){ $(this).addClass('active').siblings().removeClass('active'); $('#header').css({'background-image':'url(/design/bg-top'+n+'.jpg)',opacity:'0'}).animate({opacity:'1'},500); } ... if(n=='14'){ $('#nav').attr({'style':'','class':'blackNav'}); } ... document.getElementById('dm1').className='style'+n; setDynClass(n); return false; }); </script>
Фактически переменная n ведь равна 14, следовательно елемент получает класс body.style14 и переменная n должна передаваться сприпту куков через setDynClass(n).
ну и в общем не работает. Он меняет стиль но не сохраняет его...
ЗЫ: если я сменю document.getElementById('dm1') на document.getElementByTagName('body') это будет тоже самое что и body id="dm1" только тут не надо уже будет прописывать id, а будет работать для всех body ?
Сообщение отредактировал RazieL - Вторник, 27.12.2011, 19:38
Смотри пример, что, просто так выложил? - там осталось только поменять стили и всё готово...
естественно я смотрел все по примеру... Очень долго пытался сделать с помощью document.getElementsByTagName('body'), в итоге не получилось... Оставил с document.getElementById('swdes')
Правда есть один нюанс Как я говорил выше, у меня три элемента меняют класс и они независимы друг от друга, а в скрипте переменная только одна, так, что изменяется и остается только последний выбранный элемент
Code
<a rel="nofollow" href="#">9</a><br /> первый елемент (#header) ... <a rel="nofollow" href="#" class="navy" style="background-color: rgba(62,187,218, 0.8);">10</a> второй елемент (#nav) ... <a rel="nofollow" href="#" class="letter" style="background-color:#DD4B39; margin-left:2px;">16</a> третий елемен (a:link, a:active...)
т.е. если я выберу вначале сменить хедер, а потом цвет навигационной панели, то сохранится только цвет навигационной панели...
Возможности реализации: Я думал использовать массив
естественно я смотрел все по примеру... Очень долго пытался сделать с помощью document.getElementsByTagName('body'), в итоге не получилось... Оставил с document.getElementById('swdes')
- Просто нужно учитывать, что document.getElementsByTagName('') всегда возвращает массив элементов, даже если он всего один. ...
Quote (RazieL)
Правда есть один нюанс Как я говорил выше, у меня три элемента меняют класс и они независимы друг от друга, а в скрипте переменная только одна, так, что изменяется и остается только последний выбранный элемент т.е. если я выберу вначале сменить хедер, а потом цвет навигационной панели, то сохранится только цвет навигационной панели...
А-а, ты вот о чём ... Повесь двойной класс. ...
Quote (RazieL)
Возможности реализации: Я думал использовать массив Что-то типа этого... Но вот здесь для меня темный лес, я не знаю где здесь записать массив, чтобы он запоминал все три элемента...
Чё-то ты намудрил как-то слишком .... Не понял твой скрипт.
likbezz, Все легло красиво... Два класса изменяются и вносятся в куки...
А чтобы он запоминал еще и третий класс, как я понял мне надо добавить в скрипт el.className.split(' ')[2] в var? Я пробую разные комбинации, но что-то он не хочет работать...
Quote (likbezz)
Просто нужно учитывать, что document.getElementsByTagName('') всегда возвращает массив элементов, даже если он всего один.
Вот оно что
Сообщение отредактировал RazieL - Четверг, 29.12.2011, 13:03
А чтобы он запоминал еще и третий класс, как я понял мне надо добавить в скрипт el.className.split(' ')[2] в var?
Да, типа. Но, при трёх и более классах, наверное, лучше будет написать отдельную функцию, разбиваю их на массив, а потом вновь собирающую в строку. Массив - в куку, строку в атрибут класс. ... Но это ... не в этот раз ... уже скучно )
Но, при трёх и более классах, наверное, лучше будет написать отдельную функцию, разбиваю их на массив, а потом вновь собирающую в строку. Массив - в куку, строку в атрибут класс.
Или использовать replace и типовые названия классов: Например:
Quote (Info)
для фона: - bg_img1, bg_img2, bg_img3 и тд. для текста: - txt_style1, txt_blue, txt_red, .... глобальные: main_style1, main_1024, main_1280 ...
и заменять регуляркой - искать вхождение в строку - по началу - до нижнего подчёркивания, и заменять именно то, что нужно. ... Это даже проще, но несколько ограничивает в именах классов.
Типа:
Code
<script type="text/javascript"> $('#switcher-content a').click(function(){ $(this).addClass('active').siblings().removeClass('active'); var n=this.rel,obj=document.getElementById('dm1'); var isClassReplace=function(a,b,c){var rExp=new RegExp("\\b("+c+"\\w+)\\b","ig"); if(a.search(rExp)!=-1){return a.replace(rExp,c+b); }else{return a+' '+c+b;} }; if(n>0&&n<6){ var tmp=isClassReplace(obj.className,n,'style'); $('#header-content').animate({opacity:0},10,function(){ obj.className=tmp; setDynClass(tmp); $(this).animate({opacity:'1'},500); }); } if(n=='Red'||n=='Green'){ var tmp=isClassReplace(obj.className,n,'text'); obj.className=tmp; setDynClass(tmp); }; if(n=='Aqua'||n=='Beige'){ var tmp=isClassReplace(obj.className,n,'fon'); obj.className=tmp; setDynClass(tmp); }; return false; }); </script>
likbezz, Оке я подожду, а можешь пока посоветовать где почитать про document.getElementsBy(id, tag, class, что там еще есть), я находил еще про document.getElementByClass но говорят что не во всех браузерах работает... Я так понял что когда он передает массивом например функция document.getElementsByTagName('div')[1]
Но, при трёх и более классах, наверное, лучше будет написать отдельную функцию, разбиваю их на массив, а потом вновь собирающую в строку. Массив - в куку, строку в атрибут класс.
Т.е. по любому два скрипта будут немного изменены, а не только один?
Сообщение отредактировал RazieL - Четверг, 29.12.2011, 22:16
likbezz, Оке я подожду, а можешь пока посоветовать где почитать про document.getElementsBy(id, tag, class, что там еще есть)
А что там читать? Всё просто... document.getElementByClass - не работает в ИЕ ... Но наверняка у тебя и самого подозрения на это есть )))) Всё остальное - как и написано - ищут по ID и тегу. document.getElementsByTagName('*') - ищет всё ... ...
Quote (RazieL)
Он возьмет второй div
Да, отсчёт, как всегда,с нуля.
Quote (RazieL)
Т.е. по любому два скрипта будут немного изменены, а не только один?
Нет, первый остаётся неизменным - он получает строку, и запоминает её. Зачем там что-то менять?
Quote (likbezz)
Или использовать replace и типовые названия классов: Например:
Quote (Info)
для фона: - bg_img1, bg_img2, bg_img3 и тд. для текста: - txt_style1, txt_blue, txt_red, .... глобальные: main_style1, main_1024, main_1280 ...
и заменять регуляркой - искать вхождение в строку - по началу - до нижнего подчёркивания, и заменять именно то, что нужно. ... Это даже проще, но несколько ограничивает в именах классов.