Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Вставить новые элементы в DOM (https://javascript.ru/forum/events/44537-vstavit-novye-ehlementy-v-dom.html)

1lider 23.01.2014 18:15

Вставить новые элементы в DOM
 
Здравствуйте.

На jquery есть такая интересная функция - $(element).append();

Не буду долго тянуть. Вопрос. Как добавить новые элементы на страницу тем же образом что и append(), но только на чистом javascript, без jquery?

На другом форуме мне советовали такой вариант:

var div = document.createElement('div');
div.innerHTML = data; // html данные пришедшие с сервера
var target = document.getElementById("div_container");
target.appendChild(div);
div = null;


И даже был такой вариант:

document.getElementById("div_container").innerHTML += data;

Но эти варианты, мне немножко не подходят. Первый, потому что создает новый div и вставляет в него данные. А второй, перезаписывает все имеющиеся элементы на странице.. Интересно, как jquery фунция .append(), добавляет к уже существующим элементам, новые элементы?

jsru_ 23.01.2014 19:19

var target = document.getElementById("div_container");
target.appendChild(data);

danik.js 23.01.2014 19:19

Цитата:

Сообщение от 1lider
Интересно, как jquery фунция .append(), добавляет к уже существующим элементам, новые элементы?

Через appendChild и добавляет. Притом что HTML парсится там именно путем создания div'а (в некоторых случаях создается другой элемент).

То есть твой первый вариант и есть упрощенный вариант jQuery.


Есть еще target.insertAdjacentHTML('beforeend', html)

animhotep 23.01.2014 19:19

Цитата:

Сообщение от 1lider
Первый, потому что создает новый div

append тоже создаёт новый элемент, как без этого?
ещё есть appendChild

danik.js 23.01.2014 19:27

Цитата:

Сообщение от 1lider
На jquery...

Китаец что-ли? Тут уместен предлог "в". Хотя некоторым свойственно свое "на.." всюду вставлять.
Короче, пошел я спать на.

1lider 23.01.2014 19:30

Благодарю за ответы. А может быть такой вариант, что append() использует в своей вставке document.createDocumentFragment()?

Стянул отсюда - http://javascript.ru/optimize/docume...cumentfragment
Цитата:

Фишка заключается в том, что когда documentFragment вставляется в DOM - то он исчезает, а вместо него вставляются его дети.

1lider 23.01.2014 19:58

Цитата:

append тоже создаёт новый элемент, как без этого?
Есть ли способ вставки, без, создания этого "нового элемента"? Например с помощью того же DocumentFragment. У меня этот "новый элемент", на странице портит всю картину..

danik.js 23.01.2014 20:10

Цитата:

Сообщение от 1lider
А может быть такой вариант, что append() использует в своей вставке document.createDocumentFragment()?

Что за вопрос. Ты ослеп? Выше было уже сказано как работает append().
Ну хорошо..
Нет. Вместо фрагментов в jQuery используются "коллекции". К слову функция $ возвращает коллекцию (массиво-подобный объект).

Ты ж как пишешь: $(target).append($('<span/><span/>')), то есть:
var collection = $('<span/><span/>');

создается временный div через document.createElement, ему присваивается переданный innerHTML. В результирующую коллекцию попадут div.childNodes.

$(target).append(collection)

Тут все просто - каждый из элементов коллекции добавляется в target через appendChild.

Цитата:

Сообщение от 1lider
Есть ли способ вставки, без, создания этого "нового элемента"?

Глаза разуй. Выше был предложен такой метод.
Цитата:

Сообщение от 1lider
У меня этот "новый элемент", на странице портит всю картину..

Ничего он не может портить. Или он не дает тебе покоя? Ну скрой под капот. В jQuery такой шняги понапихано - посмотрить внутренности - ужаснешься и не захочешь использовать :D


Сорри, собрался отдыхать, а тут какие-то глупости посыпались...

1lider 23.01.2014 20:11

Как добавить пришедшие с сервера html данные в контейнер к уже существующим элементам на странице? И без создания новых div. Просто, добавить "как есть"..

1lider 23.01.2014 20:13

danik.js. Отдыхайте и не обращайте внимания на наши глупости.. Вас лично никто не заставляет. Найдётся куча других добрых людей, которые смогут НОРМАЛЬНО по человечески всё изъяснить.

danik.js 23.01.2014 20:13

Бляя...
Цитата:

Сообщение от danik.js
Есть еще target.insertAdjacentHTML('beforeend', html)

Насчет кроссбраузерности не ручаюсь, хотя проблем быть не должно..
Чем div не угодил, а?

danik.js 23.01.2014 20:16

Цитата:

Сообщение от 1lider
danik.js. Отдыхайте и не обращайте внимания на наши глупости.. Вас лично никто не заставляет. Найдётся куча других добрых людей, которые смогут НОРМАЛЬНО по человечески всё изъяснить.

Да ладно. Если ты читать не умеешь, тот помочь тебе трудно будет.

danik.js 23.01.2014 20:19

Цитата:

Сообщение от 1lider
Как добавить пришедшие с сервера html данные в контейнер к уже существующим элементам на странице?

Цитата:

Сообщение от 1lider
Есть ли способ вставки, без, создания этого "нового элемента"?

Цитата:

Сообщение от danik.js
Есть еще target.insertAdjacentHTML('beforeend', html)

Как ты думаешь, что делает метод insertAdjacementHTML? INSERT HTML? INSERT! HTML!!!
"Какую-то непонятную хрень, которая не касается моей темы" - подумал ты и наштамповал одинаковых вопросов, невзирая на намеки...

1lider 23.01.2014 20:20

danik.js. Ну а что теперь, как быдло себя ведёте. Сколько вам лет, 13? И когда мы перешли с вами на ТЫ.

danik.js 23.01.2014 20:21

Все, я спать. На всякий случай, повторю:
Цитата:

Сообщение от danik.js
insertAdjacentHTML


1lider 23.01.2014 20:23

Цитата:

Сообщение от danik.js (Сообщение 293693)
Все, я спать. На всякий случай, повторю: insertAdjacentHTML

Буду копать в этом направлении. Спасибо.

danik.js 23.01.2014 20:27

Цитата:

Сообщение от 1lider
Ну а что теперь, как быдло себя ведёте

Фух, слава богу, значит ты не слеп и умеешь читать. Это радует :)
Цитата:

