Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.12.2016, 19:52
Профессор
Отправить личное сообщение для DivMan Посмотреть профиль Найти все сообщения от DivMan
 
Регистрация: 08.03.2016
Сообщений: 429

Самый простой код табов
Существует ли js код ещё проще, чем этот?

<!DOCTYPE html>
<html>

  <head>
    <style>
      span{
        display: inline-block;
        margin-right: 10px;
      }
      
      .content{
        width: 130px;
      }
      
      .none{
        display: none;
      }
	</style>
  </head>

  <body>
    	<span class='tab'>Tab1</span>
  <span class='tab'>Tab2</span>
  <span class='tab'>Tab3</span>

<div class="content">
  <div class="c">aaaa a aaaaa  aaaaaa a a a a aaaaaa  aaaaaa aaaaa</div>
  <div class="c none">bbbb bbbb bbbbb bbbb bbbb bbbbb bbbb bbbbb bbbb bbbbb</div>
  <div class="c none">ccc ccccc cccccc ccccc cccccc ccccc ccccc</div>
</div>

<script>
  var tabs = document.querySelectorAll('.tab')
var con = document.querySelectorAll('.c')

for (var i = 0; i < tabs.length; i++) {
  tabs[i].addEventListener('click', function(e) {
    for (var k = 0; k < tabs.length; k++) {
      if (this == tabs[k]) {
        con[k].classList.remove('none');
      } else {
        con[k].classList.add('none');
      }
    }
  })
}
</script>
  </body>

</html>
Ответить с цитированием
  #2 (permalink)  
Старый 30.12.2016, 20:02
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

DivMan,
<!DOCTYPE html>
<html>

  <head>
    <style>
      span{
        display: inline-block;
        margin-right: 10px;
      }

      .content{
        width: 130px;
      }

      .none{
        display: none;
      }
  </style>
  </head>

  <body>
    	<span class='tab'>Tab1</span>
  <span class='tab'>Tab2</span>
  <span class='tab'>Tab3</span>

<div class="content">
  <div class="c">aaaa a aaaaa  aaaaaa a a a a aaaaaa  aaaaaa aaaaa</div>
  <div class="c none">bbbb bbbb bbbbb bbbb bbbb bbbbb bbbb bbbbb bbbb bbbbb</div>
  <div class="c none">ccc ccccc cccccc ccccc cccccc ccccc ccccc</div>
</div>

<script>
var tabs = document.querySelectorAll(".tab");
var con = document.querySelectorAll(".c");
var temp = con[0];
[].forEach.call(tabs, function(item, i) {
    item.addEventListener("click", function() {
        temp.classList.add("none");
        temp = con[i];
        temp.classList.remove("none")
    })
});
</script>
  </body>

</html>

Последний раз редактировалось рони, 30.12.2016 в 20:06.
Ответить с цитированием
  #3 (permalink)  
Старый 30.12.2016, 20:31
Профессор
Отправить личное сообщение для DivMan Посмотреть профиль Найти все сообщения от DivMan
 
Регистрация: 08.03.2016
Сообщений: 429

А зачем использовать call, если без него работает?

<!DOCTYPE html>
<html>

  <head>
    <style>
      span{
        display: inline-block;
        margin-right: 10px;
      }

      .content{
        width: 130px;
      }

      .none{
        display: none;
      }
  </style>
  </head>

  <body>
    	<span class='tab'>Tab1</span>
  <span class='tab'>Tab2</span>
  <span class='tab'>Tab3</span>

<div class="content">
  <div class="c">aaaa a aaaaa  aaaaaa a a a a aaaaaa  aaaaaa aaaaa</div>
  <div class="c none">bbbb bbbb bbbbb bbbb bbbb bbbbb bbbb bbbbb bbbb bbbbb</div>
  <div class="c none">ccc ccccc cccccc ccccc cccccc ccccc ccccc</div>
</div>

<script>
var tabs = document.querySelectorAll(".tab");
var con = document.querySelectorAll(".c");
var temp = con[0];

tabs.forEach(function(item,i){
	item.addEventListener("click", function() {
        temp.classList.add("none");
        temp = con[i];
        temp.classList.remove("none")
    })
})
</script>
  </body>

</html>
Ответить с цитированием
  #4 (permalink)  
Старый 30.12.2016, 20:38
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

Сообщение от DivMan
А зачем использовать call, если без него работает?
не везде ещё
Ответить с цитированием
  #5 (permalink)  
Старый 30.12.2016, 20:51
Профессор
Отправить личное сообщение для DivMan Посмотреть профиль Найти все сообщения от DivMan
 
Регистрация: 08.03.2016
Сообщений: 429

Сообщение от рони Посмотреть сообщение
не везде ещё
Но в этом же примере работает
Ответить с цитированием
  #6 (permalink)  
Старый 30.12.2016, 21:07
Аватар для GuardCat
Просто любитель
Отправить личное сообщение для GuardCat Посмотреть профиль Найти все сообщения от GuardCat
 
Регистрация: 13.09.2011
Сообщений: 300

Как вариант, можно вручную указать каким контентом управляет таб, тогда достаточно одного обработчика. Прятать предыдущий можно по селектору.

<!DOCTYPE html>
<html>
 
  <head>
    <style>
      span{
        display: inline-block;
        margin-right: 10px;
      }
 
      .content{
        width: 130px;
      }
 
      .none{
        display: none;
      }
  </style>
  </head>
 
  <body>
  <div class="tabs">
     <span class='tab' data-content="0">Tab1</span>
     <span class='tab' data-content="1">Tab2</span>
     <span class='tab' data-content="2">Tab3</span>
  </div> 
 
  <div class="content">
    <div class="c">aaaa a aaaaa  aaaaaa a a a a aaaaaa  aaaaaa aaaaa</div>
    <div class="c none">bbbb bbbb bbbbb bbbb bbbb bbbbb bbbb bbbbb bbbb bbbbb</div>
    <div class="c none">ccc ccccc cccccc ccccc cccccc ccccc ccccc</div>
  </div>
 
<script>
var contentWrap = document.querySelector(".content");
var content = document.querySelectorAll(".c");
var tabs = document.querySelector(".tabs");
tabs.addEventListener( "click", function(e) {
  contentWrap.querySelector( "div:not(.none)" ).classList.add("none")
  content[ e.target.getAttribute("data-content") ].classList.remove("none")
} )
</script>
  </body>
 
</html>
Ответить с цитированием
  #7 (permalink)  
Старый 30.12.2016, 21:33
Профессор
Отправить личное сообщение для DivMan Посмотреть профиль Найти все сообщения от DivMan
 
Регистрация: 08.03.2016
Сообщений: 429

Попробовал на планшета и без call не работает
Ответить с цитированием
  #8 (permalink)  
Старый 30.12.2016, 22:39
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

Сообщение от DivMan
Попробовал на планшета и без call не работает
браузеры обычно проверяют, а не железо.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите к js коду, написать html код Modrih Элементы интерфейса 8 16.06.2015 18:08
Как подгрузить код JS динамически? zhurchik Общие вопросы Javascript 22 02.02.2015 14:16
Доработать простой код на JS Айратиус Элементы интерфейса 4 13.11.2014 09:00
Сделать код функцией и вызвать её в другой функции. light Общие вопросы Javascript 1 19.09.2014 20:18
код нe работает в фаирфохе dadli Javascript под браузер 2 28.01.2012 21:18