Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Безопасная манипуляция с DOM (https://javascript.ru/forum/jquery/29779-bezopasnaya-manipulyaciya-s-dom.html)

W1nD 11.07.2012 02:10

Безопасная манипуляция с DOM
 
Возник такой вопрос. Есть такая вот функция:
function create_avatar_div (generate_random_number) {
        var div = '',
            avatar_style_container = this.generate_random_position(generate_random_number),
            container_super = []
            for (var i = 0; i < generate_random_number; i++) {
                div = $(document.createElement('div')).addClass('avatar')
                        .css({
                            'width':avatar_style_container.random_width[i],
                            'opacity':avatar_style_container.random_opacity[i],
                            'height':avatar_style_container.random_height[i],
                            'top': avatar_style_container.random_top[i]                            
                        })
                        .attr({
                            'data-coordinate-end-animation':avatar_style_container.random_left[i],
                            'data-coordinate-start-animation':300
                        })
                console.log(div)
                container_super[i] = div
            }
    }

Если сделать console.log(container_super) то выведется весь массив элементов.
Вопрос вот в чем, как можно весь этот массив сразу вставить в div чтобы вместо большого количества манипуляций с DOM сделать это все в один присест?

Aetae 11.07.2012 02:20

Пример: Cтрока 4
container_super = document.createDocumentFragment();


Пример: Cтрока 18
container_super.appendChild(div);

W1nD 11.07.2012 02:25

Вот какое решение я нашел:
Создаем фейковый блок
var fake_element = $('<div class="fake_element"></div>')

после этого все новые созданные элементы добавляем
в этот элемент
for (var i = 0; i < generate_random_number; i++) {
                pizda.append($(document.createElement('div')).addClass('avatar')
                        .css({
                            'width':avatar_style_container.random_width[i],
                            'opacity':avatar_style_container.random_opacity[i],
                            'height':avatar_style_container.random_height[i],
                            'top': avatar_style_container.random_top[i]                            
                        })
                        .attr({
                            'data-coordinate-end-animation':avatar_style_container.random_left[i],
                            'data-coordinate-start-animation':300
                        }))
                console.log(pizda)
            }

DOM не задет, так как fake_element не в DOM

после того как вышли из цыкла можна наш элемент вставить в любой узел
$('.user-avatar-icon-container').append(fake_element)

W1nD 11.07.2012 02:31

Цитата:

Сообщение от Aetae (Сообщение 187971)
Пример: Cтрока 4
container_super = document.createDocumentFragment();


Пример: Cтрока 18
container_super.appendChild(div);

Цитата:

Сообщение от Aetae
document.createDocumentFragment()

просто замечательный метод, я до этого его не встречал, есть что-то подобное в jQuery


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