Сообщение от 1lider
И когда мы перешли с вами на ТЫ

Это интернет, детка. Кто ж тебя знает. Может ты бот?

Если что-то не нравится - попрошу игнорировать мои ответы и не пользоваться предложенными советами.

1lider 23.01.2014 20:33

danik.js. Конечно, хорошо что вы даете советы. И я ценю это. Но ведь, можно всё это преподавать в более "человечной" форме. Чтобы впоследствии никто ни на кого не держал обиду и злость. Кому нужны эти разногласия..

danik.js 23.01.2014 20:46

Цитата:

Сообщение от 1lider
более "человечной" форме

Пытаюсь использовать такую форму в первых комментариях. Дальше форма становится бесчеловечной. А вобще - не воспринимай все так близко к сердцу. Тем более написанное кем-то там.

1lider 23.01.2014 21:28

danik.js. Ваши советы мне помогли. Спасибо. Благодарствую.

kostyanet 24.01.2014 04:49

Цитата:

Сообщение от 1lider (Сообщение 293683)
Как добавить пришедшие с сервера html данные в контейнер к уже существующим элементам на странице? И без создания новых div. Просто, добавить "как есть"..

Взаимоисключающие параграфы. Тема требует вставить новые элементы в DOM. А вы хотите вставить в окно, то есть браузеру подкинуть чтоб он отрендерил.

Ну вот, это зависит от задачи. Если вам не нужны эти новые элементы в доме, не нужны события на них и все такое - закидывайте новый кусок хтмля. Иначе - в дом.


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