Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Как обойти присвоение одинаковых id двум блокам? (https://javascript.ru/forum/jquery/75071-kak-obojjti-prisvoenie-odinakovykh-id-dvum-blokam.html)

NeonMan 30.08.2018 21:39

Как обойти присвоение одинаковых id двум блокам?
 
Подскажите пожалуйста, есть функция:
$('.year-list li:first').addClass('year-list__item_active');
    $('.graph-text').hide();
    $('.graph-text:first').show();
    $('.year-list li').click (
        function () {
            $('.year-list li').removeClass('year-list__item_active');
            $(this).addClass('year-list__item_active');
            $('.graph-text').hide();
            var activeItem = $(this).find('a').attr('href');
            $(activeItem).fadeIn(600);
            return false;  
});

Здесь по клику на ссылку открывается блок с id, который прописан в ссылке href="#id"
Нужно что бы открывалось два блока сразу, они разные по содержанию, но должны оба открываться по нажатию на ссылку, одинаковые id присвоить двум блокам нельзя, подскажите как поступить в такой ситуации?

Aetae 30.08.2018 21:50

Если в лоб, то например так
$('[id^="' + activeItem.slice(1) + "]').fadeIn(600);
Применится ко всем элементам, id которых начинается с #id: #id, #id2, #id-парам-пам-пам...

NeonMan 30.08.2018 22:13

спасибо

NeonMan 30.08.2018 22:21

Но это нужно прописать в href="#id1, #id2" что бы оба открылись или как?

рони 30.08.2018 22:27

NeonMan,
сделайте класс нужным блокам

NeonMan 30.08.2018 22:36

класс задам class="class1" class="class2" для нужных блоков, тогда что писать в href ссылки, по нажатию на которую они открываются?

laimas 30.08.2018 22:44

Цитата:

Сообщение от NeonMan
что бы открывалось два блока сразу, они разные по содержанию, но должны оба открываться

Значит их нужно сгруппировать, классом ли, id или общим родителем.

рони 30.08.2018 22:49

Цитата:

Сообщение от NeonMan
тогда что писать в href ссылки, по нажатию на которую они открываются?

ничего
<a href="#" data-cls=".red"></a>
<div  class="red"></div>
<div  class="red"></div>
<div  class="red"></div>


var activeItem = $(this).find('a').data('cls');

NeonMan 30.08.2018 22:49

И может быть Вы сталкивались с таким моментом, тут когда жмешь на год, внизу добавляется подчеркивание с кругом на конце, жмешь на следующий, добавляется подчеркивание дальше, нажимаешь на предыдущий, убирается, нажимаешь на три назад, убирается с трех

http://joxi.ru/RmzQkQXC06VJMr

И можно ли удалить созданную тему? В разделе форматирования не нашел.

NeonMan 30.08.2018 22:50

отличное решение! спасибо (data-cls)

рони 30.08.2018 23:03

Цитата:

Сообщение от NeonMan
внизу добавляется подчеркивание с кругом на конце,

наверно одного css и html достаточно, а так смотрите плагины типа
http://ionden.com/a/plugins/ion.rangeSlider/demo.html

рони 31.08.2018 00:03

NeonMan,
набросок ... лучше к специлистам css
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  div{
      counter-reset: num 2000;
      display: flex;
      width: 500px;
  }

  [name="line"]{
      display: none;
  }

  label:before{
      counter-increment: num ;
      content:  counter(num);
      display: block;
      width: 100px;
      height: 4px;
      background-color: rgba(255, 0, 255, 1);
       line-height: 30px;
  }
  [name="line"]:checked ~ label:before{
     background-color: rgba(240, 248, 255, 1);
  }
   label:nth-of-type(5):before{
       width: 0px;
  }
  [name="line"]:checked + label:after{
      margin-top: -6px;
      content:'';
      display: block;
      width: 8px;
      height: 8px;
      border-radius: 50%;
      background-color: rgba(255, 0, 255, 1);
  }

</style>

</head>

<body>
<div>
<input name="line" type="radio" id="line1" ><label for="line1"></label>
<input name="line" type="radio" id="line2" ><label for="line2"></label>
<input name="line" type="radio" id="line3" checked="checked" ><label for="line3"></label>
<input name="line" type="radio" id="line4" ><label for="line4"></label>
<input name="line" type="radio" id="line5" ><label for="line5"></label>

</div>

</body>
</html>

NeonMan 31.08.2018 16:40

о класс, то что нужно! Если бы еще на графике двигались точки по кривой параллельно, может и такие плагины знаете? может Вам этот знаком? chartjs.org или аналог, но где можно двигать обекты ввиде точек скажем, по кривой

Aetae 31.08.2018 16:50

NeonMan, соедени с этим https://javascript.ru/forum/jquery/7...tml#post493225 и css trasition.))

рони 31.08.2018 17:12

15 лучших JavaScript-библиотек для построения диаграмм и сводных таблиц

рони 31.08.2018 17:18

NeonMan,
Line_Charts

NeonMan 31.08.2018 17:40

Спасибо! Сейчас всё гляну

NeonMan 31.08.2018 18:11

Вообще мне нужно сделать вот такой график
https://yadi.sk/d/nCR6XKHu3ajoyS
Если Вы такой раньше делали, то хорошо, если бы Вы указали на более конкретные библиотеки для него. У меня просто мало времени. Пара дней

NeonMan 31.08.2018 18:15

15 лучших JavaScript-библиотек для построения диаграмм и сводных таблиц
Из всего этого я выбрал chartJs там в API вроде есть события и анимация, но как привязывать объекты к графику и заставить их двигаться по графику, причем по клику внизу на разделы годов - это самое сложное

NeonMan 31.08.2018 19:00

Классная фишка через counter-reset: num 2000; задавать нумерацию годам, но там (в макете) года идут не по порядку, кое где перескакивают через 2-3 значения, можно как-то при таком способе прописать вручную года?

рони 31.08.2018 19:08

Цитата:

Сообщение от NeonMan
перескакивают через 2-3 значения,

строка 42 и 45
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  div{
      counter-reset: num 2000;
      display: flex;
      width: 500px;
  }

  [name="line"]{
      display: none;
  }

  label:before{
      counter-increment: num ;
      content:  counter(num);
      display: block;
      width: 100px;
      height: 4px;
      background-color: rgba(255, 0, 255, 1);
       line-height: 30px;
  }
  [name="line"]:checked ~ label:before{
     background-color: rgba(240, 248, 255, 1);
  }
   label:nth-of-type(5):before{
       width: 0px;
  }
  [name="line"]:checked + label:after{
      margin-top: -6px;
      content:'';
      display: block;
      width: 8px;
      height: 8px;
      border-radius: 50%;
      background-color: rgba(255, 0, 255, 1);
  }
   label:nth-of-type(2):before{
       counter-increment: num 5 ;
  }
  label:nth-of-type(5):before{
       counter-increment: num 2 ;
  }
</style>

</head>

<body>
<div>
<input name="line" type="radio" id="line1" ><label for="line1"></label>
<input name="line" type="radio" id="line2" ><label for="line2"></label>
<input name="line" type="radio" id="line3" checked="checked" ><label for="line3"></label>
<input name="line" type="radio" id="line4" ><label for="line4"></label>
<input name="line" type="radio" id="line5" ><label for="line5"></label>

</div>

</body>
</html>

рони 31.08.2018 19:15

Цитата:

Сообщение от NeonMan
можно как-то при таком способе прописать вручную года?

атрибут data-year
css строка 18
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  div{
      display: flex;
      width: 500px;
  }

  [name="line"]{
      display: none;
  }

  label:before{
      content:  attr(data-year);
      display: block;
      width: 100px;
      height: 4px;
      background-color: rgba(255, 0, 255, 1);
       line-height: 30px;
  }
  [name="line"]:checked ~ label:before{
     background-color: rgba(240, 248, 255, 1);
  }
   label:nth-of-type(5):before{
       width: 0px;
  }
  [name="line"]:checked + label:after{
      margin-top: -6px;
      content:'';
      display: block;
      width: 8px;
      height: 8px;
      border-radius: 50%;
      background-color: rgba(255, 0, 255, 1);
  }

</style>

</head>

<body>
<div>
<input name="line" type="radio" id="line1" ><label for="line1" data-year="100"></label>
<input name="line" type="radio" id="line2" ><label for="line2" data-year="109"></label>
<input name="line" type="radio" id="line3" checked="checked" ><label for="line3" data-year=700></label>
<input name="line" type="radio" id="line4" ><label for="line4" data-year="1"></label>
<input name="line" type="radio" id="line5" ><label for="line5" data-year="3"></label>

</div>

</body>
</html>

NeonMan 31.08.2018 19:29

атрибут data-значение удобная штука, раньше не знал о нем

NeonMan 31.08.2018 19:41

а здесь transition или animate jQuery можно добавить, что бы было ощущение что он едет, а не резко добавляется

рони 31.08.2018 20:26

Цитата:

Сообщение от NeonMan
а здесь transition

можно но лучше это сделает специалист по css
в jQuery UI есть слайдер, есть кучи других слайдеров.

рони 31.08.2018 21:12

NeonMan,
slider зависимый ползунок + создание шкалы

NeonMan 31.08.2018 22:25

Да на самом деле этого способа с инпутами вполне достаточно, только анимировать бы и всё, а так отличный вариант

NeonMan 31.08.2018 22:27

вот тут есть раздел анимации, Вы как думаете, это анимация всего графика или можно анимировать на нем объект?
http://www.chartjs.org/docs/latest/c...nimations.html

NeonMan 31.08.2018 22:32

есть ли разница между function() и function(event) jQuery

рони 31.08.2018 22:53

Цитата:

Сообщение от NeonMan
function()

это не будет работать в Firefox, если далее будет нужен event

NeonMan 31.08.2018 23:19

А тут еще вопрос появился, перестает работать радио почему-то ^^ после того как привязал событие
<div class="graph-year-list">
    <input name="year" type="radio" id="year-1994">
    <label for="year-1994" data-year="1994" data-cls=".year-1994"></label>
 
        <input name="year" type="radio" id="year-1995">
    <label for="year-1995" data-year="1995" data-cls=".year-1995"></label>         
</div>

$('.graph-text').hide();
    $('.graph-text:first').show();
    $('.graph-year-list label').click (
        function () {
            $('.graph-text').hide();
            var activeItem = $(this).data('cls');
            $(activeItem).fadeIn(600);
            return false; 
});

пробовал обернуть каждый label input в div и нажимая на див всё ровно не работает радио, если привязано событие

NeonMan 31.08.2018 23:21

Цитата:

Сообщение от рони (Сообщение 493763)
это не будет работать в Firefox, если далее будет нужен event

а Function (event) - это например какое событие?

рони 31.08.2018 23:42

Цитата:

Сообщение от NeonMan
это например какое событие?

любое

$("a").click(function () {
event.preventDefault()// здесь в Firefox будет ошибка.
})

рони 31.08.2018 23:46

Цитата:

Сообщение от NeonMan
А тут еще вопрос появился, перестает работать радио

делайте минимальный макет, а не обрывки кода, не заставляйте читателей в голове пасьянс раскладывать из вашего кода.

рони 31.08.2018 23:47

Цитата:

Сообщение от NeonMan
не работает радио

return false; уберите

NeonMan 01.09.2018 00:07

Цитата:

Сообщение от рони (Сообщение 493767)
делайте минимальный макет, а не обрывки кода, не заставляйте читателей в голове пасьянс раскладывать из вашего кода.

хорошо, конечно

NeonMan 01.09.2018 00:13

Цитата:

Сообщение от рони (Сообщение 493766)
любое

$("a").click(function () {
event.preventDefault()// здесь в Firefox будет ошибка.
})

Иными словами лучше везде прописывать Function(event) ? а не Function()

NeonMan 01.09.2018 00:48

Вот что у нас получилось

график анимировать пока не удается параллельно нажатию на год, так что наверное вставлю картинкой кривые графика, точки графика вырежу относительно каждого года на кривых графика и будут появляться они(точки) соответственно нажатию на каждый год, норм?)

рони 01.09.2018 02:17

NeonMan,
:victory:


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