Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Требуется помощь в оптимизации JS
 
 автор: kireyev   (15.06.2011 в 09:03)   письмо автору
 
 

Плохо знаю JS, пытаюсь что-то писать, но получается очень громоздко. Уверен, что можно получившийся код оптимизировать как-то...
JS:
    <script type="text/javascript">
        $(document).ready(function(){
            $("#change_color_buttons a:first").addClass("active");
            $("#change_colors .change_color:not(:first)").hide();
            $("#change_color_buttons a").eq(0).click(function(){
                $(this).toggleClass("active");
                $(this).siblings("a").removeClass("active");
                $("#change_colors .change_color").eq(0).show();
                $("#change_colors .change_color").eq(1).hide();
                $("#change_colors .change_color").eq(2).hide();
            });
            $("#change_color_buttons a").eq(1).click(function(){
                $(this).toggleClass("active");
                $(this).siblings("a").removeClass("active");
                $("#change_colors .change_color").eq(0).hide();
                $("#change_colors .change_color").eq(1).show();
                $("#change_colors .change_color").eq(2).hide();
            });            
            $("#change_color_buttons a").eq(2).click(function(){
                $(this).toggleClass("active");
                $(this).siblings("a").removeClass("active");
                $("#change_colors .change_color").eq(0).hide();
                $("#change_colors .change_color").eq(1).hide();
                $("#change_colors .change_color").eq(2).show();
            });
            
            $(".change_color .layer:first").addClass("active");
            $(".change_color .change_color_layer").hide();
            $(".change_color .change_color_layer").eq(0).show();
            $(".change_color .change_color_layer").eq(3).show();
            $(".change_color .layer").eq(0).click(function(){
                $(this).toggleClass("active");
                $(this).siblings(".layer").removeClass("active");
                $(".change_color .change_color_layer").eq(0).show();
                $(".change_color .change_color_layer").eq(1).hide();
                $(".change_color .change_color_layer").eq(2).hide();
            });
            $(".change_color .layer").eq(1).click(function(){
                $(this).toggleClass("active");
                $(this).siblings(".layer").removeClass("active");
                $(".change_color .change_color_layer").eq(0).hide();
                $(".change_color .change_color_layer").eq(1).show();
                $(".change_color .change_color_layer").eq(2).hide();
            });
            $(".change_color .layer").eq(2).click(function(){
                $(this).toggleClass("active");
                $(this).siblings(".layer").removeClass("active");
                $(".change_color .change_color_layer").eq(0).hide();
                $(".change_color .change_color_layer").eq(1).hide();
                $(".change_color .change_color_layer").eq(2).show();
            });
            $(".change_color .layer").eq(3).click(function(){
                $(this).toggleClass("active");
                $(this).siblings(".layer").removeClass("active");
                $(".change_color .change_color_layer").eq(3).show();
                $(".change_color .change_color_layer").eq(4).hide();
                $(".change_color .change_color_layer").eq(5).hide();
            });
            $(".change_color .layer").eq(4).click(function(){
                $(this).toggleClass("active");
                $(this).siblings(".layer").removeClass("active");
                $(".change_color .change_color_layer").eq(3).hide();
                $(".change_color .change_color_layer").eq(4).show();
                $(".change_color .change_color_layer").eq(5).hide();
            });
            $(".change_color .layer").eq(5).click(function(){
                $(this).toggleClass("active");
                $(this).siblings(".layer").removeClass("active");
                $(".change_color .change_color_layer").eq(3).hide();
                $(".change_color .change_color_layer").eq(4).hide();
                $(".change_color .change_color_layer").eq(5).show();
            });
        });
    </script>

HTML:
<div id="change_color_buttons">
    <a href="#"><span>товар</span></a>
    <a href="#"><span>спереди</span></a>
    <a href="#"><span>сзади</span></a>
</div>
<div id="change_colors">
    <div class="change_color">
        <a href=""><img src=""></a>
    </div>
    <div class="change_color">
        <a class="layer" href="#">link1</a>
        <a class="layer" href="#">link2</a>
        <a class="layer" href="#">link3</a>
        <a href=""><img src=""></a>
        <div class="change_color_layer">1</div>    
        <div class="change_color_layer">2</div>    
        <div class="change_color_layer">3</div>    
    </div>
    <div class="change_color">
        <a class="layer" href="#">link1</a>
        <a class="layer" href="#">link2</a>
        <a class="layer" href="#">link3</a>
        <a href=""><img src=""></a>
        <div class="change_color_layer">1</div>    
        <div class="change_color_layer">2</div>    
        <div class="change_color_layer">3</div>    
    </div>
</div>

  Ответить  
 
 автор: Гость   (15.06.2011 в 09:35)   письмо автору
 
   для: kireyev   (15.06.2011 в 09:03)
 

Если бы вы в краце описали что делает скрипт, чем он вас не устраивает и что хотите получить - быстрее бы получили ответ.

  Ответить  
 
 автор: kireyev   (15.06.2011 в 11:35)   письмо автору
 
   для: Гость   (15.06.2011 в 09:35)
 

Скрипт загружает несколько страниц вкладок и по нажатию отображает ту или иную вкладку.
Организация вкладок такая:
1.
2.1
2.2
2.3
3.1
3.2
3.3
Т.е. всего 7 страниц. Все работает, все нормально, но JS уж очень громоздкий вышел... Вот бы его сократить немного - было бы супер!!!

  Ответить  
 
 автор: Гость   (15.06.2011 в 12:07)   письмо автору
 
   для: kireyev   (15.06.2011 в 11:35)
 

Вы сейчас изобрели jQueryUI Tabs ( http://jqueryui.com/demos/tabs/ )

Что бы сделать код менее громоздким попробуйте более абстрагировать скрипты от самого html кода, что бы их в последствии можно было легко и без последствий изменять, просто следуя какой-либо структуре .

Т.е. напримере jQueryUI Tabs сделайте структуру табов вида

<div id="tabs">
    <ul>
        <li><a href="#tabs-1">Заголовок1</a></li>
        <li><a href="#tabs-2">Заголовок2</a></li>
        <li><a href="#tabs-3">Заголовок3</a></li>
    </ul>
    <div id="tabs-1">
        Контент1
    </div>
    <div id="tabs-2">
        Контент2
    </div>
    <div id="tabs-3">
        Контент3
    </div>
</div>


и вешаете обработчик что при клике в $('#tabs ul li') берете из ссылки значение #tabs-1, находите в $('#tabs') div с этим ID его показываете и скрываете все остальные. Таким же образом делаются вложенные табы.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования