Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.70/40: Рейтинг темы: голосов - 40, средняя оценка - 4.70
0 / 0 / 0
Регистрация: 08.02.2018
Сообщений: 14

При клике на элемент одного массива изменить элемент другого массива с таким же индексом

16.02.2018, 15:57. Показов 7602. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет друзья. Возник вопрос. Есть такая разметка:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<section>
    <div class="mass-1"></div>
    <div class="mass-1"></div>
    <div class="mass-1"></div>
    <div class="mass-1"></div>
    <div class="mass-1"></div>
</section>
 
<section>
    <div class="mass-2"></div>
    <div class="mass-2"></div>
    <div class="mass-2"></div>
    <div class="mass-2"></div>
    <div class="mass-2"></div>
    <div class="mass-2"></div>
</section>
Мне нужно при клике на например второй div c классом mass-1 изменять второй div с классом mass 2, и так далее
Как я видел решение этой задачи:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
var massOne = document.getElementsByClassName('mass-1');
var massTwo = document.getElementsByClassName('mass-2');
 
for(var i=0;_i<massOne.length; i++) {
    massOne[i].onclick = function() {
        if(massTwo[_i].style.display == 'none') {
            massTwo[_i].style.display = ''";
        }
        else {
            massTwo[_i].style.display = 'none'
        }
    }
}
Не пойму где мой косяк? По идее должно же отрабатывать. Помогите пожалуйста разобраться с проблемой)

Добавлено через 40 минут
Или еще проще сформулирую вопрос. Как при клике по элементу массива (в данном случае массива дивов с классом mass-1 ). получить элемент массива дивов с классом mass-2 с таким же индексом?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.02.2018, 15:57
Ответы с готовыми решениями:

Получение [i] массива при клике и его родительский элемент в массиве
Есть такой код: for (i = 0; i &lt;data.length; i++){ let names = data.name; let img = document.createElement('img'); ...

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

Сравнить элемент одного массива со всеми элементами другого массива
Есть массив с разрешеными символами (английский алфавит) И есть массив со всеми введёнными пользователем символами...

10
566 / 465 / 183
Регистрация: 14.10.2017
Сообщений: 1,259
16.02.2018, 16:18
JavaScript
1
2
3
4
5
6
7
8
9
for(var i=0;i<massOne.length; i++) {
    (function(index) {massOne[index].onclick = function() {
        if(massTwo[index].style.display == 'none') 
            massTwo[index].style.display = '';
        else 
            massTwo[index].style.display = 'none'
        }
    })(i);
}
1
707 / 309 / 191
Регистрация: 05.03.2015
Сообщений: 822
16.02.2018, 17:04
Более читабельный и современный вариант:
CSS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
section{
  display: flex;
}
div{
  height: 40px;
  width: 40px;
  background-color: lightgreen;
  margin: 5px;
}
.mass-2{
  background-color: lightblue;
}
 
/* важен  только этот класс, остальные стили на ваше усмотрение */
.hidden{
  display: none;
}
JavaScript
1
2
3
4
5
6
var massOne = Array.from(document.getElementsByClassName('mass-1'));
 
massOne.forEach((item, index) => {
  const massTwo = Array.from(document.getElementsByClassName('mass-2'));
  item.onclick = () => massTwo[index].classList.toggle('hidden')
})
2
0 / 0 / 0
Регистрация: 08.02.2018
Сообщений: 14
16.02.2018, 22:43  [ТС]
Спасибо всем за помощь!!!)
0
566 / 465 / 183
Регистрация: 14.10.2017
Сообщений: 1,259
17.02.2018, 04:28
msheal, при каждой итерации forEach создается новый const massTwo ?
0
707 / 309 / 191
Регистрация: 05.03.2015
Сообщений: 822
17.02.2018, 10:03
klopp, ага, и это плохо, надо вывести отдельно) С другой стороны, пока итерации измеряются десятками, разницу заметить будет трудно
0
0 / 0 / 0
Регистрация: 08.02.2018
Сообщений: 14
17.02.2018, 11:32  [ТС]
Уважаемый Клоп, а можете подсказать, что значит эта строка, в частности интересует параметр index, как это работает? Искал инфу, и что то не нашел ничего толкового. Хотя может плохо искал, допускаю=)
JavaScript
1
 (function(index) {massOne[index].onclick = function()
Добавлено через 2 минуты
И зачем в конце цикла переменная i, она же в условии цикла считается? })(i); Зачем ее выводить в конце?

Добавлено через 3 минуты
К вам тоже возник вопрос, как понять этот синтаксис
Цитата Сообщение от msheal Посмотреть сообщение
() =>
. Может это и примитивный вопрос, но я раньше не встречал просто такую запись=)
0
707 / 309 / 191
Регистрация: 05.03.2015
Сообщений: 822
17.02.2018, 11:39
Цитата Сообщение от Понюшка Табаку Посмотреть сообщение
как понять этот синтаксис
это стрелочные функции из ES6. Два куска кода ниже делают одно и то же:
JavaScript
1
2
3
4
5
6
7
data.map(function(item) {
  console.log(item)
})
 
data.map((item) => {
  console.log(item)
})
На самом деле разница не только в сокращенном синтаксисе, но и в том, что стрелочные функции не создают собственный контекст (this), а используют значение this окружающего контекста
0
0 / 0 / 0
Регистрация: 08.02.2018
Сообщений: 14
17.02.2018, 11:44  [ТС]
Я понял, спасибо за инфо!
0
707 / 309 / 191
Регистрация: 05.03.2015
Сообщений: 822
17.02.2018, 11:49
Цитата Сообщение от Понюшка Табаку Посмотреть сообщение
что значит эта строка, в частности интересует параметр index, как это работает? Искал инфу, и что то не нашел ничего толкового
это анонимная самовызывающаяся функция, которая существует лишь для того, чтобы создать новый контекст. Попробуйте ее убрать и передать индекс напрямую, увидите результат)

К слову, избавиться от этой не самой понятной и очевидной конструкции можно просто объявляя переменную-счетчик с помощью let:
JavaScript
1
2
3
4
5
6
7
8
9
for(let i=0;i<massOne.length; i++) { // var i = 0;... работать не будет и финт с (function(index){})(i) будет необходим
    massOne[i].onclick = function() {
      console.log(i)
        if(massTwo[i].style.display == 'none') 
            massTwo[i].style.display = '';
        else 
            massTwo[i].style.display = 'none'
        }
}
1
0 / 0 / 0
Регистрация: 08.02.2018
Сообщений: 14
17.02.2018, 21:39  [ТС]
Спасибо за информацию, узнал пару новых для себя нюансов=)))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.02.2018, 21:39
Помогаю со студенческими работами здесь

Проверить по очереди один элемент одного массива с каждым элементом другого массива
подскажите как проверить по очереди один элемент одного массива с каждым элементом другого массива?

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

Удалить из массива элемент с индексом k, сдвинув влево все элементы, стоящие правее элемента с индексом k
Дан массив из N элементов и номер элемента в массиве k. Удалите из массива элемент с индексом k, сдвинув влево все элементы, стоящие...

Записать два элемента одного массива, как один элемент другого
Здравствуйте) есть такое задание: нужно составить таблицу истинности(дискретная математика). И в процессе выполнения нужно записать...

При выборе одного из значений массива и вызове функции всегда возвращается [0] элемент массива
&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;link rel=&quot;stylesheet&quot; href=&quot;jquery-ui_1.10.3.css&quot; /&gt; &lt;script src=&quot;jquery-3.3.1.min.js&quot;&gt;&lt;/script&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru