Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Переопределение индекса (https://javascript.ru/forum/misc/79350-pereopredelenie-indeksa.html)

Biotoxsin 27.01.2020 18:34

Переопределение индекса
 
Здравствуйте!

Подскажите как можно осуществить постоянное изменение переменной?
var index = $('.active').index();
$('.example').css({ top: index + "0px" });


Дело в том что после присваивания другому блоку класса .active (Класс предыдущего блока удаляется) индекс не меняется, как сделать так чтоб он переопределился?

рони 27.01.2020 18:49

Цитата:

Сообщение от Biotoxsin
после присваивания

что присваивает пусть то пусть и меняет индекс.
Цитата:

Сообщение от Biotoxsin
index + "0px"

странная конструкция.

Biotoxsin 27.01.2020 19:18

рони,
А по другому никак?

рони 27.01.2020 19:43

Цитата:

Сообщение от Biotoxsin
А по другому никак?

это нормальный способ, есть другой https://learn.javascript.ru/mutation-observer

Biotoxsin 27.01.2020 20:24

рони,
"это нормальный способ" что-то не понял про нормальный способ, что значит "что присваивает пусть то пусть и меняет индекс"?

рони 27.01.2020 20:27

Цитата:

Сообщение от Biotoxsin
что значит

где код?

Biotoxsin 27.01.2020 20:33

рони,
Вот
var index = $('.active').index();
$('.example').css({ top: index + "0px" });

рони 27.01.2020 20:38

Biotoxsin,
это обрывок, нужен код который у вас не работает.
Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[html run]
... минимальный код страницы с вашей проблемой
[/html]

О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.

Biotoxsin 27.01.2020 22:37

рони,
Выяснил что не работает именно вариант
var index = $('.active').index();


Сама переменная не переназначается, если вызывать без переменной то всё работает как надо. Подскажите почему так?

рони 28.01.2020 05:39

Biotoxsin,
нужен код, без кода сложно что-либо подсказать.

Biotoxsin 28.01.2020 18:12

рони,
<div style="height:100%" class="exemple">
<span></span>
<span></span>
<span></span>
<span></span>
</div>

$('.exemple span:nth-child(1)').addClass('action');

$('.exemple').click(function() {
        $('.exemple span:nth-child(1)').remove('.action');
	$('.exemple span:nth-child(3)').addClass('action');
})
//до этого момента код изменить нельзя, сделал что-то похожее имитирующее мою проблему.

var index = $('.active').index();

$('.exemple').css({ top: index + "0px" });


Вот, только не знаю как тут реализовать тут запуск JS кода в HTML.

Malleys 28.01.2020 19:00

Biotoxsin, ваш код ничего на странице не показывает! Не понятно, что вы хотите достичь! (Может вы забыли показать нам CSS!)

laimas 28.01.2020 19:30

Цитата:

Сообщение от Biotoxsin
$('.active').index()

Индекс может быть только у элемента коллекции. Ну и к top добавить индекс, это нечто. Если сместить позицию нужно до элемента этого класса, тогда высота элемента умноженная на индекс.

Biotoxsin 28.01.2020 20:47

Господа Malleys, laimas, это пример. На примере я хочу получить индекс и присвоить его переменной, но после нажатия на окно, смены класса на другой элемент, индекс остаётся всё тот же.

Если же вставить этот код в обработчик события click (новый) то index будет обновляться после каждого нажатия. У меня же есть вопрос как этот код нужно представить чтоб переменная index обновлялась сама без использования её в событии click?

"Ну и к top добавить индекс, это нечто." а что не так? Как бы вы добавили значение равное индексу?

laimas 28.01.2020 20:53

Кошмар какой-то. Индекс в JQ, это collection.index(element), а без относительно коллекции никакого индекса вернуться не может. Сам по себе индекс также не изменяется, он и не может измениться у элемента никак до тех пор, пока у элемента не изменится порядок в коллекции.

А индекс, это от 0 до восьмерки на боку, каким образом можно изменить top увеличивая его на индекс?

Biotoxsin 28.01.2020 21:48

laimas,
В документации не говориться о том что это collection.index(element) . Так же приводятся примеры без использования коллекции.

К тому же как я написал способ работает если его обновлять каждый раз при помощи события например click.

А вопрос как раз в том можно ли как то обновлять его в фоновом режиме так сказать.

laimas 28.01.2020 22:06

Цитата:

Сообщение от Biotoxsin
В документации не говориться о том что это collection.index(element)

Вам известно, что в шеренге есть Вася, но вы не знаете сколько всего в шеренге. Можете ли вы при этом сказать какой по порядку в шеренге Вася?

Читайте - http://jquery.page2page.ru/index.php..._наборе

Biotoxsin 28.01.2020 22:29

laimas,
В документации есть такой пример:
alert('Index: ' + $('#bar').index());

Думаю вы его видели. Чем же он отличается от моего варианта ведь у меня active ищется среди соседних элементов которыми являются span?

рони 28.01.2020 22:33

Biotoxsin,
какую задачу вы хотите выполнить?

laimas 28.01.2020 22:42

Biotoxsin, тогда извиняюсь, думал что вы ищите индекс не известно чего. Но не понятно что вы пытаетесь сделать. К примеру коллекция позиционирована абсолютно и сдвигается на количество элементов по индексу выбранного в группе. Берем высоту элемента и умножаем на индекс. А вы чего хотите добиться добавляя индекс к top?

Biotoxsin 29.01.2020 00:59

laimas,
рони,
Вот смотрите...
Html структуру вы вдели. У нас есть получения индекса после загрузки страницы и присвоения active блоку span:
var index = $('.active').index();

После чего в следствии работы некой функции класс active будет присваиваться другому порядковому элементу span (а именно 3-му).
Если мы оставляем всё как есть, index не обновит данные о смене класса active и не сменит значение с 0 на 2.

Как я писал выше, если добавить index в функцию с событием click он будет обновляться после клика.
$('*любой стиль для кнопки*').click(function() {
  var index = $('.active').index();
  console.log(index)
})


А как сделать это обновление переменной index без внешнего вмешательства пользователя, а именно клика/перетаскивания/скрола и прочего?

laimas 29.01.2020 01:46

Это и вся проблема? Так вам рони давно уже сказал, то что изменяет его, должно заниматься и изменением значения переменной. Некая функция изменила класс, пусть и изменяет значение переменной index.

Biotoxsin 29.01.2020 02:42

laimas,
В том то и дело, нельзя изменить то что его меняет

laimas 29.01.2020 03:10

Цитата:

Сообщение от Biotoxsin
В том то и дело, нельзя изменить то что его меняет

Это как?

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

Biotoxsin 29.01.2020 21:30

laimas, рони,
Malleys.
Спасибо за подсказки, ребят, решил проблему.
А всё же, если нет возможности изменить то что меняет, как тогда можно было бы решить эту задачку?


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