2015-01-13 4 views
0

быстрый вопрос, и я знаю, что это может показаться легким для опытных программистов, но я только учился, и я пытаюсь узнать о лучших практиках и о том, как делать что-то наиболее эффективно, поэтому, пожалуйста, несите меня! Я бы очень признателен за любые советы.Вкладки с JQuery, самый эффективный и эффективный способ?

Я работаю с JQuery, и я пытаюсь сделать простую функциональность Tab. То, как я это сделал, я создал ul, содержащий несколько li, а затем в зависимости от li. Я обновил содержимое в div на странице.

Я реализовал это в JSFiddle, так что вы можете увидеть мой код: http://jsfiddle.net/javacadabra/oeh7Lj62/

Я интересно, если это хороший подход к созданию вкладок? и независимо от того, насколько я показываю тот, на который я нажимаю и скрываю другие, эффективен, потому что скажем, например, у меня было 20 вкладок, мне нужно было бы иметь show() для выбранной вкладки и hide() для других 19? Или есть более эффективный способ для других вкладок? hiding?

Опять же, я знаю, что это довольно простой вопрос, но я просто ищу советы о том, как улучшить. Большое спасибо.

Это мой js

$(document).ready(function() { 
       $('#mylist li').click(function (e) { 
        var tab = $(this).html(); 
        if (tab == "one") { 
         $('#tab-1-list').show(); 
         $('#tab-2-list').hide(); 
         $('#tab-3-list').hide(); 
        } 
        else if (tab == "two") 
        { 
         $('#tab-2-list').show(); 
         $('#tab-1-list').hide(); 
         $('#tab-3-list').hide(); 
        } else { 
         $('#tab-3-list').show(); 
         $('#tab-1-list').hide(); 
         $('#tab-2-list').hide(); 
        } 
       }); 
      }); 

Это мой html

<ul id="mylist"> 
      <li>one</li> 
      <li>two</li> 
      <li>three</li>   
     </ul> 
     <div id="tab-content"> 
      <ul id="tab-1-list"> 
       <li>This is a bullet point for Tab 1</li> 
       <li>This is a bullet point for Tab 1</li> 
       <li>This is a bullet point for Tab 1</li> 
      </ul> 
      <ul id="tab-2-list"> 
       <li>This is a bullet point for Tab 2</li> 
       <li>This is a bullet point for Tab 2</li> 
       <li>This is a bullet point for Tab 2</li> 
      </ul> 
      <ul id="tab-3-list"> 
       <li>This is a bullet point for Tab 3</li> 
       <li>This is a bullet point for Tab 3</li> 
       <li>This is a bullet point for Tab 3</li> 
      </ul> 
     </div> 

Это мой css

#tab-1-list{display:none;} 
#tab-2-list{display:none;} 
#tab-3-list{display:none;} 

Спасибо

+1

Я не уверен, что это можно ответить (как «это лучший способ»), поскольку есть много различных способов, чтобы получить это сделано, как вы сделали это, все средства в порядке. Являются ли они более короткими способами. Да, конечно, но ничто не будет драматически влиять на простую вещь, подобную этой. Что касается бита «если там, где есть 20 вкладок», вы можете поместить класс во все содержимое вкладки или просто скрыть всех дочерних элементов родителя, а затем показать нужную вкладку. – Ruddy

+0

Да, я согласен с вами в том, что существует определенно большое количество способов сделать это, я думаю, в прошлом, когда я делал что-то «по-моему», это противоречит лучшей практике, поэтому мне было любопытно, спасибо за вашу помощь. – Javacadabra

+1

