Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/25: Рейтинг темы: голосов - 25, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 07.11.2017
Сообщений: 121

Создание вложенных DOM элементов

02.12.2018, 14:17. Показов 5498. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Нужно вывести на экран список контактов, их несколько десятков. Блок, в котором они будут выводиться, уже задан в html, все остальное должно создаться с помощью js. Структура должна получиться такая:

HTML5
1
2
3
4
5
<div id="list>  //задан изначально
   <div class="list_item"><p>Kira Nitely</p></div>
                           ...
   <div class="list_item"><p>Kira Nitely</p></div>
</div>
Только вот не получается так сделать. Без проблем выходит создать div и в него поместить имена, но это не вариант, или создать p с именами, но уже без див. Когда пытаюсь вложить p в div, получается непойми что. Как можно сделать пример выше? Мой код:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
for (i = 0; i <data.length; i++){
        var names = data[i].name;
        var list = document.getElementById('list');
 
        // var p = document.createElement('p');
        // p.innerHTML = names;
        var contacts = document.createElement('div');
        contacts.className = "list_item";  //?
 
        // contacts.textContent = names;
        $('.list_item').append('<p>' + names + '</p>');
        list.appendChild(contacts);
 
        $('.list_item').css('border-bottom', '1px solid #75BFFF')
                        .css('height', '10%')
                        .css('color', '#75BFFF');
    };
Список берется из json без проблем. Заранее спасибо)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.12.2018, 14:17
Ответы с готовыми решениями:

