Перемещение блоков по веб-странице.

Рассмотрим простой пример: перенесем форму поиска со всем ее содержимым из правой колонки в "шапку" этой страницы. Функциональность формы при этом останется прежней. ?сходный код документа также не изменится. ?зменится лишь структура дерева документа и внешний вид веб-страницы.

Чтобы был понятен именно принцип, не будем усложнять скрипт различными проверками наличия или отсутствия элементов, поддержки методов и пр. Условимся, что "шапку" в документе представляет

. А после загрузки всего докумета (событие onload) переместить в определенное дизайном место на странице и сделать видимым.



Много комментариев (8) к “Перемещение блоков по веб-странице.”

  1. Пока лаиер :) :

    круто!!!


  2. Дмитрий К. :

    Не совсем понятно для чего делается клонирование блока, если используется всего один экземпляр этого блока? На мой взгляд следующая реализация скрипта будет работать аналогично приведённой в статье.

    function replaceBlock() {
    var mBlock = document.getElementById(”searchform”);
    var newPlace = document.getElementById(”header”);
    mBlock.parentNode.removeChild(mBlock);
    newPlace.insertBefore(mBlock, newPlace.firstChild);
    }


  3. Баранов Андрей :

    Для Дмитрий К.: не проверял, но должно работать.

    В рассматриваемом примере предусмотрен вариант, когда может возникнуть необходимость оставить еще и начальный блок на прежнем месте.

    В этом случае последняя строка mBlock.parentNode.removeChild(mBlock); в функции не нужна. Но нужно изменить значение ID какому-либо из блоков: исходному или клонированному. Т.е. примерно так:
    mBlock.id = “newID”; – для начального блока или
    clonedBlock.id = “newID”; – для клонированного.


  4. Даниил Зильберман :

    ?нтересно…
    Жаль нету примеров реальной пользы подобного метода, прикладного, так сказать, применения.
    Где с пользой можно использовать подобную функцию?


  5. Дмитрий К. :

    Для Даниил Зильберман: подобный подход я использовал для переключения между простым и расширенным отображением формы фильтров. Я генерировал в HTML страницу изображение двух форм: простой и расширенной, после этого через myNode.parentNode.removeChild(myNode) “выкусывал” расширенную форму и сохранял её в переменной на странице. А по клику на “расширенном виде фильтров”, вставлял сохранённую расширенную форму и “выкусывал” упрощённый вид формы.

    В отличие от управления видимостью своством display, в данном случае взаимозаменяемые части HTML документа могут содержать пересекающийся набор input-ов внутри form-ы.

    и если не убрать один из div-ов с помощью removeChild, а просто спрятать по display: none, то данные всё-равно будут посылаться на сервер из двух наборов input-ов и поле username прийдёт дважды.


  6. Эдуард :

    Для Дмитрий К., который писал для Даниил Зильберман.

    Думаю в данном случае гораздо быстрее работало бы просто скрытие блока с расширенной информацией или восстановление видимости обратно, а для решения проблемы с одинаковыми именами input-ов выставлять свойство disabled для input-ов невидимой формы в true, а для видимой в false. Если input disabled, то при submit’е его данные на сервер не едут, что и решает проблему с дублированием.

    Best, Ed.


  7. root :

    Может пригодится, спасибо
    Оффтопик:
    Щелкнул на баннер валидатора:
    / Failed validation, 72 errors


  8. Алексей :

    http://google.com/ig?hl=en
    персоналайз ё хомпейдж.. это оно?)