Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Открыть/закрыть для всех блоков с одинаковым ID (https://javascript.ru/forum/misc/45531-otkryt-zakryt-dlya-vsekh-blokov-s-odinakovym-id.html)

FaustL 04.03.2014 19:45

Открыть/закрыть для всех блоков с одинаковым ID
 
Как сделать так, чтобы этот код заработал на всех ID?
#storyimg{display: none;}
<a class="yr" onclick="document.getElementById('storyimg').style.display=document.getElementById('storyimg').style.display=='block'?'none':'block';return(false)">Показать картинки</a>
<div id="storyimg">
  <img src="...">
</div>
<div id="storyimg">
  <img src="...">
</div>
<div id="storyimg">
  <img src="...">
</div>

Суть такая, на сайте есть статья с картинками, но иногда картинки просто мешают, хочется один текст. Для этого и использовал код выше. Он изначально скрывает картинку, которая находятся в div'е с id storyimg. А мне нужно чтобы он скрывал все имеющиеся дивы с id storyimg.

animhotep 04.03.2014 19:47

дивов с id не может быть больше одного на странице, вместо id используй class

FaustL 04.03.2014 19:56

Цитата:

Сообщение от animhotep (Сообщение 300980)
дивов с id не может быть больше одного на странице, вместо id используй class

В итоге данный код перестаёт работать. Я заменил на:
.storyimg{display: none;}
<a class="yr" onclick="document.getElementById('.storyimg').style.display=document.getElementById('.storyimg').style.display=='block'?'none':'block';return(false)">Показать картинки</a>
<div class="storyimg">
  <img src="...">
</div>
<div class="storyimg">
  <img src="...">
</div>
<div class="storyimg">
  <img src="...">
</div>

Подозреваю, что getElementById надо заменить на что-то другое?

animhotep 04.03.2014 19:58

именно, на getelementsbyclassname

FaustL 04.03.2014 20:06

Цитата:

Сообщение от animhotep (Сообщение 300986)
именно, на getelementsbyclassname

Не работает(
изменял на getElementsByClassName, так пробовал как ".storyimg", так "storyimg"

рони 04.03.2014 21:17

FaustL,
циклом по всему массиву getElementsByClassName

FaustL 04.03.2014 21:18

Цитата:

Сообщение от рони (Сообщение 301013)
FaustL,
циклом по всему массиву getElementsByClassName

Вот так у меня:
.storyimg{display: none;}
<a class="yr" onclick="document.getElementsByClassName('.storyimg').style.display=document.getElementsByClassName('.storyimg').style.display=='block'?'none':'block';return(false)">Показать картинки</a>
<div class="storyimg">
  <img src="...">
</div>
<div class="storyimg">
  <img src="...">
</div>
<div class="storyimg">
  <img src="...">
</div>


Где неправильно подскажите пожалуйста

рони 04.03.2014 21:29

FaustL,
создайте функцию и обработайте массив - нет у массива style

FaustL 04.03.2014 21:33

Цитата:

Сообщение от рони (Сообщение 301020)
FaustL,
создайте функцию и обработайте массив - нет у массива style

Прошу помогите в этом вопросе, я не силён в js.

рони 04.03.2014 21:42

FaustL,
:(
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  .storyimg{display: none;}
  </style>
  <script>
      var show;
     function toggle(cls)
     {
       show = !show
       var divs = document.getElementsByClassName(cls);
       for (var i=0; i<divs.length; i++)  {divs[i].style.display= show ? 'block':'none'}

     }
  </script>
</head>

<body>

<a class="yr" onclick="toggle('storyimg');return(false)">Показать картинки</a>
<div class="storyimg">
  <img src="...">
</div>
<div class="storyimg">
  <img src="...">
</div>
<div class="storyimg">
  <img src="...">
</div>

</body>

</html>

FaustL 04.03.2014 22:19

Спасибо вам огромное!

FaustL 22.03.2014 20:52

Всем снова привет! Возникла необходимость немного изменить этот код, а как не знаю.
В общем нужно, что бы это работало в определённом блоке:
<!DOCTYPE HTML>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  .storyimg{display: none;}
  </style>
  <script>
      var show;
     function toggle(cls)
     {
       show = !show
       var divs = document.getElementsByClassName(cls);
       for (var i=0; i<divs.length; i++)  {divs[i].style.display= show ? 'block':'none'}

     }
  </script>
</head>
<body>
<a class="yr" onclick="toggle('storyimg');return(false)">Показать картинки</a>

<div class="news-text-full">

<div class="storyimg">
  <img src="...">
</div>
<div class="storyimg">
  <img src="...">
</div>
<div class="storyimg">
  <img src="...">
</div>

</div>
</body>
</html>

Чтобы этот скрипт работал только в блоке .news-text-full
Заранее спасибо!

рони 22.03.2014 21:18

:write:
<!DOCTYPE HTML>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  .storyimg{display: none;}
  </style>
  <script>
      var show;
     function toggle(cls)
     {
       show = !show
       var divs = document.querySelectorAll(cls);
       for (var i=0; i<divs.length; i++)  {divs[i].style.display= show ? 'block':'none'}

     }
  </script>
</head>
<body>
<a class="yr" onclick="toggle('.news-text-full .storyimg');return(false)">Показать картинки</a>

<div class="news-text-full">

<div class="storyimg">
  <img src="...">
</div>
<div class="storyimg">
  <img src="...">
</div>
<div class="storyimg">
  <img src="...">
</div>

</div>
</body>
</html>

Здравствуйте!

Судя по вашему сообщению, вы ну совсем не знаете javascript.

Освойте основы языка и вопрос отпадет сам, полностью или частично.
А с чем не справитесь - поможем.

На сайте javascript можно начать изучать с учебника, раздел Основы javascript.
Возможно, вам также понадобится HTML - учебник есть, например, здесь: http://ru.html.net/tutorials/html/

Задавайте конкретные вопросы по ходу дела.

рони 22.03.2014 22:23

Ещё один вариант на тему показать скрыть со сменой текста
 
:write:
<!DOCTYPE HTML>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  .news-text-full div{display: none;}
  a{cursor: pointer;} 
  </style>
  <script>
var toggle = function (cls, yes, no) {
    var show;
    return function (obj) {
        show = !show;
        obj['textContent'||'text'] = show ? no : yes;
        var divs = document.querySelectorAll(cls);
        for (var i = 0; i < divs.length; i++) {
            divs[i].style.display = show ? 'block' : 'none'
        }
        return false
    }
};

var showNews = toggle('.news-text-full .storyimg','Показать картинки','Скрыть картинки'),
    showStory = toggle('.news-text-full .story','Показать картинки','Скрыть картинки');
  </script>
</head>
<body>
<a class="yr" onclick="return showNews(this)">Показать картинки</a>

<div class="news-text-full">

<div class="storyimg">
  <img src="...">
</div>
<div class="storyimg">
  <img src="...">
</div>
<div class="storyimg">
  <img src="...">
</div>

</div>
<br>
<a class="yr" onclick="return showStory(this)">Показать картинки</a>

<div class="news-text-full">

<div class="story">
  <img src="...">
</div>
<div class="story">
  <img src="...">
</div>
<div class="story">
  <img src="...">
</div>

</div>
</body>
</html>

Vlasenko Fedor 23.03.2014 03:21

http://jsfiddle.net/vlasenkofedor/zQ6ae/
демонстрация возможности :)


Часовой пояс GMT +3, время: 04:57.