m.y.r., даелаете банальную переменную счетчик, если кратна трем - добавлять блоку клас или еще каким-нить способом длеать перенос блоков в стилях(если стркои, то и <br> можно)
Test11, получить все элементы по классу или селектороу (querySelectorAll), и потом в цикле перебирать их и по условию известному только вам решать какой контент добавить.
kuller, потому что Opera, Chrome, Safari поддерживают из коробки, Edge добавил для совместимости, а FF - нет.
Посмотрите пример с тем как там перебираются методы с префиксами, а потом вызывается доступный, а не только вэбкитовский. Первые 3 строчки ж.
P.S. Без английского никуда в программировании. Актуальная и хорошая литература переводится далеко не сразу
Test11, не понял вопроса. При правильном делегирование пока вы кликаете внутри блока с обработчиком - будет работать на любых блоках - существующих или добавленных позже.
Или что нужно сделать?
Test11, можно использовать стили. Есть куча техник выравнивания по центру, и куча готовых модалов которые если не использовать - то подсмотреть стили там можно.
Дальше мысль можно не продолжать. Нельзя делать 2 уникальных ID и ожидать что это будет работать с JS.
Хочется одинаковые - используйте классы (стиль и просто событие навесить) или data-* атрибуты (для хранения информации).
Как я уже и наванговал выше - читайте про "делегирвоание событий". Коротко - обработчик вешается на одного из общих предков и в обработчики события проверяется элемент из event.target.
Когда есть элемент - вытащить данные это не проблема.
Если тяжело с Vanilla JS, посмотрите в сторону jQuery и и метода .on