#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. Спасибо за ваш ответ. Использование объекта для хранения количества разделов для каждого раздела кажется правильным, поскольку это позволяет мне динамически использовать индекс нажатой кнопки для просмотра свойств объекта. Однако я все еще борюсь с синтаксисом… Я попытался добавить значения свойств объекта, каждое из которых является суммой предыдущих, но я, очевидно, делаю это неправильно. Любой намек на то, каким будет правильный синтаксис? Извините за основной вопрос.