|
1 / 1 / 0
Регистрация: 19.04.2021
Сообщений: 44
|
||||||
Элементы возвращаются неправильно12.07.2023, 20:11. Показов 953. Ответов 18
Метки нет (Все метки)
Мне нужна ваша помощь. Моя задача состоит в том, чтобы создать 100 div с помощью чистого JavaScript. Каждый div должен обладать следующей функциональностью: Каждый div имеет свое название, типа div1, div2, div3 и до 100. Предположим, зову я на 31, 45, 89, они перемещаюсь наверх. Теперь элементы у меня становятся
div89, div45, div31, div1, div2 и на месте тех, которые я забрал, идут: div30 - div32 - div33, div43 -div44 - div46 div88 – div90 – div91 Когда я щелкаю еще раз на поднявшиеся наверх элементы, они должны вернуться на предыдущие позиции. Проблема заключается в том, что они возвращаюсь назад, но в произвольные места списка (иногда нормально, иногда нет) и список у меня не выглядит поочередно. Где моя ошибка? Спасибо вам большое
1
|
||||||
| 12.07.2023, 20:11 | |
|
Ответы с готовыми решениями:
18
ASP.Core: не возвращаются элементы getElementsByClassName() == [0] Элементы неправильно заносятся в список Неправильно меняет элементы на нули |
|
Молодой техлид)
|
|
| 12.07.2023, 22:06 | |
|
Потому что ты работаешь с индексами массива
Пример 1 2 3 4 5 6 допустим мы переместили вперед 6 5 4, т.е. сначала 6 потом 5 потом 4 4 5 6 1 2 3 Для красоты демонстрации я считаю позиции/индекс элемента в массиве originalPositions не снуля как у тебя в коде а с 1, т.е. во второй строке это позиция а в первой значение 6 вернули на место 4 5 1 2 3 6 - значения 1 2 3 4 5 6 - индексы 4 вернули 5 1 2 4 3 6 - значения 1 2 3 4 5 6 - индексы 5 вернули 1 2 4 3 5 6 - значения 1 2 3 4 5 6 - индексы итого после всех возвратов получили 1 2 4 3 5 6 вместо 1 2 3 4 5 6 нужно перемещать элементы сравнивая значения, а не инндексы, ты только что продемострировал проблемы которую решает key в react
1
|
|
|
1 / 1 / 0
Регистрация: 19.04.2021
Сообщений: 44
|
|
| 12.07.2023, 22:24 [ТС] | |
|
Спасибо большое, однако я это задача для чистого js. Можете помочь мне это исправить? Буду очень благодарен
0
|
|
|
3503 / 1267 / 429
Регистрация: 24.07.2016
Сообщений: 1,890
|
||||||||
| 13.07.2023, 00:36 | ||||||||
0
|
||||||||
|
3503 / 1267 / 429
Регистрация: 24.07.2016
Сообщений: 1,890
|
|||||||
| 13.07.2023, 20:50 | |||||||
|
Дочитал...
Halland, задача в таком виде нерешаема, т.к. нет критерия очерёдности повторных кликов. Вот эта твоя фраза... Если тебя устроит вот такое, то держи ... поклацай, подумай
0
|
|||||||
|
89 / 74 / 24
Регистрация: 16.05.2023
Сообщений: 268
|
|||||||||||
| 13.07.2023, 23:16 | |||||||||||
Суть в том, что при первом клике идёт запись в атрибут оригинальной позиции, и добавляется класс selected (можно и без него). А при повторном клике, идёт перемещение на обратную позицию из атрибута. Ничего сложного Добавлено через 4 минуты А я понял в чём проблема
0
|
|||||||||||
|
3503 / 1267 / 429
Регистрация: 24.07.2016
Сообщений: 1,890
|
|
| 13.07.2023, 23:53 | |
|
0
|
|
|
89 / 74 / 24
Регистрация: 16.05.2023
Сообщений: 268
|
||
| 13.07.2023, 23:58 | ||
|
0
|
||
|
3503 / 1267 / 429
Регистрация: 24.07.2016
Сообщений: 1,890
|
||||
| 14.07.2023, 00:36 | ||||
event.target, то тоже получим баг, только с другим алгоритмом, нежели баг с индексами
0
|
||||
|
89 / 74 / 24
Регистрация: 16.05.2023
Сообщений: 268
|
||||||
| 14.07.2023, 00:45 | ||||||
|
Можно немного по другому решить задачу, всё таки сделать начальную метку. А потом бегать, и искать от куда родом данный div
1
|
||||||
|
3503 / 1267 / 429
Регистрация: 24.07.2016
Сообщений: 1,890
|
|||||||
| 14.07.2023, 01:48 | |||||||
1
|
|||||||
|
89 / 74 / 24
Регистрация: 16.05.2023
Сообщений: 268
|
||
| 14.07.2023, 02:46 | ||
|
0
|
||
|
Молодой техлид)
|
||
| 14.07.2023, 11:33 | ||
|
0
|
||
|
3503 / 1267 / 429
Регистрация: 24.07.2016
Сообщений: 1,890
|
|||||||||||||||||||||||||||
| 15.07.2023, 01:07 | |||||||||||||||||||||||||||
имеем на выхлопе...
То есть, жмём на 3 и элемент перемещается под двойку... У нас ведь нет чёткого критерия последовательности, какой элемент возвращать на место, так что рандомно жмём тройку...
1
|
|||||||||||||||||||||||||||
|
Молодой техлид)
|
|||
| 15.07.2023, 01:53 | |||
|
4 2 1 3 5 6 после этого у нас будет снова два массива, массивы условно разделены пременной счетчиком который будет равен 2 (до клика по 3 был равен 3), на самом деле это один массив точнее HTMLCollection 4 2(отсюда можно брать и сюда можно перемещать новые элементы) и 1 3 5 6 (тут ищем место вставки и вставляем)
0
|
|||
|
89 / 74 / 24
Регистрация: 16.05.2023
Сообщений: 268
|
|||||||
| 15.07.2023, 11:01 | |||||||
|
Более правильная реализация, с данным алгоритмом
0
|
|||||||
|
Молодой техлид)
|
|
| 15.07.2023, 12:59 | |
|
не хочу спорить на счет правильно не правильно, просто потому что кто - то это сказал...
у тебя тоже есть подсчет перемещенных/выбранных(selected) элементов, только другим способом...
0
|
|
|
89 / 74 / 24
Регистрация: 16.05.2023
Сообщений: 268
|
||||
| 15.07.2023, 15:47 | ||||
|
Данный код отлично решает задачу перемещения выбранного элемента наверх или вниз. В данном случае, код использует цикл for, чтобы найти правильное место для перемещения выбранного элемента. В цикле проходится по каждому дочернему элементу контейнера и проверяет условие: если текущий элемент не содержит класс "selected" (то есть не является выбранным) и его оригинальная позиция (originalPos) больше или равна оригинальной позиции выбранного элемента, то запоминается индекс этого элемента в переменную MoveIndex. После завершения цикла, выбранный элемент перемещается перед элементом с индексом MoveIndex с помощью container.insertBefore(). Затем выбранный элементу удаляется класс "selected", чтобы он больше не считался выбранным. Если элемент не является выбранным, то он просто перемещается в начало контейнера с помощью container.insertBefore() и добавляется класс "selected". Таким образом, этот код эффективно перемещает выбранный элемент наверх или вниз, основываясь на его оригинальной позиции и манипулируя DOM.
0
|
||||
|
Молодой техлид)
|
||||||
| 18.07.2023, 13:28 | ||||||
|
я придумал альтернативное решение
0
|
||||||
| 18.07.2023, 13:28 | |
|
Помогаю со студенческими работами здесь
19
Неправильно удаляются элементы стека функция неправильно считает элементы
Неправильно выводит элементы массива в textbox Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
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. Пошагово создадим проект для загрузки изображения. . .
|