Создание и вставка вложенных элементов JS
$(&quot;&lt;tr&gt;&quot; + &quot;&lt;td class='number'&gt;&quot; + &quot;&lt;pre&gt;&quot; + &quot;#&quot; + i + &quot;&lt;/pre&gt;&quot; + &quot;&lt;/td&gt;&quot; + &quot;&lt;td class='tesUNSUCCESS'&gt;&quot; + &quot;&lt;pre&gt;&quot; + TxType + &quot;&lt;/pre&gt;&quot; +...

Написать скрипт, рекурсивно обходящий дерево DOM страницы dom.html, начиная от корня DOM
Написать скрипт на языке JavaScript, рекурсивно обходящий дерево DOM страницы dom.html, начиная от корня DOM (объект document). ...

Создание элементов DOM js
Здравствуйте! Есть вот такой php и скрипт в нем: &lt;?php $dblocation = &quot;localhost&quot;; $dbname = &quot;wpdevice&quot;; $dbuser =...

4
Всегда онлайн
 Аватар для MrOnlineCoder
1084 / 788 / 295
Регистрация: 07.04.2013
Сообщений: 2,703
02.12.2018, 14:27
Limongrass,
Цитата Сообщение от Limongrass Посмотреть сообщение
$('.list_item').append('<p>' + names + '</p>');
Этот селектор выберет все элементы класса list_item, т.е. все контакты будут продублированы.

Вам нужно изменить в цикле только новый элемент списка.

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
for (i = 0; i <data.length; i++){
        var contactName = data[i].name;
        var list = document.getElementById('list');
 
        var listItem = document.createElement('div');
        listItem.className = "list_item";
 
        listItem.innerHTML = '<p>' + contactName + '</p>';
        list.appendChild(listItem);
};
 
$('.list_item').css('border-bottom', '1px solid #75BFFF')
                        .css('height', '10%')
                        .css('color', '#75BFFF');
http://jsfiddle.net/eqtdvh18/
1
0 / 0 / 0
Регистрация: 07.11.2017
Сообщений: 121
02.12.2018, 16:31  [ТС]
MrOnlineCoder, гениальное просто. Столько всего перепробовала и местами переменяла, а так получилось. Спасибо!

Добавлено через 20 минут
Немного дополнила код:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
for (i = 0; i <data.length; i++){
        let names = data[i].name;
 
        let img = document.createElement('img');   // картинки перед именами
        img.className = "contacts_list_avatar";
        img.src = data[i].avatar;
 
 
        $('.contacts_list_avatar').css('width', '10px').css('height', '10px');
 
        var list = document.getElementById('list');
        var contacts = document.createElement('div');
        var contactsDiv = document.getElementsByClassName('list_item');
        contacts.className = "list_item";
        contacts.innerHTML = img + '<p>' + names + '</p>';
        list.appendChild(contacts);
 
        $('.list_item').css('border-bottom', '1px solid #75BFFF')
                        .css('height', '10%')
                        .css('color', '#75BFFF');
 
        contactsDiv[i].onclick = function detailed(event){
            var target = event.target;
            $('#contact_screen').css('display', 'none');
            $('#detailed').css('display', 'block');
            console.log(target.textContent)
        }                
    };
Пыталась создать тег img и присвоить его src значение, но вместо изображения он выводит [Object HTMLImageElement]. Как получить картинку?
0
Всегда онлайн
 Аватар для MrOnlineCoder
1084 / 788 / 295
Регистрация: 07.04.2013
Сообщений: 2,703
02.12.2018, 17:14
Цитата Сообщение от Limongrass Посмотреть сообщение
contacts.innerHTML = img + '<p>' + names + '</p>';
innerHTML (содержимое элемента) - это текст (строка). img - это созданный вами DOM элемент, соответственно он приводиться к типу строка, что и будет [Object HTMLImageElement]. Если хотите добавить картинку, нужно:

либо добавлять HTML картинки: '<img src="'+data[i].avatar+'">' + '<p>' + names + '</p>', что не очень удобно и вообще криво.

либо работать с деревом DOM:

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
let img = document.createElement('img');   // картинки перед именами
img.className = "contacts_list_avatar";
img.src = data[i].avatar;
 
var list = document.getElementById('list');
var listItem = document.createElement('div');
listItem.className = "list_item";
 
var p = document.createElement('p');
p.innerHTML = names;
 
listItem.appendChild(p);
listItem.appendChild(img);
 
list.appendChild(listItem);
 
$('.contacts_list_avatar').css('width', '10px').css('height', '10px');
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
02.12.2018, 17:21
Limongrass, тут просто список без обработчика события:
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <style>
        .list_item {
            border-bottom: 1px solid #75BFFF;
            height: 10%;
            color: #75BFFF;
        }
        .contacts_list_avatar{
            width:50px;
            height:50px;
        }
    </style>
</head>
<body>
    <div id="list"></div>
    <script>
        let data = [
            { name: "Kira Nitely1", avatar: "http://cyberstatic.net/images/cyberforum_logo.png" },
            { name: "Kira Nitely2", avatar: "http://cyberstatic.net/images/cyberforum_logo.png" },
        ];
        let list = document.getElementById('list'),
            s = "";
 
        for (let item of data) {
            s += `<div class="list_item"><img class="contacts_list_avatar" src="${item.avatar}" /><p>${item.name}</p></div>`;
        }
 
        list.innerHTML = s;
    </script>
</body>
</html>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.12.2018, 17:21
Помогаю со студенческими работами здесь

Динамическое создание элементов DOM
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.1//EN&quot; &quot;http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd&quot;&gt; &lt;html...

Создание DOM
Есть идея: Добавить на страницу кнопочку, написать для нее код, который бы добавлял на страницу другие элементы. Все хорошо:...

Создание событий на ячейку таблицы через DOM
var tr = document.createElement('tr'); var td = document.createElement('td'); var text = document.createTextNode('Удалить данного...

HTML DOM как с использованием Javascript создать узлы DOM
Доброго времени суток. хочу через Javascript по событию onclick добавить в html документ что то вроде: &lt;div&gt;hello world&lt;/div&gt;...

Создание таблицы умножения с использованием вложенных циклов for
Здравствуйте! Решаю такую проблему: необходимо с помощью вложенных циклов for создать визуальную таблицу умножения, где, например, на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
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. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru