динамическая установка номера строки в зависимости от ее положения

#javascript

#javascript

Вопрос:

У меня есть список sections готовых элементов для каждого div и button для динамического создания новых разделов внизу. divs всегда создаются в конце раздела, в котором они находятся, и должны быть пронумерованы после их позиции в строке, а не в порядке их создания.

 <section id="section1"><div class="premade">1</div></section>
<button onclick="addRow(1)">Create new</button>
<section id="section2"><div class="premade">2</div></section>
<button onclick="addRow(2)">Create new</button>
  

Я застрял, пытаясь динамически устанавливать каждое число. Когда я создаю новый div, он должен получить свой номер в зависимости от раздела, который я выбираю для его создания, и количества разделов, которые этот раздел уже содержит, плюс количество разделов, которые есть в предыдущих разделах. И не так, как я :

 section.innerHTML  = '<div class="created"> '   parseInt(index   R)   '</div>'
R  = 1;
  

Код, который я написал, получает правильное число, когда я создаю новые divs от первого до последнего разделов, но он терпит неудачу, когда я возвращаюсь к предыдущему разделу, чтобы создать новый, поскольку он не знает количество существующих divs, которые уже есть в разделах. Число, которое имеют divs, расположенные после нового, также должно быть изменено, чтобы соответствовать их новой позиции в строке. Я застрял, пытаясь найти правильный синтаксис в javascript. Есть идеи, как я мог бы это сделать?

Спасибо за вашу помощь

Моя скрипка: https://jsfiddle.net/balleronde/8bx98a0r /

Комментарии:

1. Предполагая, что индекс является строкой, тогда parseInt(index R) он должен быть parseInt(index) R , но, возможно, он все равно не нужен. 😉

2. В javascript ‘ ‘ в ‘parseInt (index) R’ будет связывать числа типа 1 1 = 11, вместо того, чтобы выполнять математику 1 1 = 2. Спасибо за ваш ответ, хотя 🙂

3. Использование parseInt(index R) гарантирует, что если либо является строкой, то 1 1 будет 11 . Сначала каждое значение должно быть преобразовано в число, я предположил, что R будет инициализирован числом и, следовательно, не нуждается в преобразовании.

Ответ №1:

Я думаю, вам нужна отдельная переменная R (счетчик) для каждого раздела, если я понял, что вы на самом деле имели в виду.

допустим, R1 — это счетчик для самого верхнего раздела, R2 — это счетчик для 2-го самого верхнего раздела и так далее.

Комментарии:

1. Спасибо. Вот где я получил ваше предложение:jsfiddle.net/balleronde/Loj0xyvk/2 Я все еще не могу понять, как добавить свойства объекта к следующим, чтобы они отслеживали значения предыдущих

2. привет, Нора, какие «предыдущие значения»? не могли бы вы быть более конкретными. Спасибо. редактировать: инициализировать R1 = 1, R2 = 2, R3 = 3 и так далее?

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

4. Спасибо за ваш ответ, techfang. Я все еще борюсь со своим кодом. Простая инициализация R1 = 1, R2 = 2, R3 = 3 и т. Д. На Самом деле не решит мою проблему, потому что независимо от того, сколько квадратов я добавлю в раздел1, новые квадраты в раздел2 все равно начнут свой подсчет с номера 3 (значение R2 1) вместо отслеживания значения R1, а затемдобавление 1.

5. Лучше всего было попытаться отслеживать количество квадратов в каждом разделе. Основываясь на вашем предложении, я попытался определить свои переменные следующим образом: R1 = 1, R2 = R1 1, R3 = R2 1 и т.д. Эти определения работают при загрузке страницы (ура!), Но они не меняются, когда я добавляю новые квадраты. Похоже, что они застряли на значении, определенном при загрузке страницы, вместо динамического изменения. Я, вероятно, неправильно написал этот код? Вот что я попробовал: jsfiddle.net/balleronde/h7hm9zp4/2

Ответ №2:

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

Что вам нужно сделать, так это попытаться найти значение «R» после каждого нажатия кнопки. и обновите все разделы, обновив только что созданный.

PS Используйте jQuery, чтобы упростить задачу.

Ответ №3:

Вы должны разделить «представления» на «данные».

Например, вы можете отслеживать свои данные в виде списка или массива объектов [{section: "section1", id:1},{section: "section2", id:2}] и «создавать» свой HTML-код из этих данных.

Тогда вам нужно будет только изменить данные массива (отредактировать, вставить или удалить объект) и вызвать функцию для «перестроения» вашего представления из нового списка объектов.

Комментарии:

1. Спасибо за ваш ответ. Использование объекта для хранения количества разделов для каждого раздела кажется правильным, поскольку это позволяет мне динамически использовать индекс нажатой кнопки для просмотра свойств объекта. Однако я все еще борюсь с синтаксисом… Я попытался добавить значения свойств объекта, каждое из которых является суммой предыдущих, но я, очевидно, делаю это неправильно. Любой намек на то, каким будет правильный синтаксис? Извините за основной вопрос.