@Javacadabra: [здесь] (http://jsfiddle.net/tj_vantoll/nn2Qw/) довольно простая реализация, если это то, что вы ищете – jbutler483

ответ

1

Наиболее эффективным способом будет использование классов вместо идентификаторов.

Приложить событие щелчка к li с, которые являются потомками #mylist, получить индекс текущего li, которая была нажата с помощью $(this) .index() и .show() элемента с именем класса .tab, который имеет тот же индекс, используя селектор .eq().

$('#mylist > li').click(function() { 
 
    $('.tab').hide().eq($(this).index()).show(); 
 
});
.tab { 
 
    display: none; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<ul id="mylist"> 
 
    <li>one</li> 
 
    <li>two</li> 
 
    <li>three</li> 
 
</ul> 
 
<div id="tab-content"> 
 
    <ul class="tab" id="tab-1-list"> 
 
    <li>This is a bullet point for Tab 1</li> 
 
    <li>This is a bullet point for Tab 1</li> 
 
    <li>This is a bullet point for Tab 1</li> 
 
    </ul> 
 
    <ul class="tab" id="tab-2-list"> 
 
    <li>This is a bullet point for Tab 2</li> 
 
    <li>This is a bullet point for Tab 2</li> 
 
    <li>This is a bullet point for Tab 2</li> 
 
    </ul> 
 
    <ul class="tab" id="tab-3-list"> 
 
    <li>This is a bullet point for Tab 3</li> 
 
    <li>This is a bullet point for Tab 3</li> 
 
    <li>This is a bullet point for Tab 3</li> 
 
    </ul> 
 
</div>


Вы также можете использовать .fadeIn() и .fadeOut() вместо .show() и .hide() соответственно.

$('#mylist > li').click(function() { 
 
    $('.tab').fadeOut().eq($(this).index()).fadeIn(); 
 
});
#tab-content { 
 
    position: relative; 
 
} 
 
.tab { 
 
    position: absolute; 
 
    display: none; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<ul id="mylist"> 
 
    <li>one</li> 
 
    <li>two</li> 
 
    <li>three</li> 
 
</ul> 
 
<div id="tab-content"> 
 
    <ul class="tab" id="tab-1-list"> 
 
    <li>This is a bullet point for Tab 1</li> 
 
    <li>This is a bullet point for Tab 1</li> 
 
    <li>This is a bullet point for Tab 1</li> 
 
    </ul> 
 
    <ul class="tab" id="tab-2-list"> 
 
    <li>This is a bullet point for Tab 2</li> 
 
    <li>This is a bullet point for Tab 2</li> 
 
    <li>This is a bullet point for Tab 2</li> 
 
    </ul> 
 
    <ul class="tab" id="tab-3-list"> 
 
    <li>This is a bullet point for Tab 3</li> 
 
    <li>This is a bullet point for Tab 3</li> 
 
    <li>This is a bullet point for Tab 3</li> 
 
    </ul> 
 
</div>

+1

Огромное вам спасибо, это фантастический ответ – Javacadabra

+0

@Javacadabra - Добро пожаловать. :) –

+0

Могу я задать только один вопрос @ chipChocolate.py, я немного смущен относительно того, что '$ (. Tab).hide() 'часть вашего ответа делает, я понимаю, что все остальное, это просто бит. Не могли бы вы объяснить? – Javacadabra

1

Попробуйте так:

DEMO

$(document).ready(function() { 
    $('#mylist li').click(function (e) { 
     var index = +($(this).index())+1; 
     $('#tab-content ul').hide(); 
     $('#tab-'+index+'-list').show(); 
    }); 
}); 
1

Это может быть возможность:

HTLM

<ul id="mylist"> 
    <li rel="tab-1-list">one</li> 
    <li rel="tab-2-list">two</li> 
    <li rel="tab-3-list">three</li>   
</ul> 

я добавил атрибут rel для ссылки на соответствующие вкладки с помощью id

JQuery

$('#mylist li').click(function (e) { 
    rel = $(this).attr('rel'); 

    $('#tab-content ul').hide(); //hide all tabs 

    $('#' + rel).show(); //just show the corresponding 
}); 

DEMO

Кроме того, вы можете взглянуть на Jquery UIs tabs. Here - это несколько примеров того, как вы можете стилизовать эти вкладки.

2

Я могу предложить вам использовать JQuery UI (http://jqueryui.com/).
Многие другие функции тоже.

  • аккордеона
  • Автодополнение
  • Кнопка
  • Datepicker
  • Диалог
  • Меню
  • т.д.

JQuery UI вкладки Пример:

<!doctype html> 
<html lang="en"> 
<head> 
    <meta charset="utf-8"> 
    <title>jQuery UI Tabs - Default functionality</title> 
    <link rel="stylesheet" href="//code.jquery.com/ui/1.11.2/themes/smoothness/jquery-ui.css"> 
    <script src="//code.jquery.com/jquery-1.10.2.js"></script> 
    <script src="//code.jquery.com/ui/1.11.2/jquery-ui.js"></script> 
    <link rel="stylesheet" href="/resources/demos/style.css"> 
    <script> 
    $(function() { 
    $("#tabs").tabs(); 
    }); 
    </script> 
</head> 
<body> 

<div id="tabs"> 
    <ul> 
    <li><a href="#tabs-1">Nunc tincidunt</a></li> 
    <li><a href="#tabs-2">Proin dolor</a></li> 
    <li><a href="#tabs-3">Aenean lacinia</a></li> 
    </ul> 
    <div id="tabs-1"> 
    <p>Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. Donec sollicitudin mi sit amet mauris. Nam elementum quam ullamcorper ante. Etiam aliquet massa et lorem. Mauris dapibus lacus auctor risus. Aenean tempor ullamcorper leo. Vivamus sed magna quis ligula eleifend adipiscing. Duis orci. Aliquam sodales tortor vitae ipsum. Aliquam nulla. Duis aliquam molestie erat. Ut et mauris vel pede varius sollicitudin. Sed ut dolor nec orci tincidunt interdum. Phasellus ipsum. Nunc tristique tempus lectus.</p> 
    </div> 
    <div id="tabs-2"> 
    <p>Morbi tincidunt, dui sit amet facilisis feugiat, odio metus gravida ante, ut pharetra massa metus id nunc. Duis scelerisque molestie turpis. Sed fringilla, massa eget luctus malesuada, metus eros molestie lectus, ut tempus eros massa ut dolor. Aenean aliquet fringilla sem. Suspendisse sed ligula in ligula suscipit aliquam. Praesent in eros vestibulum mi adipiscing adipiscing. Morbi facilisis. Curabitur ornare consequat nunc. Aenean vel metus. Ut posuere viverra nulla. Aliquam erat volutpat. Pellentesque convallis. Maecenas feugiat, tellus pellentesque pretium posuere, felis lorem euismod felis, eu ornare leo nisi vel felis. Mauris consectetur tortor et purus.</p> 
    </div> 
    <div id="tabs-3"> 
    <p>Mauris eleifend est et turpis. Duis id erat. Suspendisse potenti. Aliquam vulputate, pede vel vehicula accumsan, mi neque rutrum erat, eu congue orci lorem eget lorem. Vestibulum non ante. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Fusce sodales. Quisque eu urna vel enim commodo pellentesque. Praesent eu risus hendrerit ligula tempus pretium. Curabitur lorem enim, pretium nec, feugiat nec, luctus a, lacus.</p> 
    <p>Duis cursus. Maecenas ligula eros, blandit nec, pharetra at, semper at, magna. Nullam ac lacus. Nulla facilisi. Praesent viverra justo vitae neque. Praesent blandit adipiscing velit. Suspendisse potenti. Donec mattis, pede vel pharetra blandit, magna ligula faucibus eros, id euismod lacus dolor eget odio. Nam scelerisque. Donec non libero sed nulla mattis commodo. Ut sagittis. Donec nisi lectus, feugiat porttitor, tempor ac, tempor vitae, pede. Aenean vehicula velit eu tellus interdum rutrum. Maecenas commodo. Pellentesque nec elit. Fusce in lacus. Vivamus a libero vitae lectus hendrerit hendrerit.</p> 
    </div> 
</div> 


</body> 
</html> 

DEMO

+0

Я буду использовать 'JQuery UI' в будущих проектах, и я просто хотел бы лучше понять логику того, что происходит. Спасибо за ваш ответ – Javacadabra

Смежные вопросы