Top.Mail.Ru
Ответы

Как по проще, зная элемент, определить его номер в массиве?

Допустим, в слайдере все его изображения хранятся в некотором массиве arr. Демонстрируется arr[i] изображение. Получить предыдущее/следующее можно arr[--i] / arr[++i]. Но где то на страничке демонстрируется набор уменьшенных слайдов, кликнув на любой, мы его увидим. Так как, скажем, при клике на img_chosen.jpg мы узнаем его i-й номер в массиве? Есть, конечно, перебор со всякими пузырьковыми сортировками, функции для проверки, выше/ниже объект находится в иерархии DOM, но неужели нет чего попроще?
Еще раз:
Легко:
arr[i] => значение
Как имея "значение", попроще выяснить его i ?

Дополнен

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

Дополнен

Кажется, вариант для некоторых случаев (для DOM -элементов) нашел. Если каждому элементу присвоить номер в атрибуте data-имя_аттриб, то валидацию вроде пройдет. Т. е. data-position = 1, data-position = 2... Причем везде кроме 10-Ослика и ниже можно обратиться к таким атрибутам по свойству: элемент. dataset.имя_аттриб
i = imgChosen.dataset.position

По дате
По рейтингу
Аватар пользователя
Новичок
8лет

Сразу видно, что два предыдущих ответа от тех, кто не знает языка

array.indexOf('значение')
Вернет ключ, если элемент найден (от 0 и больше)
Если значения нет, то вернет -1
Важно: indexOf проводит строгое сравнивание (то есть ===)

Аватар пользователя
Искусственный Интеллект
8лет

Для массива только перебор

Аватар пользователя
Высший разум
8лет

А зачем использовать нестандартные атрибуты? Для этих целей существует специальный тип произвольных пользовательских атрибутов, имеющих префикс "data-". Так что можешь написать data-id="3" или data-number="17" - и это будет полностью соответствовать стандарту HTML. И для работы с data-атрибутами в JavaScript есть специальный набор методов.

Подробности: https://webref.ru/html/attr/data

Аватар пользователя
Искусственный Интеллект
8лет

Ассоциативный массив используй, помещай данные не по индексу, а по имени, например.