Moving a div from inside one div to another div using Prototype?

后端 未结 4 1785
盖世英雄少女心
盖世英雄少女心 2020-12-28 18:25

In prototype or normal-but-cross-browser-compatible Javascript, how do I move the contents of a div to the contents of another div?

Inside the div is a form with ids

相关标签:
4条回答
  • 2020-12-28 18:32

    To move the contents of here into there, you're basically after:

    $('there').insert($('here').childNodes);
    

    Sadly, that doesn't work.

    As with the other two answers, it looks like you have to resort to plain JavaScript with prototype only providing a shorthand for document.getElementById.

    var frag = document.createDocumentFragment();
    for (var c = $('nav').firstChild, n; c; c = n) {
        n = c.nextSibling;
        frag.appendChild(c);
    }
    $('header').appendChild(frag);
    

    (See John Resign's blog for performance stats on DocumentFragments: http://ejohn.org/blog/dom-documentfragments/)

    0 讨论(0)
  • 2020-12-28 18:33

    Perhaps not a major point, but there is no Node.migrateChild() built-in Javascript interface method. If a fragment already has a parent elsewhere in the DOM (as div id='MacGuffin' does in example markup above), appendChild() quietly detaches the argument fragment from any current parent before reattaching under the new parent. In my mind migrateChild() would be a more semantically meaningful method name than appendChild(), less need for StackOverflow developer searches to allude to its more powerful abilities.

    0 讨论(0)
  • 2020-12-28 18:51

    To move the contents of here into there, this works, as long as here encloses everything you want to move, like a <div>:

    $('there').insert($('here').descendants()[0]);
    

    descendants() returns an array, and insert takes content, so use the first element.

    0 讨论(0)
  • 2020-12-28 18:52

    You can add this at the very end of the BODY tag:

    <script>
      document.getElementById('there').appendChild(
        document.getElementById('MacGuffin')
      );
    </script>
    

    MacGuffin will be moved automatically from one to the other.
    And there won't be any flickering.

    0 讨论(0)
提交回复
热议问题